Télécharger cakizd.eso

Retour à la liste

Numérotation des lignes :

cakizd
  1. C CAKIZD SOURCE GOUNAND 23/07/31 21:15:03 11713
  2. SUBROUTINE CAKIZD
  3. C************************************************************************
  4. C OBJET :
  5. C Cet operateur construit une table KIZD
  6. C SYNTAXE
  7. C kdia RV ;
  8. C************************************************************************
  9. C
  10. C Aout 96 : correction d'erreurs pour le calcul de la matrice masse
  11. C diagonale dans le cas d'un CHPO centre sans C.L
  12. C (testé uniquement dans ce cas : P.Galon)
  13. C
  14. C 26/10/98 : lecture d'une table domaine OU d'un objet modèle
  15. C************************************************************************
  16.  
  17. IMPLICIT INTEGER(I-N)
  18. IMPLICIT REAL*8 (A-H,O-Z)
  19.  
  20. -INC SMCOORD
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC CCREEL
  24. -INC SMTABLE
  25. POINTEUR MTABD.MTABLE,INCO.MTABLE
  26. POINTEUR KIZD.MTABLE
  27. C
  28. -INC SMCHPOI
  29. POINTEUR IPHI.MPOVAL
  30. POINTEUR IZD.MCHPOI ,IZD0.MCHPOI
  31. POINTEUR IZDD.MPOVAL,IZDD0.MPOVAL
  32. C
  33. -INC SMLMOTS
  34. POINTEUR MINCOG.MLMOTS
  35. C
  36. -INC SMELEME
  37. POINTEUR MELEMI.MELEME
  38. C
  39. -INC SMLENTI
  40. POINTEUR IZIPAD.MLENTI
  41. C
  42. PARAMETER (NTB=1)
  43. DIMENSION KTAB(NTB)
  44. CHARACTER*8 LTAB(NTB)
  45. DATA LTAB/'EQEX '/
  46. C
  47. CHARACTER*8 TYPE,TYP0,TYPC
  48. CHARACTER*(LOCOMP) NOC,NOMCP(9),NOMI,NOM,NOMZ
  49. C
  50. NTO=1
  51. Cne sert jamais IAXI=0
  52. Cne sert jamais IF(IFOMOD.EQ.0)IAXI=2
  53. C
  54. C ---- Lecture de la Table "RV"
  55. C -----------------------
  56. CALL LITABS(LTAB,KTAB,NTB,NTO,IRET)
  57. IF(IRET.EQ.0)RETURN
  58. C
  59. MTABLE=KTAB(1)
  60. SEGACT MTABLE
  61. C
  62. C ----- Lecture de la Table DOMINC
  63. C --------------------------
  64. TYPE=' '
  65. CALL ACMO(MTABLE,'DOMINC',TYPE,MDOMC)
  66. IF(TYPE.NE.'TABLE')THEN
  67. MOTERR(1:40)='On ne trouve pas DOMINC ds la Table EQEX'
  68. CALL ERREUR(-301)
  69. RETURN
  70. ENDIF
  71. C
  72. C ----- Lecture de la Table INCO
  73. C ------------------------
  74. TYPE=' '
  75. CALL ACMO(MTABLE,'INCO',TYPE,INCO)
  76. IF(TYPE.NE.'TABLE')THEN
  77. MOTERR(1:40)='On ne trouve pas INCO ds la Table EQEX '
  78. CALL ERREUR(-301)
  79. RETURN
  80. ENDIF
  81. C
  82. C ----- Lecture de la liste des inconnues
  83. C ---------------------------------
  84. TYPE=' '
  85. CALL ACMO(MTABLE,'LISTINCO',TYPE,MLMOT2)
  86. IF(TYPE.NE.'LISTMOTS')THEN
  87. MOTERR(1:40)='On ne trouve pas LISTINCO dans EQEX '
  88. CALL ERREUR(-301)
  89. RETURN
  90. ENDIF
  91. C
  92. SEGACT MLMOT2
  93. NBINC1=MLMOT2.MOTS(/2)
  94. C
  95. C ----- Lecture du CHPO des conditions limites (facultatif)
  96. C --------------------------------------
  97. TYPE=' '
  98. CALL ACMO(MTABLE,'CLIM',TYPE,MCHPOI)
  99. IF(TYPE.NE.'CHPOINT')THEN
  100. KCLIM=0
  101. ELSE
  102. KCLIM=1
  103. SEGACT MCHPOI
  104. NSOUPO=IPCHP(/1)
  105. ENDIF
  106. C
  107. C ----- Creation de la Table KIZD
  108. C -------------------------
  109. CALL CRTABL(KIZD)
  110. CALL ECMM(KIZD,'SOUSTYPE','KIZD')
  111. CALL ECMO(MTABLE,'KIZD','TABLE ',KIZD)
  112. C
  113. C ----- On Boucle sur la liste des inconnues
  114. C ====================================
  115. C
  116. C WRITE(IOIMP,*)' NBINC1=',nbinc1
  117. SEGACT,MCOORD
  118. DO 1 L=1,NBINC1
  119. NOMI=MLMOT2.MOTS(L)
  120. C WRITE(IOIMP,*)' CAKIZD : NOMI=',nomi
  121. C
  122. C ----- lecture de la table domaine ou de l'objet modèle N-Stokes
  123. C ---------------------------------------------------------
  124. TYPE=' '
  125. CALL ACMO(MDOMC,NOMI,TYPE,MTABD)
  126. * WRITE(IOIMP,*)' KDIA nomi,type=',nomi,type
  127. IF(TYPE.NE.'TABLE')THEN
  128. IF (TYPE.EQ.'MMODEL') THEN
  129. CALL LEKMOD(MTABD,MTABD2,INEFMD)
  130. MTABD=MTABD2
  131. ELSE
  132. MOTERR(1:40)='On ne trouve pas la Table Domaine '
  133. CALL ERREUR(-301)
  134. RETURN
  135. ENDIF
  136. ENDIF
  137. C
  138. C ----- la table sous table INCO contient elle l'inconnue
  139. C -------------------------------------------------
  140.  
  141. TYPE=' '
  142. CALL ACMO(INCO,NOMI,TYPE,MCHPHI)
  143. * WRITE(IOIMP,*)' KDIA nomi,type=',nomi,type
  144. IF(TYPE.NE.'CHPOINT ')THEN
  145. MOTERR(1:40)='L inconnue n est pas dans la Table INCO '
  146. CALL ERREUR(-301)
  147. MOTERR(1:40)='ou l inconnue n est pas un Champoint '
  148. CALL ERREUR(-301)
  149. GO TO 1
  150. ELSE
  151. CALL LICHT(MCHPHI,IPHI,TYPC,IGEOM)
  152. ENDIF
  153. C
  154. NPT=IPHI.VPOCHA(/1)
  155. NC=IPHI.VPOCHA(/2)
  156. * WRITE(IOIMP,*)' NPT,NC,TYPC=',NPT,NC,TYPC
  157. IF(TYPC.EQ.'SOMMET')THEN
  158. C
  159. C ----- On cree une diagonale 'SOMMET'
  160. C -----------------------------
  161. CALL ECROBJ('TABLE ',MTABD)
  162. SEGACT,MCOORD
  163. CALL CADGSI
  164. SEGDES,MCOORD
  165. CALL LIROBJ('CHPOINT ',IZD0,1,IRET)
  166. CALL LICHT(IZD0,IZDD0,TYP0,IGEOM0)
  167. ELSEIF(TYPC.EQ.'CENTRE')THEN
  168. C
  169. C ----- On cree une diagonale 'CENTRE'
  170. C -----------------------------
  171. CALL LEKTAB(MTABD,'XXVOLUM',IZD0)
  172. C
  173. IF(IZD0.EQ.0)RETURN
  174. CALL LICHT(IZD0,IZDD0,TYP0,IGEOM0)
  175. ELSE
  176. MOTERR(1:40)='CHPO CENTRE ou SOMMET pour l inconnue '
  177. CALL ERREUR(-301)
  178. RETURN
  179. ENDIF
  180. C
  181. C ----- Creation des CHPO de la Table KIZD
  182. C ----------------------------------
  183. TYPE=' '
  184. CALL ACMO(KIZD,NOMI,TYPE,IZD)
  185. C
  186. IF(TYPE.NE.'CHPOINT ')THEN
  187. IF(NC.EQ.1)THEN
  188. NOMCP(1)=NOMI
  189. CALL KRCHPT(TYP0,IGEOM0,NC,IZD,NOMCP)
  190. ELSE
  191. DO 15 I=1,NC
  192. WRITE(NOMCP(I),FMT='(I1)')I
  193. NOMCP(I)=NOMCP(I)(1:1)//NOMI(1:LOCOMP-1)
  194. 15 CONTINUE
  195. CALL KRCHPT(TYP0,IGEOM0,NC,IZD,NOMCP)
  196. ENDIF
  197. CALL LICHT(IZD,IZDD,TYPC,IGEOM)
  198. C
  199. DO 2 I=1,NC
  200. CALL RSETD(IZDD.VPOCHA(1,I),IZDD0.VPOCHA,NPT)
  201. 2 CONTINUE
  202. C
  203. CALL ECMO(KIZD,NOMI,'CHPOINT ',IZD)
  204. ELSE
  205. CALL LICHT(IZD,IZDD,TYPC,IGEOM)
  206. ENDIF
  207. C
  208. CALL KRIPAD(IGEOM,IZIPAD)
  209. C
  210. C ----- Boucle sur les composantes du Champoint
  211. C =======================================
  212. DO 3 I=1,NC
  213. IF(NC.EQ.1)THEN
  214. NOC=NOMI
  215. ELSE
  216. WRITE(NOC,FMT='(I1)')I
  217. NOC=NOC(1:1)//NOMI(1:LOCOMP-1)
  218. ENDIF
  219. C
  220. C ---- Si pas de condition limite on ne fait rien de plus
  221. C --------------------------------------------------
  222. IF(KCLIM.EQ.0)GO TO 3
  223. C Grande valeur de penalisation mais pas trop grande car sinon on
  224. C peut depasser la valeur max.
  225.  
  226. XBIG=SQRT(XGRAND)
  227. DO 10111 NSP=1,NSOUPO
  228. C
  229. MSOUPO=IPCHP(NSP)
  230. SEGACT MSOUPO
  231. NCOMP=NOCOMP(/2)
  232. C
  233. DO 10112 NCP=1,NCOMP
  234. IF(NOCOMP(NCP).EQ.NOC)THEN
  235. MELEMI=IGEOC
  236. SEGACT MELEMI
  237. LONG=MELEMI.NUM(/2)
  238. CALL VERPAD(IZIPAD,MELEMI,IRET)
  239. IF(IRET.NE.0)THEN
  240. MOTERR(1:40)
  241. $ ='C.Limites non incluses dans le domaine '
  242. CALL ERREUR(-301)
  243. RETURN
  244. ENDIF
  245. CALL RSETX1
  246. & (IZDD.VPOCHA(1,I),MELEMI.NUM,LONG,XBIG
  247. $ ,IZIPAD.LECT)
  248. ENDIF
  249. 10112 CONTINUE
  250. C
  251. 10111 CONTINUE
  252. C
  253. 3 CONTINUE
  254. C
  255. SEGSUP IZIPAD
  256. 1 CONTINUE
  257. SEGDES,MCOORD
  258. C
  259. C ---- FIN DE LA BOUCLE SUR LES INCONNUES
  260. C ----------------------------------
  261. SEGDES KIZD,INCO
  262. SEGDES MTABLE
  263. END
  264.  
  265.  

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