Download act_la.eso

Back to the list

   1 : C ACT_LA    SOURCE    CHAT      05/01/12    21:16:48     5004           
   2 : 
   3 :       SUBROUTINE ACTUALIZA_LAMBDA(X,NDIMX,NMODEL,LAM,DLA,DLB)
   4 :       IMPLICIT INTEGER(I-N)
   5 :       integer n,i,j,k,ndims,ndimv,nmodel,nnumer,ndimx
   6 :       real*8  x(ndimx),deltax,sig(3),vecm(4)
   7 :       real*8  vecnaux(4),vecn(4),amat(16),vtLUiw,void
   8 :       real*8  aamat(16),eemat(16),dla,dlb,lam
   9 :       integer             augla
  10 :       real*8                    c
  11 :       common /auglagrang1/ augla
  12 :       common /auglagrang2/ c
  13 :       real*8  bbmat(16),res
  13 :       call zzero(amat ,16)
  13 :       call zzero(aamat,16)
  13 :       call zzero(bbmat,16)
  13 :       call zzero(eemat,16)
  14 :       void=0.D0
  15 :       ndimv=1
  16 :       ndims=3
  17 : c conseguir sig
  17 :       call der_enerelas_dpral(x,sig,nmodel)
  18 : c n, m , A
  19 :       if (ndimx.eq.3) then
  19 :        call yieldd(sig,ndims,void,ndimv,dla,nmodel)
  19 :        call vflsig(sig,ndims,void,ndimv,vecm,nmodel)
  19 :        call vyisig(sig,ndims,void,ndimv,vecnaux,nmodel)
  19 :        call HessFlsig(sig,ndims,void,ndimv,amat,ndimx,nmodel)
  20 :       else if (ndimx.eq.4) then 
  20 :        call yieldd(sig,ndims,x(ndimx),ndimv,dla,nmodel)
  20 :        call vflsig(sig,ndims,x(ndimx),ndimv,vecm,nmodel)
  20 :        call vflvar(sig,ndims,x(ndimx),ndimv,vecm(ndimx),nmodel)
  20 :        call vyisig(sig,ndims,x(ndimx),ndimv,vecnaux,nmodel)
  20 :        call vyivar(sig,ndims,x(ndimx),ndimv,vecnaux(ndimx),nmodel)
  20 :        call HessFlsig(sig,ndims,x(ndimx),ndimv,amat,ndimx,nmodel)
  21 :       endif
  22 : c E=d2_ener (ampliada de 3 a ndimx con 1 en la diagonal)
  22 :       call der2_enerelas_dpral(x,eemat,ndimx,nmodel)
  23 : c n^T=n^T*E
  24 : c AA=A*E
  25 :       do i=1,ndimx
  26 :        vecn(i)=0.D0
  27 :        do j=1,ndimx
  28 :          vecn(i)=vecn(i)+vecnaux(j)*eemat(j+(i-1)*ndimx)
  29 :          aamat(i+(j-1)*ndimx)=0.D0
  30 :          do k=1,ndimx
  31 :           aamat(i+(j-1)*ndimx)=aamat(i+(j-1)*ndimx)+
  32 :      .                         amat(i+(k-1)*ndimx)*eemat(k+(j-1)*ndimx)
  33 :          enddo 
  34 :        enddo
  35 :       enddo
  36 : **
  37 :       if ((augla.eq.1)) then 
  38 : c BB=n*n^T*E
  39 :       do i=1,ndimx
  40 :        do j=1,ndimx
  41 :          bbmat(i+(j-1)*ndimx)=0.D0
  42 :          do k=1,ndimx
  43 :           bbmat(i+(j-1)*ndimx)=bbmat(i+(j-1)*ndimx)+
  44 :      .                      vecnaux(i)*vecnaux(k)*eemat(k+(j-1)*ndimx)
  45 :          enddo 
  46 :        enddo
  47 :       enddo
  48 :       endif
  49 : **
  49 :       call zzero(amat,16 )
  50 : c A=I+l*AA
  51 :       do i=1,ndimx
  52 :        amat(i+(i-1)*ndimx)=1.D0
  53 :        do j=1,ndimx
  54 : c         amat(i+(j-1)*ndimx)=amat(i+(j-1)*ndimx)+
  55 : c     .                       lam*aamat(i+(j-1)*ndimx)
  56 : **
  57 :          amat(i+(j-1)*ndimx)=amat(i+(j-1)*ndimx)+
  58 :      .                       dabs(lam+c*dla)*aamat(i+(j-1)*ndimx)+
  59 :      .                       c*bbmat(i+(j-1)*ndimx)
  60 : **
  61 :        enddo
  62 :       enddo
  62 :       call DescLU(Amat,ndimx)
  63 :       dlb=-vtLUiw(vecn,Amat,vecm,ndimx)
  64 :       return
  65 :       end
  66 :  
  67 :  
  68 :  

© Cast3M 2003 - All rights reserved.
Disclaimer