      subroutine UGENS(ddndde,force,statev,sse,spd,pnewdt,stran,dstran,
     1 tss,time,dtime,temp,dtemp,predef,dpred,cename,ndi,nshr,nsecv,
     2 nstatv,props,jprops,nprops,njprop,coords,celent,thick,dfgrd,curv,
     3 basis,noel,npt,kstep,kinc,kit,linper)
c
      include 'aba_param.inc'
c
      character*80 cename
      dimension force(nsecv),statev(nstatv),ddndde(nsecv,nsecv),
     1          stran(nsecv),dstran(nsecv),predef(*),dpred(*),
     2          props(*),jprops(*),coords(3),time(2),dfgrd(3,3),
     3          curv(2,2),basis(3,3),tss(*)
      parameter (zero=0.0d0,half=0.5d0)
c
c STORE ARGUMENT LIST IN STATE VARIABLE ARRAY (FOR PRINTOUT IN RESULTS FILE)
      statev(1)=noel
      statev(2)=npt
      statev(3)=kstep
      statev(4)=kinc
      statev(5)=kit
      statev(6)=time(1)
      statev(7)=dtime
      statev(8)=thick
      statev(9)=celent
      statev(10)=temp
      statev(11)=dtemp
c
c --- no field variable defined in the problem
c
      statev(12)=zero
      statev(13)=zero
      k3=0
      do k1=1,3
        do k2=1,3
          statev(14+k3)=basis(k1,k2)
          statev(23+k3)=dfgrd(k1,k2)
          k3=k3+1
        end do
      end do
      statev(32)=curv(1,1)
      statev(33)=curv(1,2)
      statev(34)=curv(2,1)
      statev(35)=curv(2,2)
      statev(36)=tss(1)
      statev(37)=tss(2)
      statev(38)=coords(1)
      statev(39)=coords(2)
      statev(40)=coords(3)
      do k1=1,nsecv
        statev(40+k1)=stran(k1)
      end do
      istatev=40+nsecv
c
c ASSEMBLE SECTION STIFFNESS MATRIX FROM USER SPECIFIED PROPERTIES
      if (nsecv.eq.4) then
        ddndde(1,1) = props(1)
        ddndde(1,2) = props(2)
        ddndde(1,3) = props(7)
        ddndde(1,4) = props(11)
        ddndde(2,2) = props(3)
        ddndde(2,3) = props(8)
        ddndde(2,4) = props(12)
        ddndde(3,3) = props(10)
        ddndde(3,4) = props(14)
        ddndde(4,4) = props(15)
        do ksecv1=1,nsecv
          do ksecv2=1,ksecv1
             ddndde(ksecv1,ksecv2) = ddndde(ksecv2,ksecv1)
          end do
        end do
      else
        iprop=1
        do ksecv1=1,nsecv
          do ksecv2=1,ksecv1
             ddndde(ksecv2,ksecv1) = props(iprop)
             ddndde(ksecv1,ksecv2) = ddndde(ksecv2,ksecv1)
             iprop=iprop+1
          end do
        end do
      end if
c
c UPDATE FORCES AND MOMENTS FOR NONLINEAR STEPS
 
      if(linper.eq.0)then
      do ksecv1=1,nsecv
        do ksecv2=1,nsecv
          force(ksecv1) = force(ksecv1) + ddndde(ksecv1,ksecv2)*
     *                    dstran(ksecv2)
        end do
        statev(istatev+ksecv1) = force(ksecv1)
      end do
      endif
c
 999  continue
      return
      end
