Download itga21.eso

Back to the list

   1 : C ITGA21    SOURCE    CHAT      05/01/13    00:44:35     5004           
   2 : CCC
   3 : C **********************************************************************
   4 : CCC
   5 :       SUBROUTINE INTEGRA21 (XTRI,X,NDIMX,LAM,DDEFPL,NDIMS,
   6 :      .                    nmodel,tolrel,nitmax,nescri,ues,nnumer,
   7 :      .                    deltax,kerre,iiter)
   8 :       IMPLICIT INTEGER(I-N)
   9 :       
  10 :       integer ndims,nmodel,nitmax,nescri,nnumer,ndimx,ues,kdummy
  11 :       real*8    xtri(ndimx),x(ndimx),ddefpl(ndims),lam,tolrel
  12 :       integer i,j,iiter,kerre,npcon,npcap,kdu,ndimv
  13 :       real*8    dl,lres,siginv(3)
  14 :       real*8    auxr1,vtLUiw,auxmax1,auxmax2,deltax
  15 :       real*8    xres(8),dx(8),Amat(64),Gmat(64),vecn(8),vecm(8)
  16 : 
  17 :       kerre=0
  18 :       ndimv=2
  19 :       npcon=ndims+1
  20 :       npcap=ndims+2
  21 :       kdummy=nmodel
  22 :       if (nmodel.eq.22) kdummy=23
  23 :       do i=1,8
  24 :           xres(i)=0.D0
  25 :           dx(i)=0.D0
  26 :           vecn(i)=0.D0
  27 :           vecm(i)=0.D0
  28 :         enddo
  29 :       do i=1,64
  30 :           Amat(i)=0.D0
  31 :           Gmat(i)=0.D0
  32 :         enddo
  33 :       dl=1.D0
  34 :       iiter=-1
  34 :       call MatGenHookinv(Gmat,ndimx,ndims)
  35 : 10    continue
  36 :       iiter=iiter+1
  37 :       kdu=0
  37 :       call yielddMAC(x,ndims,x(npcon),ndimv,lres,kdummy)
  37 :       call VecFlMAC(x,ndimx,vecm,nmodel)
  38 :       do i=1,ndimx
  39 :          xres(i)=lam*vecm(i)
  40 :          do j=1,ndimx
  41 :             xres(i)=xres(i)+Gmat((i-1)*ndimx+j)*(x(j)-xtri(j))
  42 :          enddo
  43 :       enddo
  44 :       auxmax1=dabs(dx(1))
  45 :       do i=2,ndims+1
  46 :          if (dabs(dx(i)).gt.auxmax1) auxmax1=dabs(dx(i))
  47 :       enddo
  48 :       auxmax2=dabs(x(1))
  49 :       do i=2,ndimx
  50 :          if (dabs(x(i)).gt.auxmax2) auxmax2=dabs(x(i))
  51 :       enddo
  52 :         auxr1=max(auxmax1,dabs(dl))/max(auxmax2,dabs(lam))
  53 :       if (iiter.eq.0) auxr1=1.D0
  54 :       if (nescri.eq.1) then
  54 :          call InvariantesPQT(x,ndims,siginv)
  55 :          write(ues,998)iiter,(siginv(i),i=1,3),x(ndimx-1),
  56 :      .                 x(ndimx),auxr1
  57 : 998      format(I3,'Sig ',3(E10.4,1x),'V ',E10.4,1x,E10.4,' L ',E10.4)
  58 :       endif
  59 :       if ((auxr1.lt.tolrel).or.
  60 :      .   ((iiter.eq.nitmax).and.(auxr1.lt.sqrt(tolrel)))) then
  61 : c CONVERGIDO
  62 :          do i=1,ndims
  63 :             ddefpl(i)=0.D0
  64 :             do j=1,ndims
  65 :                ddefpl(i)=ddefpl(i)+Gmat((i-1)*ndimx+j)*(xtri(j)-x(j))
  66 :             enddo
  67 :          enddo
  68 :          return
  69 :       endif
  70 : c NO CONVERGIDO
  71 :       if (iiter.eq.nitmax) then
  72 :          kerre=1
  73 :          return
  74 :       endif
  74 :       call VecYiMAC(x,ndimx,vecn,nmodel)
  74 :       call HessMAC(x,ndimx,Amat,ndimx,nnumer,deltax,nmodel)
  75 :       do i=1,ndimx*ndimx                                                   
  76 :          Amat(i)=Gmat(i)+lam*Amat(i)
  77 :       enddo
  77 :       call DescLU(Amat,ndimx)
  78 :       dl=(lres-vtLUiw(vecn,Amat,xres,ndimx))
  79 :      .         /vtLUiw(vecn,Amat,vecm,ndimx)
  80 :       do i=1,ndimx
  81 :          xres(i)=-xres(i)-dl*vecm(i)
  82 :       enddo
  82 :       call LUiw(Amat,xres,dx,ndimx)
  83 :       lam=lam+dl
  84 :       do i=1,ndimx
  85 :          x(i)=x(i)+dx(i)
  86 :       enddo                              
  87 :       if (x(npcon).lt.0.D0) x(npcon)=0.D0
  88 :       if (x(npcap).lt.0.D0) x(npcap)=0.D0
  89 :       go to 10
  90 :       end
  91 :  
  92 :  
  93 :  

© Cast3M 2003 - All rights reserved.
Disclaimer