Télécharger lekmod.eso

Retour à la liste

Numérotation des lignes :

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

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