Télécharger xtx4.eso

Retour à la liste

Numérotation des lignes :

xtx4
  1. C XTX4 SOURCE OF166741 24/10/03 21:15:46 12022
  2.  
  3. *_______________________________________________________________________
  4. *
  5. * OPERATEUR XTX
  6. *
  7. * ENTREES :
  8. * ---------
  9. * IPCHE1 POINTEUR SUR UN CHAMELEM
  10. * IPCHE2 POINTEUR SUR UN CHAMELEM
  11. * FLO1 FLOTTANT
  12. * FLO2 FLOTTANT
  13. *
  14. * SORTIES :
  15. * ---------
  16. * XDRET XTX = FLO1 * ICH1 + FLO2 * FLO2
  17. * IRET 1 SI SUCCES 0 SINON
  18. *_______________________________________________________________________
  19.  
  20. SUBROUTINE XTX4(IPCHE1,IPCHE2,FLO1,FLO2,XDRET,IRET)
  21.  
  22. IMPLICIT INTEGER(I-N)
  23. IMPLICIT REAL*8(A-H,O-Z)
  24.  
  25. -INC PPARAM
  26. -INC CCOPTIO
  27.  
  28. -INC SMELEME
  29. -INC SMCHAML
  30. -INC SMINTE
  31. -INC SMLREEL
  32.  
  33. CHARACTER*16 CONCH1,CONCH2
  34. PARAMETER(XZER=0.D0)
  35. DIMENSION ITR(40)
  36. PARAMETER(NINF=3)
  37. DIMENSION INFOS(NINF)
  38.  
  39. IRET = 0
  40. XDRET = XZER
  41.  
  42. CALL ACTOBJ('MCHAML ',IPCHE1,1)
  43. IF (IERR.NE.0) RETURN
  44. CALL ACTOBJ('MCHAML ',IPCHE2,1)
  45. IF (IERR.NE.0) RETURN
  46.  
  47. MCHEL1 = IPCHE1
  48. MCHEL2 = IPCHE2
  49. *
  50. * LES CHAMELEMS SONT ILS COMPATIBLES ??
  51. *
  52. NSOUS1=MCHEL1.ICHAML(/1)
  53. NSOUS2=MCHEL2.ICHAML(/1)
  54. IF (NSOUS1.NE.NSOUS2) GOTO 166
  55.  
  56. IFO1=MCHEL1.IFOCHE
  57. IFO2=MCHEL2.IFOCHE
  58. IF (IFO1.NE.IFO2) GOTO 166
  59.  
  60. N31=MCHEL1.INFCHE(/2)
  61. N32=MCHEL2.INFCHE(/2)
  62. N33=MAX(N31,N32)
  63. c* On doit avoir N31 = N32 = N33 = 6 !
  64.  
  65. DO 100 ISOUS=1,NSOUS1
  66. IPMAI1=MCHEL1.IMACHE(ISOUS)
  67. CONCH1=MCHEL1.CONCHE(ISOUS)
  68. DO 110 ISOUS2=1,NSOUS2
  69. IBB=ISOUS2
  70. IPMAI2=MCHEL2.IMACHE(ISOUS2)
  71. CONCH2=MCHEL2.CONCHE(ISOUS2)
  72. IF(IPMAI1.EQ.IPMAI2.AND.CONCH1.EQ.CONCH2) THEN
  73. *
  74. * Verification pour les INFCHEs
  75. *
  76. CALL IDENT(IPMAI1,CONCH1,IPCHE1,IPCHE2,INFOS,IRTD)
  77. IF (IRTD.EQ.0) GOTO 166
  78. DO 21 IN3=1, N33
  79. INF1=MCHEL1.INFCHE(ISOUS,IN3)
  80. INF2=MCHEL2.INFCHE(IBB ,IN3)
  81. IF (IN3.EQ.4) THEN
  82. IF (INF1.EQ.INF2) GOTO 21
  83. INF1 = MCHEL1.INFCHE(ISOUS,6)
  84. INF2 = MCHEL2.INFCHE(IBB ,6)
  85. ELSE IF (IN3.EQ.6) THEN
  86. IF (INF1.EQ.0) INF1=1
  87. IF (INF2.EQ.0) INF2=1
  88. ELSE
  89. ENDIF
  90. IF (INF1.NE.INF2) GOTO 166
  91. 21 CONTINUE
  92. GOTO 120
  93. ENDIF
  94. 110 CONTINUE
  95. GOTO 166
  96. *
  97. 120 CONTINUE
  98. *
  99. * ACTIVATION DU MELEME
  100. *
  101. MELEME=IPMAI1
  102. NBELEM=NUM(/2)
  103. *
  104. MINTE=MCHEL1.INFCHE(ISOUS,4)
  105. IF (MINTE.EQ.0) MINTE=MCHEL2.INFCHE(ISOUS2,4)
  106. IF (MINTE.EQ.0) THEN
  107. NBPGAU=NUM(/1)
  108. ELSE
  109. NBPGAU=POIGAU(/1)
  110. ENDIF
  111. *
  112. MCHAM1=MCHEL1.ICHAML(ISOUS )
  113. MCHAM2=MCHEL2.ICHAML(IBB )
  114. *
  115. NCOMP1=MCHAM1.IELVAL(/1)
  116. NCOMP2=MCHAM2.IELVAL(/1)
  117. IF (NCOMP1.NE.NCOMP2) THEN
  118. CALL ERREUR (103)
  119. GOTO 666
  120. ENDIF
  121. *
  122. DO 150 ICOMP=1,NCOMP1
  123. CALL PLACE(MCHAM2.NOMCHE,NCOMP2,IPLAC,MCHAM1.NOMCHE(ICOMP))
  124. IF (IPLAC.EQ.0) THEN
  125. MOTERR(1:4)=MCHAM1.NOMCHE(ICOMP)
  126. MOTERR(5:8)=MCHEL1.TITCHE
  127. CALL ERREUR (77)
  128. GOTO 666
  129. ENDIF
  130. *
  131. MELVA1=MCHAM1.IELVAL(ICOMP)
  132. MELVA2=MCHAM2.IELVAL(IPLAC)
  133. IF ( MCHAM1.TYPCHE(ICOMP).EQ.'REAL*8'.AND.
  134. & MCHAM2.TYPCHE(IPLAC).EQ.'REAL*8' ) THEN
  135. DO 300 IB=1,NBELEM
  136. IBMN1=MIN(IB,MELVA1.VELCHE(/2))
  137. IBMN2=MIN(IB,MELVA2.VELCHE(/2))
  138. DO 400 IGAU=1,NBPGAU
  139. IGMN1=MIN(IGAU,MELVA1.VELCHE(/1))
  140. IGMN2=MIN(IGAU,MELVA2.VELCHE(/1))
  141. XXT1=MELVA1.VELCHE(IGMN1,IBMN1)
  142. XXT2=MELVA2.VELCHE(IGMN2,IBMN2)
  143. XX = FLO1*XXT1 + FLO2*XXT2
  144. XDRET = XDRET + XX*XX
  145. 400 CONTINUE
  146. 300 CONTINUE
  147. ELSE IF (MCHAM1.TYPCHE(ICOMP).EQ.'POINTEURLISTREEL'.AND.
  148. & MCHAM2.TYPCHE(IPLAC).EQ.'POINTEURLISTREEL' ) THEN
  149. DO 301 IB=1,NBELEM
  150. IBMN1=MIN(IB,MELVA1.IELCHE(/2))
  151. IBMN2=MIN(IB,MELVA2.IELCHE(/2))
  152. DO 401 IGAU=1,NBPGAU
  153. IGMN1=MIN(IGAU,MELVA1.IELCHE(/1))
  154. IGMN2=MIN(IGAU,MELVA2.IELCHE(/1))
  155. MLREE1=MELVA1.IELCHE(IGMN1,IBMN1)
  156. MLREE2=MELVA2.IELCHE(IGMN2,IBMN2)
  157. c* SEGACT MLREE1,MLREE2
  158. JG1=MLREE1.PROG(/1)
  159. JG2=MLREE2.PROG(/1)
  160. IF (JG1.NE.JG2) THEN
  161. MOTERR(1:4)='XTX '
  162. MOTERR(5:12)='MLREEL'
  163. CALL ERREUR (125)
  164. GOTO 666
  165. ENDIF
  166. DO 200 IPROG=1,JG1
  167. XXT1=MLREE1.PROG(IPROG)
  168. XXT2=MLREE2.PROG(IPROG)
  169. XX = FLO1*XXT1 + FLO2*FLO2
  170. XDRET = XDRET + XX*XX
  171. 200 CONTINUE
  172. 401 CONTINUE
  173. 301 CONTINUE
  174. ELSE
  175. MOTERR(1:4)=MCHAM1.NOMCHE(ICOMP)
  176. CALL ERREUR (197)
  177. GOTO 666
  178. ENDIF
  179. 150 CONTINUE
  180. 100 CONTINUE
  181.  
  182. IRET=1
  183.  
  184. RETURN
  185. *
  186. *
  187. 166 CONTINUE
  188. C MOTERR(1:16)=MOT1//MOT3
  189. CALL ERREUR(329)
  190. 666 CONTINUE
  191.  
  192. RETURN
  193. END
  194.  
  195.  
  196.  

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