Télécharger lekmod.eso

Retour à la liste

Numérotation des lignes :

  1. C LEKMOD SOURCE MAGN 18/05/16 21:15:05 9823
  2. SUBROUTINE LEKMOD(MMODEL,IPOINT,INEFMD)
  3. C---------------------------------------------------------------------
  4. C Ce sous-programme vérifie que le modèle est bien Navier_Stokes
  5. C ou DARCY
  6. C ensuite il recherche dans le modele MMODEL
  7. C la table domaine et la cree si elle n'existe pas déja
  8. C---------------------------
  9. C Paramètres Entrée/Sortie :
  10. C---------------------------
  11. C
  12. C E/S MMODEL : Pointeur du modèle contenant l'information cherchée
  13. C (rendu ACTIF)
  14. C /S IPOINT : Pointeur sur la table DOMAINE
  15. C /S INEFMD : Type formulation (non utilisé par DARCY)
  16. C INEFMD = 1 LINE,
  17. C = 2 MACRO,
  18. C = 3 QUADRATIQUE,
  19. C = 4 LINB.
  20. C
  21. C---------------------------------------------------------------------
  22. IMPLICIT INTEGER(I-N)
  23. IMPLICIT REAL*8 (A-H,O-Z)
  24. -INC SMELEME
  25. -INC SMMODEL
  26. CHARACTER*8 NOMDOM
  27. CHARACTER*16 NOMFOR
  28.  
  29. C Table des partitions concernées par la table domaine
  30. SEGMENT TPART
  31. LOGICAL LPART(NBPART)
  32. ENDSEGMENT
  33.  
  34. C***
  35.  
  36. MTABI=0
  37.  
  38. * Identification des formulations des partitions du modèle
  39. * de méca-flux :
  40. SEGACT MMODEL
  41. N1 = KMODEL(/1)
  42. NBPART = N1
  43. SEGINI TPART
  44. NBMECF = 0
  45. DO 1 L=1,N1
  46. IMODEL=KMODEL(L)
  47. SEGACT IMODEL
  48. NOMFOR = FORMOD(1)
  49. LPART(L) = ((NOMFOR.EQ.'NAVIER_STOKES').OR.(NOMFOR.EQ.'DARCY')
  50. & .OR.(NOMFOR.EQ.'EULER'))
  51. IF (LPART(L)) THEN
  52. L0 = L
  53. NBMECF = NBMECF + 1
  54. ENDIF
  55. 1 CONTINUE
  56. C write(6,*)' SUB LEKMOD : NEFMOD=',NEFMOD
  57.  
  58. IF (NBMECF.EQ.0) THEN
  59. C Données incompatibles
  60. CALL ERREUR(21)
  61. RETURN
  62. ENDIF
  63. *
  64. * Voyons l'une des partitions de type méca-flux :
  65. *
  66. IMODEL = KMODEL(L0)
  67. IPTR = INFMOD(2)
  68.  
  69. IF(IPTR.NE.0)THEN
  70. * la table domaine existe déjà pour cette partition
  71. * (donc pour toutes les autres partitions de type méca-flux)
  72.  
  73. * On renvoie le pointeur de la table
  74. IPOINT=IPTR
  75.  
  76. * Détermination de MACRO et INEFMD
  77. IMODEL = KMODEL(1)
  78. IF((FORMOD(1).EQ.'DARCY').OR.(NOMFOR.EQ.'EULER'))THEN
  79. INEFMD=0
  80. MACRO=0
  81. ELSEIF(NEFMOD.GE.129.AND.NEFMOD.LE.135)THEN
  82. INEFMD=1
  83. MACRO=0
  84. ELSEIF(NEFMOD.GE.136.AND.NEFMOD.LE.142)THEN
  85. INEFMD=2
  86. MACRO=1
  87. ELSEIF(NEFMOD.GE.143.AND.NEFMOD.LE.149)THEN
  88. INEFMD=3
  89. MACRO=0
  90. ELSEIF(NEFMOD.GE.158.AND.NEFMOD.LE.164)THEN
  91. INEFMD=4
  92. MACRO=0
  93. ELSEIF(NEFMOD.GE.195.AND.NEFMOD.LE.208)THEN
  94. INEFMD=1
  95. MACRO=0
  96. ELSEIF(NEFMOD.GE.209.AND.NEFMOD.LE.215)THEN
  97. INEFMD=4
  98. MACRO=0
  99. ELSEIF(NEFMOD.GE.216.AND.NEFMOD.LE.236)THEN
  100. INEFMD=2
  101. MACRO=1
  102. ELSEIF(NEFMOD.GE.237.AND.NEFMOD.LE.257)THEN
  103. INEFMD=3
  104. MACRO=0
  105. ELSE
  106. * Le type d'élément fini ne convient pas
  107. C Données incompatibles
  108. CALL ERREUR(21)
  109. IPOINT=0
  110. RETURN
  111. ENDIF
  112. ELSE
  113. * la table domaine n'existe pas pour cette partition
  114. * (donc pour aucune des autres). On va la créer.
  115. * La discrétisation est la supposée la même pour toutes les
  116. * partitions.
  117.  
  118. * Création du maillage, concaténation des sous-maillages pertinents
  119. NBSOUS = NBMECF
  120. IF (NBSOUS.EQ.1) THEN
  121. DO 2 L=1,N1
  122. IF (LPART(L)) THEN
  123. IMODEL = KMODEL(L)
  124. MELEME = IMODEL.IMAMOD
  125. ENDIF
  126. 2 CONTINUE
  127. ELSE
  128. NBREF = 0
  129. NBNN = 0
  130. NBELEM = 0
  131. SEGINI MELEME
  132. K = 0
  133. DO 3 L=1,N1
  134. IF (LPART(L)) THEN
  135. K = K + 1
  136. IMODEL = KMODEL(L)
  137. LISOUS(K) = IMODEL.IMAMOD
  138. ENDIF
  139. 3 CONTINUE
  140. SEGDES MELEME
  141. ENDIF
  142.  
  143. IMODEL=KMODEL(1)
  144. IF((FORMOD(1).EQ.'DARCY').OR.(NOMFOR.EQ.'EULER'))THEN
  145. MACRO=0
  146. INEFMD=1
  147. ELSEIF(NEFMOD.GE.129.AND.NEFMOD.LE.135)THEN
  148. INEFMD=1
  149. MACRO=0
  150. ELSEIF(NEFMOD.GE.136.AND.NEFMOD.LE.142)THEN
  151. INEFMD=2
  152. MACRO=1
  153. ELSEIF(NEFMOD.GE.143.AND.NEFMOD.LE.149)THEN
  154. INEFMD=3
  155. MACRO=0
  156. ELSEIF(NEFMOD.GE.158.AND.NEFMOD.LE.164)THEN
  157. INEFMD=4
  158. MACRO=0
  159. ELSEIF(NEFMOD.GE.195.AND.NEFMOD.LE.208)THEN
  160. INEFMD=1
  161. MACRO=0
  162. ELSEIF(NEFMOD.GE.209.AND.NEFMOD.LE.215)THEN
  163. INEFMD=4
  164. MACRO=0
  165. ELSEIF(NEFMOD.GE.216.AND.NEFMOD.LE.236)THEN
  166. INEFMD=2
  167. MACRO=1
  168. ELSEIF(NEFMOD.GE.237.AND.NEFMOD.LE.257)THEN
  169. INEFMD=3
  170. MACRO=0
  171. ELSE
  172. C Données incompatibles
  173. CALL ERREUR(21)
  174. IPOINT=0
  175. MACRO=0
  176. RETURN
  177. ENDIF
  178.  
  179. TOLER=0.D0
  180. NOMDOM=' '
  181.  
  182. * Création table domaine
  183. IF ((FORMOD(1).EQ.'EULER').OR.(FORMOD(1).EQ.'DARCY'))THEN
  184. CALL KKDOM2(MELEME,TOLER,NOMDOM,MTABI,MTABD,INEFMD)
  185. ELSE
  186. CALL KKDOM(MELEME,MACRO,TOLER,NOMDOM,MTABI,MTABD,INEFMD)
  187. ENDIF
  188.  
  189. * On fait pointer toutes les partitions du modèle sur la même
  190. * table domaine globale.
  191. DO 1235 L=1,N1
  192. IF (LPART(L)) THEN
  193. IMODEL = KMODEL(L)
  194. SEGACT IMODEL*MOD
  195. INFMOD(2)=MTABD
  196. ENDIF
  197. 1235 CONTINUE
  198.  
  199. * On renvoie le pointeur de la table
  200. IPOINT=MTABD
  201. ENDIF
  202.  
  203. * Fermeture des segments (on laisse tous les segments du modèle
  204. * ouverts).
  205. SEGDES TPART
  206.  
  207. RETURN
  208. C
  209. END
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  

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