C D2ENDP    SOURCE    CB215821  16/04/21    21:16:13     8920

      SUBROUTINE DER2_ENERELAS_DPRAL(X,E,NDIMX,NMODEL)
      IMPLICIT INTEGER(I-N)
      integer nmodel,i,ndimx,j
      real*8 x(3),e(ndimx,ndimx),aux0,aux1,aux2,aux3,aux(3,3)
      real*8                  you,xnu
      common /elasdata/       you,xnu
      real*8                  kap,xmu,xmu1,alp1,xmu2,alp2,xmu3,alp3
      logical                 ogden
      common /elasdata_ogden/ kap,xmu,xmu1,alp1,xmu2,alp2,xmu3,alp3,
     .                        ogden

      call zzero(e,ndimx*ndimx)
      if (ogden) goto 10
c Modelo cuadratico
      aux0=you/((1.D0+xnu)*(1.D0-2.D0*xnu))
      aux1=(1.D0-xnu)*aux0
      aux2=xnu*aux0
      aux3=you/(2.D0*(1.D0+xnu))
      do i=1,3
        E(i,i)=aux1
      enddo
      E(1,2)=aux2
      E(1,3)=aux2
      E(2,1)=aux2
      E(2,3)=aux2
      E(3,1)=aux2
      E(3,2)=aux2
      if (ndimx.eq.4) E(4,4)=1.D0
c hacer desviador para VMT
      if (nmodel.eq.8) goto 20
      return
c Modelo ogden
10    continue
      do i=1,3
       aux(i,1)=EXP(x(i))
      enddo
      e(1,1)=xmu*(xmu1*alp1*aux(1,1)**alp1+
     .            xmu2*alp2*aux(1,1)**alp2+
     .            xmu3*alp3*aux(1,1)**alp3)
      e(2,2)=xmu*(xmu1*alp1*aux(2,1)**alp1+
     .            xmu2*alp2*aux(2,1)**alp2+
     .            xmu3*alp3*aux(2,1)**alp3)
      e(3,3)=xmu*(xmu1*alp1*aux(3,1)**alp1+
     .            xmu2*alp2*aux(3,1)**alp2+
     .            xmu3*alp3*aux(3,1)**alp3)
c     desviador de columnas
20    continue
      do i=1,3
       call Desviador(e(1,i),aux(1,i),3)
      enddo
c     trasponer amat
      aux1    =aux(1,2)
      aux(1,2)=aux(2,1)
      aux(2,1)=aux1
      aux1    =aux(1,3)
      aux(1,3)=aux(3,1)
      aux(3,1)=aux1
      aux1    =aux(2,3)
      aux(2,3)=aux(3,2)
      aux(3,2)=aux1
c     desviador de columnas
      do i=1,3
       call Desviador(aux(1,i),e(1,i),3)
      enddo
      goto 100
c Calculadas con derivacion, dan igual!
      call zzero(e,ndimx*ndimx)
      call der_enerelas_dpral(x,aux(1,1),nmodel)
      do j=1,3
        do i=1,3
          aux(i,2)=x(i)
        enddo
        aux(j,3)=max(x(j)*1.D-6,1.D-8)
        aux(j,2)=x(j)+aux(j,3)
        call der_enerelas_dpral(aux(1,2),e(1,j),nmodel)
        do i=1,3
         e(i,j)=(e(i,j)-aux(i,1))/aux(j,3)
        enddo
      enddo
c
100   continue
      if (ndimx.eq.4) E(4,4)=1.D0
      return
      end





