Télécharger champo.eso

Retour à la liste

Numérotation des lignes :

champo
  1. C CHAMPO SOURCE OF166741 24/10/03 21:15:05 12022
  2. SUBROUTINE CHAMPO(IPCHAM,IMOY1,IPCHPO,IRET)
  3. C=======================================================================
  4. C
  5. C TRANSFORME UN MCHAML EN CHPOINT
  6. C
  7. C
  8. C ATTENTION LES COMPOSANTES DE IPCHAM NE DOIVENT PAS ETRE ' '
  9. C ( DES MOT BLANCS )
  10. C
  11. C ENTREES
  12. C
  13. C IPCHAM=Pointeur sur un MCHAML
  14. C IMOY =1 si moyenne sur les elements, 0 si somme
  15. C
  16. C SORTIES
  17. C
  18. C IPCHPO=Pointeur sur un CHPOINT
  19. C IRET=1 OU 0 suivant succes ou non
  20. C Message d'erreur imprime si IRET=0
  21. C
  22. C
  23. C=======================================================================
  24. IMPLICIT INTEGER(I-N)
  25. IMPLICIT REAL*8(A-H,O-Z)
  26.  
  27. -INC PPARAM
  28. -INC CCOPTIO
  29.  
  30. -INC SMCHAML
  31. -INC SMCHPOI
  32. -INC SMELEME
  33. -INC SMCOORD
  34. -INC TMTRAV
  35.  
  36. SEGMENT ICPR(nbpts)
  37. SEGMENT MTRA1
  38. CHARACTER*(LOCOMP) ICOMP(0)
  39. ENDSEGMENT
  40. SEGMENT MTRA2
  41. INTEGER MHAR(0)
  42. ENDSEGMENT
  43.  
  44. C Pour de l'optimisation
  45. CHARACTER*(LOCOMP) MO4a,MO4b
  46.  
  47. * write(ioimp,*) 'coucou champo'
  48. * call ecrobj('MCHAML ',IPCHAM)
  49. * call prlist
  50. * CALL ACTOBJ('MCHAML ',IPCHAM,1)
  51.  
  52. IRET=1
  53.  
  54. C POUR LE CHAPEAU DU CHPOINT
  55. C Certaines SUBROUTINES envoie IMOY1 en CONSTANT EXPRESSION donc le modifier ne fait pas bon menage
  56. C Je le recopie IMOY <-- IMOY1
  57. IMOY=IMOY1
  58.  
  59. JFLAG=0
  60. IF (IMOY.GE.10) THEN
  61. JFLAG=1
  62. IMOY=IMOY-10
  63. ENDIF
  64.  
  65. * ACTIVATION DU MCHAML
  66.  
  67. MCHELM=IPCHAM
  68. L1=TITCHE(/1)
  69. N1=INFCHE(/1)
  70. N3=INFCHE(/2)
  71. IF (N3.NE.6) then
  72. write(ioimp,*) 'CHAMPO : INFCHE(/2) != 6'
  73. call erreur(5)
  74. endif
  75. IFACHE=IFOCHE
  76. NSOUS =ICHAML(/1)
  77. C-----------------------------------------------------------------------
  78. C
  79. C BOUCLE SUR LES SOUS REFERENCES DU CHAMELEM
  80. C MISE EN PLACE DES NOMS DE COMPOSANTES DANS ICOMP
  81. C
  82. C-----------------------------------------------------------------------
  83. CALL oooprl(1)
  84. SEGINI MTRA1,MTRA2,ICPR
  85. CALL oooprl(0)
  86. NNNOE=0
  87.  
  88. * BOUCLE SUR LES SOUS ZONES
  89.  
  90. DO 100 ISOUS=1,NSOUS
  91.  
  92. * ACTIVATION DU MELEME
  93.  
  94. IVACHE = INFCHE(ISOUS,3)
  95. MELEME = IMACHE(ISOUS)
  96. MCHAML = ICHAML(ISOUS)
  97. if (mchaml.le.0) goto 100
  98.  
  99. * RECOPIE DES NOMS DE COMPOSANTES
  100.  
  101. DO 110 IB=1,NOMCHE(/2)
  102. MO4a = NOMCHE(IB)
  103. DO 120 IC=1,ICOMP(/2)
  104. MO4b=ICOMP(IC)
  105. IF(MO4a.EQ.MO4b .AND. MHAR(IC).EQ.IVACHE) GOTO 110
  106. 120 CONTINUE
  107. ICOMP(**)=MO4a
  108. MHAR(**) =IVACHE
  109. 110 CONTINUE
  110.  
  111. * RECUPERATION DES NUMEROS DE NOEUDS
  112. DO 111 JOP= 1,NUM(/2)
  113. DO 113 IOP = 1,NUM(/1)
  114. IPT= NUM(IOP,JOP)
  115. IF (ICPR(IPT).EQ.0) THEN
  116. NNNOE=NNNOE+1
  117. ICPR(IPT)=NNNOE
  118. ENDIF
  119. 113 CONTINUE
  120. 111 CONTINUE
  121.  
  122. 100 CONTINUE
  123.  
  124. NNIN=ICOMP(/2)
  125. SEGINI MTRAV
  126. DO 112 IOP=1,NNIN
  127. INCO(IOP)=ICOMP(IOP)
  128. NHAR(IOP)=MHAR(IOP)
  129. 112 CONTINUE
  130.  
  131. C-----------------------------------------------------------------------
  132. C
  133. C BOUCLE SUR LES SOUS REFERENCES DU CHAMP PAR ELEMENT
  134. C
  135. C-----------------------------------------------------------------------
  136. DO 300 ISOUS=1,NSOUS
  137.  
  138. IVACHE=INFCHE(ISOUS,3)
  139. MELEME=IMACHE(ISOUS)
  140. MCHAML=ICHAML(ISOUS)
  141. if (mchaml.le.0) goto 300
  142. NCP=NOMCHE(/2)
  143.  
  144. NBNN =NUM(/1)
  145. NBELEM=NUM(/2)
  146. C
  147. C BOUCLE SUR LES COMPOSANTES LES ELEMENTS ET LES NOEUDS
  148. C
  149. DO 320 IB=1,NBELEM
  150. DO 3201 IC=1,NBNN
  151. C
  152. C REPERAGE D UN POINT
  153. IPT=ICPR(NUM(IC,IB))
  154. DO 330 ID=1,NCP
  155. MELVAL=IELVAL(ID)
  156. NBPTEL=VELCHE(/1)
  157. NEL =VELCHE(/2)
  158. IBMN=MIN(IB,NEL)
  159. IGMN=MIN(IC,NBPTEL)
  160. MO4a=NOMCHE(ID)
  161. DO 3301 IE=1,NNIN
  162. MO4b=ICOMP(IE)
  163. IF(MO4a.NE.MO4b .OR. IVACHE.NE.MHAR(IE)) GOTO 3301
  164.  
  165. IF (JFLAG.EQ.1) THEN
  166. C
  167. C ADDITION DANS BB POUR LES MCHAML AUX NOEUDS
  168. C
  169. BVALT=0.D0
  170. DO 331 ICEL=1,NBPTEL
  171. BVALT=BVALT+VELCHE(ICEL,IBMN)
  172. 331 CONTINUE
  173. BVALT=BVALT/NBPTEL
  174. BB(IE,IPT)=BB(IE,IPT)+BVALT
  175. ELSE
  176. BB(IE,IPT)=BB(IE,IPT)+VELCHE(IGMN,IBMN)
  177. ENDIF
  178. IBIN(IE,IPT)=IBIN(IE,IPT)+1
  179. 3301 CONTINUE
  180. 330 CONTINUE
  181. IGEO(IPT)=NUM(IC,IB)
  182. 3201 CONTINUE
  183. 320 CONTINUE
  184. 300 CONTINUE
  185.  
  186. IF (IMOY.EQ.1) THEN
  187. DO 340 IPT=1,NNNOE
  188. DO 3401 IE=1,NNIN
  189. IF (IBIN(IE,IPT).NE.0) THEN
  190. BB(IE,IPT)=BB(IE,IPT)/IBIN(IE,IPT)
  191. ELSE
  192. BB(IE,IPT)=0.D0
  193. ENDIF
  194. 3401 CONTINUE
  195. 340 CONTINUE
  196. ENDIF
  197.  
  198. CALL CRECHP(MTRAV,IPCHPO)
  199. SEGSUP MTRAV,ICPR,MTRA1,MTRA2
  200. MCHPOI=IPCHPO
  201. IFOPOI=IFACHE
  202. MTYPOI=TITCHE
  203. IF ( IMOY .EQ. 0) THEN
  204. * on somme les participations des elements: discret
  205. JATTRI(1) = 2
  206. ELSE
  207. * on prend la moyenne entre les éléments: diffus
  208. JATTRI(1) = 1
  209. ENDIF
  210.  
  211. C RETURN
  212. END
  213.  
  214.  
  215.  

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