Télécharger smchp1.eso

Retour à la liste

Numérotation des lignes :

smchp1
  1. C SMCHP1 SOURCE OF166741 23/03/03 21:15:04 11416
  2.  
  3. C***********************************************************************
  4. C NOM : smchp1.eso
  5. C DESCRIPTION : accretion d'un CHAMP a sortir au format MED
  6. C ENTREES : ITLAC : SEGMENT contenant les MELEMES a sortir
  7. C : IPOIN1 : POINTEUR sur l'objet a explorer (CHPOINT ou MCHAML)
  8. C : CTYP1 : chaine contenant le type de l'objet de pointeur IPOIN1
  9. C : IPOIN2 : POINTEUR sur SEGMENT IFOCHA approprie
  10. C : numdt : numero de pas de temps
  11. C : xtps : Valeur du temps pour ce pas de temps
  12. C***********************************************************************
  13.  
  14. SUBROUTINE SMCHP1 (ITLAC,IPOIN1,CTYP1,IPOIN2,fname,numdt,xtps)
  15.  
  16. IMPLICIT INTEGER(i-n)
  17. IMPLICIT REAL*8(a-h,o-z)
  18.  
  19. -INC PPARAM
  20. -INC CCMED
  21.  
  22. -INC SMELEME
  23. -INC SMCHPOI
  24. -INC SMCHAML
  25. -INC SMLMOTS
  26. -INC SMMED
  27.  
  28. C-----Chaine de Caracteres de longueur MED_NAME_SIZE=64
  29. CHARACTER*(*) fname, CTYP1
  30.  
  31. REAL*8 xtps
  32. CHARACTER*4 cha4F
  33. CHARACTER*8 cha8c
  34.  
  35. EXTERNAL LONG
  36.  
  37. ilon2 = LONG(fname)
  38.  
  39. C *********************************************************************
  40. C * Demande des CHPOINT *
  41. C *********************************************************************
  42. IF (CTYP1(1:8) .EQ. 'CHPOINT ') THEN
  43. MCHPOI = IPOIN1
  44. nbzone = MCHPOI.IPCHP(/1)
  45.  
  46. C Initialisation de LISCHP ou extension de LISCHP
  47. IF (IPOIN2 .EQ. 0) THEN
  48. nbmspo = nbzone
  49. SEGINI,LISCHP
  50. LISCHP.NBENTI = 0
  51. IPOIN2 = LISCHP
  52. ELSE
  53. LISCHP = IPOIN2
  54. nbmspo = LISCHP.NBENTI + nbzone
  55. IF (nbmspo .GT. LISCHP.LICHAP(/1)) THEN
  56. SEGADJ,LISCHP
  57. ENDIF
  58. ENDIF
  59. IF (nbzone.EQ.0) RETURN
  60.  
  61. C Determination du FORMAT automatique
  62. cha4F='(I )'
  63. nbsort = LISCHP.NBENTI + nbzone
  64. IFORMA = INT(LOG10(REAL(nbsort))) + 1
  65. IF (IFORMA.LT.1 .AND. IFORMA.GT.8) THEN
  66. CALL ERREUR(1094)
  67. RETURN
  68. ENDIF
  69. WRITE(cha4F(3:3),'(I1)') IFORMA
  70. IF (ilon2+IFORMA+1.GT.MED_NAME_SIZE) THEN
  71. CALL ERREUR(1111)
  72. RETURN
  73. END IF
  74.  
  75. nbsort = LISCHP.NBENTI
  76.  
  77. nbrzo = 0
  78. DO ii = 1, nbzone
  79. MSOUPO = MCHPOI.IPCHP(ii)
  80. IPT1 = MSOUPO.IGEOC
  81. C On saute les maillages vides
  82. IF (IPT1.NUM(/2).EQ.0) GOTO 201
  83. C On saute les 'LX' et 'FLX'
  84. IF (MSOUPO.NOCOMP(1).EQ.'LX ' .OR.
  85. & MSOUPO.NOCOMP(1).EQ.'FLX ') GOTO 201
  86. nbrzo = nbrzo + 1
  87. 201 CONTINUE
  88. ENDDO
  89.  
  90. numzo = 0
  91. DO ii = 1, nbzone
  92. MSOUPO = MCHPOI.IPCHP(ii)
  93. IPT1 = MSOUPO.IGEOC
  94.  
  95. C On ne traite pas les maillages vides, les 'LX' et 'FLX'
  96. IF (IPT1.NUM(/2).EQ.0) GOTO 20
  97. IF (MSOUPO.NOCOMP(1).EQ.'LX ' .OR.
  98. & MSOUPO.NOCOMP(1).EQ.'FLX ') GOTO 20
  99.  
  100. nbsort = nbsort + 1
  101. CALL AJOU(ITLAC,IPT1)
  102.  
  103. if (nbrzo.EQ.1) then
  104. LISCHP.NOCHAP(nbsort) = fname(1:ilon2)
  105. else
  106. numzo = numzo + 1
  107. WRITE(cha8c,cha4F) numzo
  108. LISCHP.NOCHAP(nbsort) = fname(1:ilon2)//'_'//cha8c
  109. endif
  110.  
  111. LISCHP.PNUMDT(nbsort) = numdt
  112. LISCHP.LICHAP(nbsort) = MSOUPO
  113. LISCHP.LIMAIL(nbsort) = IPT1
  114. LISCHP.ISUPOR(nbsort,1) = 0
  115. LISCHP.ISUPOR(nbsort,2) = 0
  116. LISCHP.XTEMPS(nbsort) = xtps
  117. 20 CONTINUE
  118. ENDDO
  119. LISCHP.NBENTI = nbsort
  120.  
  121. C *********************************************************************
  122. C * Demande des MCHAML *
  123. C *********************************************************************
  124. ELSE IF (CTYP1(1:8) .EQ. 'MCHAML ')THEN
  125. MCHELM = IPOIN1
  126. nbzone = MCHELM.ICHAML(/1)
  127.  
  128. C Initialisation de LISCHA ou extension de LISCHA
  129. IF (IPOIN2 .EQ. 0) THEN
  130. nbmspo = nbzone
  131. SEGINI,LISCHA
  132. LISCHA.NBENTI = 0
  133. IPOIN2 = LISCHA
  134. ELSE
  135. LISCHA = IPOIN2
  136. nbmspo = LISCHA.NBENTI + nbzone
  137. IF (nbmspo .GT. LISCHA.LICHAP(/1)) THEN
  138. SEGADJ,LISCHA
  139. ENDIF
  140. ENDIF
  141.  
  142. IF (nbzone.EQ.0) RETURN
  143.  
  144. nbsort = LISCHA.NBENTI
  145.  
  146. DO ii = 1, nbzone
  147. LISCHA.LIMAIL(nbsort+ii) = 0
  148. LISCHA.LICHAP(nbsort+ii) = 0
  149. ENDDO
  150.  
  151. C Determination du FORMAT automatique
  152. IFORMA = INT(LOG10(REAL(nbzone))) + 1
  153. IF (IFORMA.LT.1 .OR. IFORMA.GT.8) THEN
  154. CALL ERREUR(1094)
  155. RETURN
  156. ENDIF
  157. cha4F = '(I )'
  158. WRITE(cha4F(3:3),'(I1)') IFORMA
  159.  
  160. C Extraction de la liste des constituants communs (LISTMOTS)
  161. JGN = NCONCH
  162. JGM = nbzone
  163. SEGINI,MLMOTS
  164.  
  165. nbz = 0
  166. JGM = 0
  167. DO ii = 1,nbzone
  168. IPT1 = MCHELM.IMACHE(ii)
  169. IF (MEDEL(IPT1.ITYPEL) .EQ. MED_NONE) GOTO 11
  170.  
  171. ISUPP = MCHELM.INFCHE(ii,6)
  172. IF (ISUPP.GT.2) THEN
  173. CALL ERREUR(609)
  174. RETURN
  175. ENDIF
  176.  
  177. CALL PLACE(MLMOTS.MOTS,JGM,iplace,MCHELM.CONCHE(ii))
  178. IF (iplace .EQ. 0) THEN
  179. JGM = JGM + 1
  180. MLMOTS.MOTS(JGM) = MCHELM.CONCHE(ii)
  181. iplace = JGM
  182. ENDIF
  183.  
  184. nbz = nbz + 1
  185. LISCHA.LICHAP(nbsort+nbz) = iplace
  186. LISCHA.LIMAIL(nbsort+nbz) = ii
  187.  
  188. 11 CONTINUE
  189. ENDDO
  190.  
  191. SEGSUP,MLMOTS
  192.  
  193. IF (JGM .GT. 1) THEN
  194. IF (ilon2+IFORMA+1.GT.MED_NAME_SIZE) THEN
  195. CALL ERREUR(1111)
  196. RETURN
  197. END IF
  198. END IF
  199.  
  200. nbsort = LISCHA.NBENTI
  201.  
  202. DO ii = 1, nbz
  203.  
  204. nbsort = nbsort + 1
  205. iplace = LISCHA.LICHAP(nbsort)
  206. isz = LISCHA.LIMAIL(nbsort)
  207.  
  208. IF (JGM .GT. 1) THEN
  209. WRITE(cha8c,cha4F) iplace
  210. fname = fname(1:ilon2)//'_'//cha8c
  211. ENDIF
  212.  
  213. IPT1 = MCHELM.IMACHE(isz)
  214. CALL AJOU(ITLAC,IPT1)
  215.  
  216. LISCHA.NOCHAP(nbsort) = fname
  217. LISCHA.PNUMDT(nbsort) = numdt
  218. LISCHA.LICHAP(nbsort) = MCHELM.ICHAML(isz)
  219. LISCHA.LIMAIL(nbsort) = IPT1
  220. LISCHA.ISUPOR(nbsort,1) = MCHELM.INFCHE(isz,6)
  221. LISCHA.ISUPOR(nbsort,2) = MCHELM.INFCHE(isz,4)
  222. LISCHA.XTEMPS(nbsort) = xtps
  223.  
  224. ENDDO
  225.  
  226. LISCHA.NBENTI = nbsort
  227.  
  228. ELSE
  229. CALL ERREUR(5)
  230. RETURN
  231. ENDIF
  232.  
  233. c return
  234. END
  235.  
  236.  
  237.  

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