Télécharger noepr2e.eso

Retour à la liste

Numérotation des lignes :

noepr2e
  1. C NOEPR2E SOURCE PV090527 25/09/17 21:15:01 12360
  2. subroutine noepr2e(iadj,jadjc,pivot,nrelong,noelon,isens,
  3. > dimlon,nodes,ipos,nbtot,lfront,lfron,londim,fcout2,lpiv,
  4. > ipoint,noel2,bool,fcout,ldim2,ith,nbthr,npoint,npoint2,
  5. > imax,iccon,icouch)
  6. implicit real*8 (a-h,o-z)
  7. integer dimlon,diml2,bool
  8. integer pivot(*),pivots
  9. integer iadj(*),jadjc(*),nrelong(*),noelon(*),noel2(*)
  10. integer ipos(*),londim(*)
  11. -INC PPARAM
  12. -INC CCOPTIO
  13. ifront = londim(2)-londim(1)
  14. if (ifront.le.2) then
  15. elong2 = 1
  16. else
  17. xfront=ifront
  18. profon = dimlon / xfront
  19. elong2 = profon*profon/xfront
  20. ** write (6,*) 'noepr2 dimlon londim elong',dimlon,
  21. ** > londim(2)-londim(1),elong2
  22. endif
  23. diml2=dimlon
  24. nbz= (diml2+1)/2
  25. nbess= nbz**0.42 +8
  26. nbess=min(nbess,int(icouch**(1.33333333333333333333)))
  27. nbess = ((nbess-1)/nbthr+1)*nbthr
  28. if (elong2.gt.9) then
  29. ** si le domaine est elance, on reduit le nombre d'essais
  30. ** write(6,*) 'dimlon xfront elong2 ',dimlon,xfront,elong2
  31. nbess = nbz**0.35 +8
  32. endif
  33. nbess=max(nbess,1)
  34. do i=1,dimlon
  35. noelon(i)=0
  36. enddo
  37. isig=2*mod(ipoint,2)-1
  38. idec=((ipoint-1)*nbz)/npoint
  39. ** write(6,*) 'npoint ipoint ith idec',npoint,ipoint,ith,idec,nbz
  40. do 520 ii=ith,nbess,nbthr
  41. fcout2=1d50
  42. i= (ii*nbz+idec)/nbess+1
  43. i= mod(i,diml2+1)
  44. if (isig.eq.1.and.i.le.nbz) i=diml2+1-i
  45. if (isig.eq.-1.and.i.ge.nbz) i=diml2+1-i
  46. pivots=pivot(ipoint)
  47. ** la situation arrive vraiment!
  48. if (pivots.eq.noel2(i)) then
  49. ** write(6,*) 'pivot invariant ii dimlon ipoint ',ii,dimlon,ipoint
  50. goto 520
  51. endif
  52. pivot(ipoint)=noel2(i)
  53. dimlon=diml2
  54. call noepr2(iadj(1),jadjc(1),pivot,nrelong(1),noelon(1),
  55. > isens,dimlon,nodes,ipos(1+nodes),nbtot,lfront,lfron,
  56. > londim(1),fcout2,lpiv,iccon,icouch)
  57. ** write (6,*) ' noepr2 ipoint ii i fcout fcout2 ',
  58. ** > ipoint,fcout,fcout2,londim(1),londim(2),londim(3)
  59. if (fcout2.lt.fcout.or.(fcout2.le.fcout.and.
  60. > pivots*isig.lt.pivot(ipoint)*isig)) then
  61. ** write (6,*) 'amelioration dimlon iii i nbz ith ',
  62. ** > dimlon,iii,i,nbz,ith
  63. if (ierr.ne.0) return
  64. if (fcout2.ne.fcout) bool=2
  65. fcout=fcout2
  66. ldim2=londim(2)
  67. if (npoint.lt.50.and.imax.eq.0) then
  68. npoint2=npoint+1
  69. pivot(npoint2)=0
  70. endif
  71. if (fcout.lt.5 ) return
  72. else
  73. pivot(ipoint)=pivots
  74. endif
  75. 520 continue
  76. * write (6,*) ' noepr2 dimlon londim ',dimlon,londim(2)-londim(1)
  77. end
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales