Download itga1j.eso

Back to the list

   1 : C ITGA1J    SOURCE    CHAT      05/01/13    00:44:30     5004           
   2 : CCC
   3 : C **********************************************************************
   4 : CCC
   5 :       subroutine Integra1J2 (xtri,x,ndimx,ndimv,lam,ddefpl,ndims,
   6 :      .                       tolrel,nitmax,nescri,ues,kerre,iiter)
   7 :       IMPLICIT INTEGER(I-N)
   8 :       IMPLICIT REAL*8 (A-H,O-Z)
   9 :       integer ndims,nitmax,nescri,ndimx,ues
  10 :       real*8  xtri(*),x(*),ddefpl(ndims),lam,tolrel
  11 :       integer i,j,iiter,kerre,ndimv
  12 :       real*8  dl,lres,siginv(3),auxr1,vtLUiw
  13 :       real*8  xres(7),dx(7),Amat(49),Gmat(49),vecn(7),vecm(7)
  14 :       kerre=0
  15 :         do i=1,7
  16 :          xres(i)=0.D0
  17 :          dx(i)=0.D0
  18 :          vecn(i)=0.D0
  19 :          vecm(i)=0.D0
  20 :         enddo
  21 :         do i=1,49
  22 :          amat(i)=0.D0
  23 :          gmat(i)=0.D0
  24 :         enddo
  25 :       iiter=-1
  25 :       call MatGenHookinv(Gmat,ndimx,ndims)
  26 :         dl=1.D0
  27 : 10    continue
  28 :       iiter=iiter+1
  28 :       call yielddJ2(x,ndims,x(ndimx),ndimv,lres)
  28 :       call vflsigJ2(x,ndims,x(ndimx),ndimv,vecm)
  28 :       call vflvarJ2(x,ndims,x(ndimx),ndimv,vecm(ndimx))
  29 :       do i=1,ndimx
  30 :          xres(i)=lam*vecm(i)
  31 :          do j=1,ndimx
  32 :             xres(i)=xres(i)+Gmat((i-1)*ndimx+j)*(x(j)-xtri(j))
  33 :          enddo
  34 :       enddo
  35 :       auxmax1=abs(dx(1))
  36 :       auxmax2=abs(x(1))
  37 :       do i=2,ndimx
  38 :        if (abs(dx(i)).gt.auxmax1) auxmax1=abs(dx(i))
  39 :        if (abs(x(i)).gt.auxmax2) auxmax2=abs(x(i))
  40 :       enddo
  41 :       auxr1=max(auxmax1,abs(dl))/max(auxmax2,1.D0)
  42 :       if (nescri.eq.1) then
  43 :          write(ues,'(I3,X,8(1pE8.2,1x))')
  44 :      .        iiter,(abs(xres(i)),i=1,ndimx),abs(lres),auxr1    
  45 :       endif
  46 :       if (auxr1.lt.tolrel) then
  47 : c CONVERGIDO
  48 :          do i=1,ndims
  49 :             ddefpl(i)=0.D0
  50 :             do j=1,ndims
  51 :                ddefpl(i)=ddefpl(i)+Gmat((i-1)*ndimx+j)*(xtri(j)-x(j))
  52 :             enddo
  53 :          enddo
  54 :          return
  55 :       endif
  56 : c NO CONVERGIDO
  57 :       if (iiter.eq.nitmax) then
  58 :          kerre=1
  59 :          return
  60 :       endif
  60 :       call vyisigJ2(x,ndims,x(ndimx),ndimv,vecn)
  60 :       call vyivarJ2(x,ndims,x(ndimx),ndimv,vecn(ndimx))
  60 :       call HessFlsigJ2(x,ndims,x(ndimx),ndimv,Amat,ndimx)
  61 :       do i=1,ndimx*ndimx                                                   
  62 :          Amat(i)=Gmat(i)+lam*Amat(i)
  63 :       enddo
  63 :       call DescLU(Amat,ndimx)
  64 :       dl=(lres-vtLUiw(vecn,Amat,xres,ndimx))
  65 :      .         /vtLUiw(vecn,Amat,vecm,ndimx)
  66 :       do i=1,ndimx
  67 :          xres(i)=-xres(i)-dl*vecm(i)
  68 :       enddo
  68 :       call LUiw(Amat,xres,dx,ndimx)
  69 :       lam=lam+dl
  70 :       do i=1,ndimx
  71 :          x(i)=x(i)+dx(i)
  72 :       enddo                              
  73 :       if (x(ndimx).lt.0.D0) x(ndimx)=0.D0
  74 :       go to 10
  75 :       end
  76 :  
  77 :  
  78 :  

© Cast3M 2003 - All rights reserved.
Disclaimer