Download di2lev.eso

Back to the list

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

© Cast3M 2003 - All rights reserved.
Disclaimer