Télécharger lekmod.eso

Retour à la liste

Numérotation des lignes :

  1. C LEKMOD SOURCE CHAT 11/03/16 21:26:57 6902
  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.  
  57. IF (NBMECF.EQ.0) THEN
  58. C Données incompatibles
  59. CALL ERREUR(21)
  60. RETURN
  61. ENDIF
  62. *
  63. * Voyons l'une des partitions de type méca-flux :
  64. *
  65. IMODEL = KMODEL(L0)
  66. IPTR = INFMOD(2)
  67.  
  68. IF(IPTR.NE.0)THEN
  69. * la table domaine existe déjà pour cette partition
  70. * (donc pour toutes les autres partitions de type méca-flux)
  71.  
  72. * On renvoie le pointeur de la table
  73. IPOINT=IPTR
  74.  
  75. * Détermination de MACRO et INEFMD
  76. IMODEL = KMODEL(1)
  77. IF((FORMOD(1).EQ.'DARCY').OR.(NOMFOR.EQ.'EULER'))THEN
  78. INEFMD=0
  79. MACRO=0
  80. ELSEIF(NEFMOD.GE.129.AND.NEFMOD.LE.135)THEN
  81. INEFMD=1
  82. MACRO=0
  83. ELSEIF(NEFMOD.GE.136.AND.NEFMOD.LE.141)THEN
  84. INEFMD=2
  85. MACRO=1
  86. ELSEIF(NEFMOD.GE.143.AND.NEFMOD.LE.149)THEN
  87. INEFMD=3
  88. MACRO=0
  89. ELSEIF(NEFMOD.GE.158.AND.NEFMOD.LE.164)THEN
  90. INEFMD=4
  91. MACRO=0
  92. ELSEIF(NEFMOD.GE.195.AND.NEFMOD.LE.208)THEN
  93. INEFMD=1
  94. MACRO=0
  95. ELSEIF(NEFMOD.GE.209.AND.NEFMOD.LE.215)THEN
  96. INEFMD=4
  97. MACRO=0
  98. ELSEIF(NEFMOD.GE.216.AND.NEFMOD.LE.236)THEN
  99. INEFMD=2
  100. MACRO=1
  101. ELSEIF(NEFMOD.GE.237.AND.NEFMOD.LE.257)THEN
  102. INEFMD=3
  103. MACRO=0
  104. ELSE
  105. * Le type d'élément fini ne convient pas
  106. C Données incompatibles
  107. CALL ERREUR(21)
  108. IPOINT=0
  109. RETURN
  110. ENDIF
  111. ELSE
  112. * la table domaine n'existe pas pour cette partition
  113. * (donc pour aucune des autres). On va la créer.
  114. * La discrétisation est la supposée la même pour toutes les
  115. * partitions.
  116.  
  117. * Création du maillage, concaténation des sous-maillages pertinents
  118. NBSOUS = NBMECF
  119. IF (NBSOUS.EQ.1) THEN
  120. DO 2 L=1,N1
  121. IF (LPART(L)) THEN
  122. IMODEL = KMODEL(L)
  123. MELEME = IMODEL.IMAMOD
  124. ENDIF
  125. 2 CONTINUE
  126. ELSE
  127. NBREF = 0
  128. NBNN = 0
  129. NBELEM = 0
  130. SEGINI MELEME
  131. K = 0
  132. DO 3 L=1,N1
  133. IF (LPART(L)) THEN
  134. K = K + 1
  135. IMODEL = KMODEL(L)
  136. LISOUS(K) = IMODEL.IMAMOD
  137. ENDIF
  138. 3 CONTINUE
  139. SEGDES MELEME
  140. ENDIF
  141.  
  142. IMODEL=KMODEL(1)
  143. IF((FORMOD(1).EQ.'DARCY').OR.(NOMFOR.EQ.'EULER'))THEN
  144. MACRO=0
  145. INEFMD=1
  146. ELSEIF(NEFMOD.GE.129.AND.NEFMOD.LE.135)THEN
  147. INEFMD=1
  148. MACRO=0
  149. ELSEIF(NEFMOD.GE.136.AND.NEFMOD.LE.141)THEN
  150. INEFMD=2
  151. MACRO=1
  152. ELSEIF(NEFMOD.GE.143.AND.NEFMOD.LE.149)THEN
  153. INEFMD=3
  154. MACRO=0
  155. ELSEIF(NEFMOD.GE.158.AND.NEFMOD.LE.164)THEN
  156. INEFMD=4
  157. MACRO=0
  158. ELSEIF(NEFMOD.GE.195.AND.NEFMOD.LE.208)THEN
  159. INEFMD=1
  160. MACRO=0
  161. ELSEIF(NEFMOD.GE.209.AND.NEFMOD.LE.215)THEN
  162. INEFMD=4
  163. MACRO=0
  164. ELSEIF(NEFMOD.GE.216.AND.NEFMOD.LE.236)THEN
  165. INEFMD=2
  166. MACRO=1
  167. ELSEIF(NEFMOD.GE.237.AND.NEFMOD.LE.257)THEN
  168. INEFMD=3
  169. MACRO=0
  170. ELSE
  171. C Données incompatibles
  172. CALL ERREUR(21)
  173. IPOINT=0
  174. MACRO=0
  175. RETURN
  176. ENDIF
  177.  
  178. TOLER=0.D0
  179. NOMDOM=' '
  180.  
  181. * Création table domaine
  182. IF ((FORMOD(1).EQ.'EULER').OR.(FORMOD(1).EQ.'DARCY'))THEN
  183. CALL KKDOM2(MELEME,TOLER,NOMDOM,MTABI,MTABD,INEFMD)
  184. ELSE
  185. CALL KKDOM(MELEME,MACRO,TOLER,NOMDOM,MTABI,MTABD,INEFMD)
  186. ENDIF
  187.  
  188. * On fait pointer toutes les partitions du modèle sur la même
  189. * table domaine globale.
  190. DO 1235 L=1,N1
  191. IF (LPART(L)) THEN
  192. IMODEL = KMODEL(L)
  193. SEGACT IMODEL*MOD
  194. INFMOD(2)=MTABD
  195. ENDIF
  196. 1235 CONTINUE
  197.  
  198. * On renvoie le pointeur de la table
  199. IPOINT=MTABD
  200. ENDIF
  201.  
  202. * Fermeture des segments (on laisse tous les segments du modèle
  203. * ouverts).
  204. SEGDES TPART
  205.  
  206. RETURN
  207. C
  208. END
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  

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