C DSLAMBDA  SOURCE    AM        12/02/28    21:15:10     7291
      SUBROUTINE dsiglambda(x1,x2,P2,pi2,ag,fc,fb,lcp,rkappait,
     .                  parahot3,idimpara3,U,H66,sigma,dsiglt,dsiglc)

c     This subroutine calculates the DERIVATIVE OF THE STRESS VECTOR with respect to THE PLASTIC MULTIPLIER
c     corresponding to the plastic multipliers Dlambdat = x1 and Dlambdac = x2

      IMPLICIT REAL*8 (A-B,D-H,O-Z)
      implicit integer (I-K,M,N)
      implicit logical (L)
      implicit character*10 (C)

      dimension sigma(6),d2gc(6,6),d2gt(6,6),trav66(6,6),H66(6,6)
      dimension trav66b(6,6),B1(6,6),dgt(6),dgc(6),trav6(6)
      dimension trav6b(6),dsiglt(6),dsiglc(6),pi2(6),P2(6,6)
      dimension parahot3(idimpara3),U(6,6)

      Dlambdat = x1
      Dlambdac = x2

      call ddsigrank(sigma,d2gt,1,2,3,4,5,6,lcp,parahot3,idimpara3)
      call ddsiggc(sigma,d2gc,ag,P2,pi2,1,6,fc,fb,lcp)

      call mulAB(H66,d2gt,trav66,6,6,6,6)
      do jloc=1,6
        do iloc=1,6
          trav66(iloc,jloc) = Dlambdat * trav66(iloc,jloc)
        end do
      enddo
      call mulAB(H66,d2gc,trav66b,6,6,6,6)
      do jloc=1,6
        do iloc=1,6
          trav66b(iloc,jloc) = Dlambdac * trav66b(iloc,jloc)
        end do
      enddo
      do jloc=1,6
        do iloc=1,6
          B1(iloc,jloc) = U(iloc,jloc) + trav66(iloc,jloc) +
     .                                   trav66b(iloc,jloc)
        end do
      enddo
      call invert9(B1,6,6)

      call dsigRank(sigma,dgt,3,6,parahot3,idimpara3,rkappait,lcp)
      call dsiggc(sigma,dgc,ag,P2,pi2,1,6,fc,fb,lcp)

      call mulAB(H66,dgt,trav6,6,6,6,1)
      call mulAB(H66,dgc,trav6b,6,6,6,1)

      call mulAB(B1,trav6,dsiglt,6,6,6,1)
      call mulAB(B1,trav6b,dsiglc,6,6,6,1)

      do iloc=1,6
        dsiglt(iloc) = -dsiglt(iloc)
        dsiglc(iloc) = -dsiglc(iloc)
      enddo

      RETURN
      END

