mtclsd
C MTCLSD SOURCE PV 22/04/19 16:18:08 11344 CCC C ********************************************************************** CCC SUBROUTINE MTC_LS_DPRAL(EKMAT,NDIMK,X,NDIMX,LAM, . nmodel,nescri,ues,nnumer,deltax) IMPLICIT INTEGER(I-N) integer ndimk,ndimx,nmodel,nescri,ues,nnumer integer i,j,k,ndims,ndimv real*8 EKmat(ndimk,ndimk),x(ndimx),lam,deltax real*8 amat(16),aamat(16),eemat(16),vecm(4),vecnaux(4),vecn(4), . gmat(16),Avecm(4),vecntA(4),kmat(4,4),g,void(1),sig(3) void(1)=0.D0 ndimv=1 ndims=3 call der_enerelas_dpral(x,sig,nmodel) c m,n,A if (ndimx.eq.3) then call HessFlsig(sig,ndims,void,ndimv,amat,ndimx,nmodel) else if (ndimx.eq.4) then call HessFlsig(sig,ndims,x(ndimx),ndimv,amat,ndimx,nmodel) endif c E=d2_ener (ampliada de 3 a ndimx con 1 en la diagonal) call der2_enerelas_dpral(x,eemat,ndimx,nmodel) c n^T=n^T*E c AA=A*E do i=1,ndimx vecn(i)=0.D0 do j=1,ndimx vecn(i)=vecn(i)+vecnaux(j)*eemat(j+(i-1)*ndimx) aamat(i+(j-1)*ndimx)=0.D0 do k=1,ndimx aamat(i+(j-1)*ndimx)=aamat(i+(j-1)*ndimx)+ . amat(i+(k-1)*ndimx)*eemat(k+(j-1)*ndimx) enddo enddo enddo c A=I+l*AA do i=1,ndimx amat(i+(i-1)*ndimx)=1.D0 do j=1,ndimx amat(i+(j-1)*ndimx)=amat(i+(j-1)*ndimx)+ . lam*aamat(i+(j-1)*ndimx) enddo enddo c G = A-1 c g = nt*A-1*m g=0.D0 do i=1,ndimx do j=1,ndimx g=g+vecn(i)*Gmat(i+ndimx*(j-1))*vecm(j) enddo enddo c G*m; nt*G do i=1,ndimx do j=1,ndimx Avecm(i)=Avecm(i)+Gmat(i+ndimx*(j-1))*vecm(j) vecntA(i)=vecntA(i)+vecn(j)*Gmat(j+ndimx*(i-1)) enddo enddo c K = G-(G*m * nt*G)/g do i=1,ndimx do j=1,ndimx Kmat(i,j)=Gmat((j-1)*ndimx+i)-Avecm(i)*vecntA(j)/g enddo enddo c EK= E*K do i=1,3 do j=1,3 ekmat(i,j)=0.D0 do k=1,ndimx ekmat(i,j)=ekmat(i,j)+ . eemat(i+(k-1)*ndimx)*kmat(k,j) enddo enddo enddo if (nescri.eq.1) . write(ues,999)' EKmat_dp ',((ekmat(i,j),j=1,3),i=1,3) 999 format(2x,A12,/,3(3(1x,E12.6),/)) return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales