Télécharger chalvm.eso

Retour à la liste

Numérotation des lignes :

  1. C CHALVM SOURCE FANDEUR 17/12/20 21:15:12 9649
  2.  
  3. C=======================================================================
  4. C= C H A L V M =
  5. C= ----------- =
  6. C= =
  7. C= OPERATEUR CAST3M "SOURCE" : =
  8. C= --------------------------- =
  9. C= VERIFICATIONS SUR LE MODELE =
  10. C= Le MODELE doit contenir exclusivement un seul type =
  11. C= d'elements, soit MASSIFs, soit COQUEs, soit BARREs. =
  12. C= =
  13. C=======================================================================
  14.  
  15. SUBROUTINE CHALVM (IPMODL,MOCOMP, IPMOD1,IFORMU,ITYPEF)
  16.  
  17. IMPLICIT INTEGER(I-N)
  18. IMPLICIT REAL*8 (A-H,O-Z)
  19.  
  20. -INC CCOPTIO
  21.  
  22. -INC SMLMOTS
  23. -INC SMMODEL
  24.  
  25. CHARACTER*(*) MOCOMP
  26.  
  27. C ----------
  28. C= IMASSI Tableau contenant les numeros dans NOMTP des elements =
  29. C= thermiques de type MASSIF (dont l'element BARR) =
  30. C= LMASSI Longueur du tableau IMASSI =
  31. C= ICOQUE Tableau contenant les numeros dans NOMTP des elements =
  32. C= thermiques de type COQUE =
  33. C= LCOQUE Longueur du tableau ICOQUE =
  34. C= IBARTY Tableau contenant les numeros dans NOMTP des elements =
  35. C= thermiques de type BARRE ou TUYAU =
  36. C= LBARTY Longueur du tableau IBARTY =
  37. C ----------
  38. PARAMETER (LMASSI=16, LCOQUE=5, LBARTY=3)
  39. INTEGER IMASSI(LMASSI),ICOQUE(LCOQUE),IBARTY(LBARTY)
  40. C ----------
  41. C Elements TRI3 TRI6 QUA4 QUA8 CUB8 CU20 PRI6 PR15 TET4 TE10
  42. C MASSIFs PYR5 PY13 T1D2 T1D3 M1D2 M1D3
  43. C ----------
  44. DATA IMASSI / 4, 6, 8, 10, 14, 15, 16, 17, 23, 24,
  45. & 25, 26, 191, 192, 193, 194 /
  46. C -------------
  47. C Elts COQUEs COQ2 COQ3 COQ8 COQ4 COQ6
  48. C -------------
  49. DATA ICOQUE / 44, 27, 41, 49, 56 /
  50. C -------------
  51. C Elts BARRE/TUYA BARR TUYm TUYn
  52. C -------------
  53. DATA IBARTY / 46, 269, 270 /
  54. C -------------
  55.  
  56. IPMOD1 = 0
  57. IFORMU = 0
  58. ITYPEF = 0
  59.  
  60. C ======================================================
  61. C 1 - EXTRACTION DE LA FORMULATION A TRAITER DU MODELE
  62. C ======================================================
  63. C 1.1 - Verification de la formulation (unique) du modele
  64. C 1.2 - Recuperation du modele de la formulation retenue
  65. C 1.3 - Verification sur unicite de type EF retenu
  66. C =====
  67. iTHER = 0
  68. iTHHY = 0
  69. iDIFF = 0
  70. iELEC = 0
  71. *
  72. jMASSi = 0
  73. jCOQUe = 0
  74. jBARRe = 0
  75. *
  76. MMODEL = IPMODL
  77. SEGACT,MMODEL
  78. NSOUS = KMODEL(/1)
  79.  
  80. SEGINI,MMODE1=MMODEL
  81. N1 = 0
  82. DO isou = 1, NSOUS
  83. IMODEL = mmodel.KMODEL(isou)
  84. SEGACT,IMODEL
  85. MELE = imodel.NEFMOD
  86. i_mod1 = 0
  87. IF (imodel.FORMOD(/2).EQ.1) THEN
  88. IF (imodel.FORMOD(1).EQ.'THERMIQUE') THEN
  89. NMAT = imodel.MATMOD(/2)
  90. CALL PLACE(imodel.MATMOD,NMAT,icov,'CONVECTION')
  91. CALL PLACE(imodel.MATMOD,NMAT,iray,'RAYONNEMENT')
  92. IF (icov+iray.EQ.0) THEN
  93. iTHER = 1
  94. i_mod1 = 1
  95. ENDIF
  96. ELSE IF (imodel.FORMOD(1).EQ.'THERMOHYDRIQUE') THEN
  97. iTHHY = 1
  98. i_mod1 = 1
  99. ELSE IF (imodel.FORMOD(1).EQ.'DIFFUSION') THEN
  100. iDIFF = 1
  101. i_mod1 = 1
  102. ELSE IF (imodel.FORMOD(1).EQ.'ELECTROSTATIQUE') THEN
  103. iELEC = 1
  104. i_mod1 = 1
  105. ENDIF
  106. ENDIF
  107. IF (i_mod1.NE.0) THEN
  108. N1 = N1 + 1
  109. MMODE1.KMODEL(N1) = IMODEL
  110. CALL PLACE2(IBARTY,LBARTY,iok,MELE)
  111. IF (iok.NE.0) THEN
  112. jBARRe = jBARRe+1
  113. ELSE
  114. CALL PLACE2(IMASSI,LMASSI,iok,MELE)
  115. IF (iok.NE.0) THEN
  116. jMASSi = jMASSi+1
  117. ELSE
  118. CALL PLACE2(ICOQUE,LCOQUE,iok,MELE)
  119. IF (iok.NE.0) jCOQUe = jCOQUe+1
  120. ENDIF
  121. ENDIF
  122. ELSE
  123. SEGDES,IMODEL
  124. ENDIF
  125. ENDDO
  126. SEGDES,MMODEL
  127.  
  128. IF (N1.EQ.0) THEN
  129. write(ioimp,*) 'Modele vide ??'
  130. CALL ERREUR(21)
  131. GOTO 9900
  132. ENDIF
  133.  
  134. IF ((iTHER+iTHHY+iELEC+iDIFF).NE.1) THEN
  135. write(ioimp,*) 'Une seule formulation dans le modele !'
  136. CALL ERREUR(21)
  137. GOTO 9900
  138. ENDIF
  139. IF (iTHER .EQ. 1) THEN
  140. IFORMU = 1
  141. ELSE IF (iTHHY .EQ. 1) THEN
  142. IFORMU = 2
  143. ELSE IF (iDIFF .EQ. 1) THEN
  144. IFORMU = 3
  145. ELSE IF (iELEC .EQ. 1) THEN
  146. IFORMU = 4
  147. ELSE
  148. IFORMU = 0
  149. CALL ERREUR(5)
  150. GOTO 9900
  151. ENDIF
  152.  
  153. IF (jMASSi.EQ.N1) THEN
  154. ITYPEF = 1
  155. ELSE IF (jCOQUe.EQ.N1) THEN
  156. ITYPEF = 2
  157. ELSE IF (jBARRe.EQ.N1) THEN
  158. ITYPEF = 3
  159. ELSE
  160. ITYPEF = 0
  161. CALL ERREUR(409)
  162. GOTO 9900
  163. ENDIF
  164.  
  165. IF (N1.NE.NSOUS) THEN
  166. SEGADJ,MMODE1
  167. ENDIF
  168.  
  169. C ==================================================
  170. C 2 - Adequation nom de composante source & modele
  171. C ==================================================
  172. IF (iTHER .EQ. 1) THEN
  173. IF (MOCOMP.EQ.' ') MOCOMP = 'Q '
  174. IF (MOCOMP.NE.'Q ') CALL ERREUR(665)
  175. c* SEGDES,MMODE1
  176. ELSE
  177. IPCOMP = 0
  178. CALL NOVARD(MMODE1,'FORC')
  179. CALL LIROBJ('LISTMOTS',IPCOMP,1,iret)
  180. IF (IERR.NE.0) RETURN
  181. mlmots = IPCOMP
  182. SEGACT,mlmots
  183. NCOMP = mlmots.MOTS(/2)
  184. * Normalement : NCOMP est non nul !
  185. * Cas particulier de la diffusion en attendant un traitement adequat ?
  186. IF (iDIFF.EQ.1 .AND. NCOMP.GT.1) THEN
  187. write(ioimp,*) 'Modele de DIFFUSION a une seule quantite SVP'
  188. CALL ERREUR(21)
  189. ELSE
  190. IF (MOCOMP.EQ.' ') THEN
  191. MOCOMP = mlmots.MOTS(1)
  192. ELSE
  193. CALL PLACE(mlmots.MOTS,NCOMP,iret,MOCOMP)
  194. IF (iret.EQ.0) CALL ERREUR(665)
  195. ENDIF
  196. ENDIF
  197. SEGSUP,mlmots
  198. ENDIF
  199. IF (IERR.NE.0) GOTO 9900
  200.  
  201. IPMOD1 = MMODE1
  202.  
  203. 9900 CONTINUE
  204.  
  205. RETURN
  206. END
  207.  
  208.  
  209.  

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