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