       function  fmos (vgs,vgd,vt,beta ,xkd)
       implicit real *8 (a-h,o-z),  integer *4 (i-n)
check for cutoff region:
       if (((vgs. lt.vt).and.(vgd. lt.vt)). or.(vgs.eq .vgd)) then
          fmos = 0d0
          go to  9999
       end if
check for triode region:
       if ((vgs.ge .vt) .and. (vgd. ge.vt))  then
          fmos=(beta/2d0)*(vgs*vgs-vgd*vgd -2d0*vt*(vgs-vgd))
          go to  9999
       end if
check for inverted pinchoff region:
       if (vgs.lt .vgd) then
          fmos=(-beta/2d0)*(1d0-(vt-vgs)/xkd)*(vgd-vt)*(vgd-vt)
          go to  9999
       end if
c normal pinchoff region:
       fmos=(beta/2d0)*(1d0-(vt-vgd)/xkd)*(vgs-vt)*(vgs-vt)
 9999  return
       end
