Télécharger chalvm.eso

Retour à la liste

Numérotation des lignes :

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

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