Télécharger varipo.eso

Retour à la liste

Numérotation des lignes :

varipo
  1. C VARIPO SOURCE CB215821 20/11/25 13:42:07 10792
  2.  
  3. SUBROUTINE VARIPO(IPOI1,IPOI2,MOT2,IPOI3)
  4.  
  5. C-----------------------------------------------------------------------
  6. C CHPOINT VARIABLE
  7. C-----------------------------------------------------------------------
  8. C ENTREES:
  9. C IPOI1=POINTEUR SUR UN CHPOINT
  10. C IPOI2=POINTEUR SUR UN EVOLUTIO
  11. C MOT2 =NOM DE COMPOSANTE A DONNER AU RESULTAT
  12. C SORTIE:
  13. C IPOI3=POINTEUR SUR LE CHPOINT RESULTAT
  14. C-----------------------------------------------------------------------
  15. IMPLICIT INTEGER(I-N)
  16. IMPLICIT REAL*8(A-H,O-Z)
  17.  
  18.  
  19. -INC PPARAM
  20. -INC CCOPTIO
  21.  
  22. -INC SMCOORD
  23. -INC SMCHPOI
  24. -INC SMEVOLL
  25. -INC SMLREEL
  26. -INC SMELEME
  27.  
  28. CHARACTER*(*) MOT2
  29. CHARACTER*(LOCOMP) MOTREF,MOTABS,MOTORD
  30.  
  31. SEGMENT mwrk
  32. INTEGER ipoi(NBPTS)
  33. REAL*8 xpoi(NBPTS)
  34. ENDSEGMENT
  35.  
  36. IPOI3 = 0
  37. C
  38. C ON RECUPERE L'OBJET EVOLUTION
  39. C
  40. MEVOLL = IPOI2
  41. SEGACT,MEVOLL
  42. KEVOLL = mevoll.IEVOLL(1)
  43. SEGDES,MEVOLL
  44. SEGACT,KEVOLL
  45. IF (kevoll.TYPX .NE. 'LISTREEL' .OR.
  46. & kevoll.TYPY .NE. 'LISTREEL') THEN
  47. SEGDES,KEVOLL
  48. MOTERR(1:8) = 'LISTREEL'
  49. CALL ERREUR(37)
  50. RETURN
  51. ENDIF
  52. MLREE1 = kevoll.IPROGX
  53. MLREE2 = kevoll.IPROGY
  54. MOTABS = kevoll.NOMEVX
  55. IF (MOT2.NE.' ') THEN
  56. MOTORD = MOT2
  57. ELSE
  58. MOTORD = kevoll.NOMEVY(1:4)
  59. ENDIF
  60. SEGDES,KEVOLL
  61. * Petites verifications sur le contenu de l'evolution
  62. SEGACT,MLREE1,MLREE2
  63. NBPOIX = MLREE1.PROG(/1)
  64. NBPOIY = MLREE2.PROG(/1)
  65. IF (NBPOIX.NE.NBPOIY) THEN
  66. CALL ERREUR(577)
  67. GOTO 999
  68. ENDIF
  69. JORDO = 0
  70. CALL VARIFV(MLREE1.PROG,NBPOIX, JORDO)
  71. IF (JORDO.EQ.0) THEN
  72. CALL ERREUR(872)
  73. GOTO 999
  74. ENDIF
  75. C
  76. C ON RECUPERE LE CHPOINT
  77. C
  78. MCHPO1 = IPOI1
  79. SEGACT,MCHPO1
  80. C
  81. C Quelques verifications sur le CHPOINT d'entree
  82. NSOUP1 = MCHPO1.IPCHP(/1)
  83. C CHPOINT "VIDE" -> ERREUR
  84. IF (NSOUP1.LE.0) THEN
  85. MOTERR(1:8) = 'CHPOINT '
  86. INTERR(1) = IPOI1
  87. CALL ERREUR(356)
  88. GOTO 998
  89. ENDIF
  90. C On active le CHPOINT d'entree (son entete) :
  91. C On regarde si on a une seule composante pour tout le champ.
  92. IBVAL = 0
  93. DO 10 IA = 1, NSOUP1
  94. MSOUP1 = MCHPO1.IPCHP(IA)
  95. SEGACT,MSOUP1
  96. NC1 = MSOUP1.NOCOMP(/2)
  97. IF (NC1.EQ.1) THEN
  98. IBVAL = IBVAL + 1
  99. IF (IBVAL.EQ.1) MOTREF = MSOUP1.NOCOMP(1)
  100. ENDIF
  101. 10 CONTINUE
  102. C Si le champ a plus d'une composante, on va rechercher celle qui
  103. C correspond a l'abscisse de l'evolution.
  104. IF (IBVAL.NE.NSOUP1) MOTREF = MOTABS
  105. C
  106. C "Petit" segment de travail :
  107. SEGINI,mwrk
  108. C
  109. C BOUCLE SUR LES SOUS-ZONES DU CHPOINT
  110. C
  111. NBPOI3 = 0
  112. C
  113. DO 100 IA = 1, NSOUP1
  114. C
  115. MSOUP1 = MCHPO1.IPCHP(IA)
  116. NC1 = MSOUP1.NOCOMP(/2)
  117. IF (NC1.LE.0) GOTO 100
  118. IBVAL = 0
  119. CALL PLACE(MSOUP1.NOCOMP(1),NC1,IBVAL,MOTREF)
  120. IF (IBVAL.LE.0) GOTO 100
  121.  
  122. MELEME = MSOUP1.IGEOC
  123. MPOVAL = MSOUP1.IPOVAL
  124. SEGACT,MELEME,MPOVAL
  125. NBNN = meleme.NUM(/1)
  126. NBELEM = meleme.NUM(/2)
  127. N = mpoval.VPOCHA(/1)
  128. NC = mpoval.VPOCHA(/2)
  129. C
  130. C Verification sur LES DIMENSIONS DU CHPOINT :
  131. C Ne devrait pas arriver sauf si le chpoint n'est pas bien cree par on
  132. C ne sait quel operateur ou operation ou autre bizarrerie...
  133. IF (N.NE.NBELEM .OR. NBNN.NE.1 .OR. NC1.NE.NC) THEN
  134. SEGDES,MELEME,MPOVAL
  135. MOTERR(1:8) = 'VARIPO'
  136. CALL ERREUR(178)
  137. CALL ERREUR(5)
  138. GOTO 997
  139. ENDIF
  140.  
  141. DO 110 IC = 1, N
  142. XTT1 = mpoval.VPOCHA(IC,IBVAL)
  143. CALL VARIFO(MLREE1.PROG,MLREE2.PROG,NBPOIX,JORDO,XTT1,
  144. & YTT1)
  145. NBPOI3 = NBPOI3 + 1
  146. C* Ici on ne verifie pas que le point n'a pas deja ete rencontre.
  147. mwrk.ipoi(NBPOI3) = meleme.NUM(1,IC)
  148. mwrk.xpoi(NBPOI3) = YTT1
  149. 110 CONTINUE
  150.  
  151. SEGDES,MELEME,MPOVAL
  152.  
  153. 100 CONTINUE
  154. C
  155. C ERREUR SI LA COMPOSANTE RECHERCHEE N'EST PAS DANS MCHPOI
  156. IF (NBPOI3.EQ.0) THEN
  157. MOTERR= MOTABS
  158. CALL ERREUR(181)
  159. GOTO 997
  160. ENDIF
  161. C
  162. C ON REMPLIT LE CHPOINT DE SORTIE
  163. C
  164. NSOUPO = 1
  165. NAT = MCHPO1.JATTRI(/1)
  166. SEGINI,MCHPOI
  167. mchpoi.MTYPOI = 'SCALAIRE'
  168. mchpoi.MOCHDE = 'CHPOINT cree par VARIPO'
  169. DO 200 IA = 1, NAT
  170. mchpoi.JATTRI(IA) = MCHPO1.JATTRI(IA)
  171. 200 CONTINUE
  172. mchpoi.IFOPOI = MCHPO1.IFOPOI
  173. NC = 1
  174. SEGINI,MSOUPO
  175. mchpoi.IPCHP(1) = MSOUPO
  176. msoupo.NOCOMP(1)= MOTORD
  177. NBNN = 1
  178. NBELEM = NBPOI3
  179. NBSOUS = 0
  180. NBREF = 0
  181. SEGINI,MELEME
  182. meleme.ITYPEL = 1
  183. N = NBPOI3
  184. NC = 1
  185. SEGINI,MPOVAL
  186. DO 210 IC = 1, NBPOI3
  187. meleme.NUM(1,IC) = mwrk.ipoi(IC)
  188. mpoval.VPOCHA(IC,1) = mwrk.xpoi(IC)
  189. 210 CONTINUE
  190. CALL CRECH1(meleme,1)
  191. SEGDES,MELEME,MPOVAL
  192. msoupo.IGEOC = MELEME
  193. msoupo.IPOVAL = MPOVAL
  194. SEGDES,MSOUPO,MCHPOI
  195. IPOI3 = MCHPOI
  196. C
  197. C On ferme tous les segments restants (et on detruit les inutiles).
  198. 997 CONTINUE
  199. SEGSUP,mwrk
  200. DO 9970 IA = 1, NSOUP1
  201. MSOUP1 = MCHPO1.IPCHP(IA)
  202. SEGDES,MSOUP1
  203. 9970 CONTINUE
  204. 998 CONTINUE
  205. SEGDES,MCHPO1
  206. 999 CONTINUE
  207. SEGDES,MLREE1,MLREE2
  208.  
  209. RETURN
  210. END
  211.  
  212.  
  213.  
  214.  
  215.  

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