Télécharger xty1.eso

Retour à la liste

Numérotation des lignes :

xty1
  1. C XTY1 SOURCE CB215821 20/11/25 13:43:35 10792
  2. subroutine xty1(mchpot,ich2,mlmotx,mlmoty,xret)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. INTEGER NBO
  6.  
  7. -INC PPARAM
  8. -INC CCOPTIO
  9. -INC SMCHPOI
  10. -INC SMLMOTS
  11. -INC SMELEME
  12. -INC SMCOORD
  13. segment itrav
  14. * izon : num de zone dans 2 chp d'un point
  15. * ipos : num de pt dans zone d'un point
  16. *
  17. integer izon(nbpts),ipos(nbpts)
  18. *
  19. * nbop : nb de terme dans produit 1-zonei 2-zonej
  20. *
  21. integer nbop(nbz1,nbz2)
  22. *
  23. * icpos1 icpos2 : num composante zone a traiter
  24. *
  25. integer icpos1(nbopma,nbz1,nbz2),icpos2(nbopma,nbz1,nbz2)
  26. *
  27. endsegment
  28. *
  29. NBO=0
  30. xret=0.d0
  31. *
  32. * creation de itrav
  33. *
  34. mlmot1=mlmotx
  35. segact mlmot1
  36. nbopma=mlmot1.mots(/2)
  37. mlmot2=mlmoty
  38. segact mlmot2
  39. if (nbopma.ne.mlmot2.mots(/2)) call erreur(217)
  40. if (ierr.ne.0) return
  41. mchpo1=mchpot
  42. segact mchpo1
  43. nbz1=mchpo1.ipchp(/1)
  44. mchpo2=ich2
  45. segact mchpo2
  46. nbz2=mchpo2.ipchp(/1)
  47. segini itrav
  48. *
  49. * remplissage de itrav a partir du deuxieme champ
  50. *
  51. do 10 isoupo=1,nbz2
  52. msoup2=mchpo2.ipchp(isoupo)
  53. segact msoup2
  54. mpova2=msoup2.ipoval
  55. segact mpova2
  56. ipt2=msoup2.igeoc
  57. segact ipt2
  58. do 15 iel=1,ipt2.num(/2)
  59. ip=ipt2.num(1,iel)
  60. izon(ip)=isoupo
  61. ipos(ip)=iel
  62. 15 continue
  63. 10 continue
  64. *
  65. * travail effectif : boucle su r le premier chpoint
  66. * on fabriquera au vol les nbop icpos1 et icpos2 si necessaire
  67. *
  68. do 20 isoupo=1,nbz1
  69. msoup1=mchpo1.ipchp(isoupo)
  70. segact msoup1
  71. mpova1=msoup1.ipoval
  72. segact mpova1
  73. ipt1=msoup1.igeoc
  74. segact ipt1
  75. ieldin=1
  76. 100 continue
  77. do 110 ieldeb=ieldin,ipt1.num(/2)
  78. izocou=izon(ipt1.num(1,ieldeb))
  79. if(izocou.ne.0) goto 115
  80. 110 continue
  81. goto 20
  82. 115 continue
  83. msoup2=mchpo2.ipchp(izocou)
  84. if (nbop(isoupo,izocou).eq.0) then
  85. do 30 im=1,nbopma
  86. do 35 ic1=1,msoup1.nocomp(/2)
  87. if (mlmot1.mots(im).eq.msoup1.nocomp(ic1)) goto 40
  88. 35 continue
  89. goto 30
  90. 40 continue
  91. do 45 ic2=1,msoup2.nocomp(/2)
  92. if (msoup1.noharm(ic1).ne.msoup2.noharm(ic2)) goto 45
  93. if (mlmot2.mots(im).eq.msoup2.nocomp(ic2)) goto 50
  94. 45 continue
  95. goto 30
  96. 50 continue
  97. nbo=nbop(isoupo,izocou)+1
  98. nbop(isoupo,izocou)=nbo
  99. icpos1(nbo,isoupo,izocou)=ic1
  100. icpos2(nbo,isoupo,izocou)=ic2
  101. 30 continue
  102. if (nbo.eq.0) nbop(isoupo,izocou)=-1
  103. endif
  104. do 60 ielcou=ieldeb+1,ipt1.num(/2)
  105. ipt=ipt1.num(1,ielcou)
  106. izon2=izon(ipt)
  107. if (izon2.ne.izocou) goto 70
  108. 60 continue
  109. ielcou=ipt1.num(/2)+1
  110. 70 continue
  111. mpova2=msoup2.ipoval
  112. do 80 ic=1,nbop(isoupo,izocou)
  113. ic1=icpos1(ic,isoupo,izocou)
  114. ic2=icpos2(ic,isoupo,izocou)
  115. do 90 iel=ieldeb,ielcou-1
  116. xret=xret+mpova1.vpocha(iel,ic1)*
  117. > mpova2.vpocha(ipos(ipt1.num(1,iel)),ic2)
  118. 90 continue
  119. 80 continue
  120. ieldin=ielcou
  121. if (ieldin.le.ipt1.num(/2)) goto 100
  122. 20 continue
  123. * c'est fini on nettoie
  124. segsup itrav
  125. if (mchpo1.ne.mchpo2) then
  126. do 150 isoupo=1,nbz2
  127. msoup2=mchpo2.ipchp(isoupo)
  128. mpova2=msoup2.ipoval
  129. ipt2=msoup2.igeoc
  130. 150 continue
  131. endif
  132. end
  133.  
  134.  
  135.  
  136.  
  137.  

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