Télécharger ylapl.eso

Retour à la liste

Numérotation des lignes :

ylapl
  1. C YLAPL SOURCE CB215821 20/11/25 13:44:21 10792
  2. SUBROUTINE YLAPL
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C
  7. C CET OPERATEUR DISCRETISE LE LAPLACIEN
  8. C EN 2D SUR LES ELEMENTS QUA4 ET TRI3 PLAN OU AXI
  9. C EN 3D SUR LES ELEMENTS CUB8 ET PRI6
  10. C EN 0D SUR LES ELEMENTS POI1 (discrétisation en 1D de l'équation
  11. C de conduction de la chaleur :
  12. C dérivée temporelle + laplacien)
  13. C
  14. C CET OPERATEUR EST "SOUS-INTEGRES"
  15. C
  16. C SYNTAXE :
  17. C ---------
  18. C
  19. C LAPL(ALF) INCO TN :
  20. C
  21. C COEFFICIENTS :
  22. C --------------
  23. C
  24. C
  25. C ALF (SCAL DOMA) DIFFUSIVITE THERMIQUE
  26. C (SCAL ELEM)
  27. C
  28. C INCONNUES :
  29. C -----------
  30. C
  31. C TN CHAMP DE TEMPERATURE
  32. C
  33. C************************************************************************
  34.  
  35. -INC CCVQUA4
  36.  
  37. -INC PPARAM
  38. -INC CCOPTIO
  39. -INC CCGEOME
  40. -INC SMCOORD
  41. -INC SMLENTI
  42. POINTEUR IPADI.MLENTI,IPADS.MLENTI
  43. -INC SMELEME
  44. POINTEUR MELEMI.MELEME,IGEOM0.MELEME,MELEMS.MELEME
  45. -INC SMCHPOI
  46. POINTEUR MCHPIN.MCHPOI
  47. POINTEUR IZG1.MCHPOI, IZG2.MCHPOI
  48. POINTEUR MZLAM.MPOVAL
  49. POINTEUR IZGG1.MPOVAL,IZGG2.MPOVAL
  50. POINTEUR IZTU1.MPOVAL,IZTU2.MPOVAL,IZTU3.MPOVAL,IZTU4.MPOVAL
  51. POINTEUR IZTG5.MPOVAL
  52. POINTEUR IZVOL.MPOVAL,IZTCO.MPOVAL,IZDIAE.MPOVAL,IZTDI.MPOVAL
  53.  
  54. -INC SIZFFB
  55. POINTEUR IPM.IZAFM
  56.  
  57. C SEGMENT IMATRS
  58. C INTEGER LIZAFS(NBSOUS,NBME)
  59. C ENDSEGMENT
  60. POINTEUR IPMS.IZAFM,IPS1.IZAFM,IPS2.IZAFM,IPS3.IZAFM
  61.  
  62. -INC SMLMOTS
  63. POINTEUR LINCO.MLMOTS
  64. CHARACTER*8 NOMZ,NOMI,NOMA,TYPE,TYPC,NOM,NOM0,CHAI,MTYP
  65. CHARACTER*4 NOM4
  66. REAL*8 XVAL(9)
  67. LOGICAL LOGI
  68. PARAMETER (NTB=2)
  69. CHARACTER*8 LTAB(NTB)
  70. DIMENSION KTAB(NTB),IXV(4)
  71. segact mcoord
  72. * initialisons kform a 0 PV
  73. kform=0
  74. C*****************************************************************************
  75. CLAPL
  76. C write(6,*)' DEBUT YLAPL'
  77. C
  78. C Trois traitements différents suivant la discrétisation 2D/3D EF, VF, ou 0D
  79. C (respectivement, table d'entrée de soustype KIZX
  80. C ou de soustype OPER_0D)
  81. C
  82. C
  83. C**** EN VF, LAPN est un operatéur normal,
  84. C
  85. C JACO RESI DELTAT = 'LAPN' 'VF' ...
  86. C
  87. CALL LIRCHA(NOM4,0,IRET)
  88. IF(IRET .NE. 0)THEN
  89. IF(NOM4 .EQ. 'VF ')THEN
  90. CALL YLAPL1
  91. GOTO 9999
  92. ELSE
  93. C
  94. C********** Je m'excuse et je le remets dans la pile
  95. C
  96. CALL REFUS
  97. ENDIF
  98. ENDIF
  99. C
  100. C Nouvelle directive EQUA de EQEX
  101. C
  102. MTYP=' '
  103. CALL QUETYP(MTYP,0,IRET)
  104. IF(IRET.EQ.0)THEN
  105. C% On attend un des objets : %m1:8 %m9:16 %m17:24 %m25:32 %m33:40
  106. MOTERR( 1: 8) = 'CHAI '
  107. MOTERR( 9:16) = 'MMODEL '
  108. MOTERR(17:24) = 'TABLE '
  109. CALL ERREUR(472)
  110. RETURN
  111. ENDIF
  112.  
  113. IF(MTYP.EQ.'MMODEL')THEN
  114. CALL YTCLSF(' L ','LAPN ')
  115. RETURN
  116. ELSEIF(MTYP.EQ.'MOT ')THEN
  117. CALL LIRCHA(CHAI,1,IRET)
  118. CALL YTCLSF(CHAI,'LAPN ')
  119. RETURN
  120. ENDIF
  121. C Fin Nouvelle directive EQUA de EQEX
  122.  
  123. LTAB(1) = 'KIZX '
  124. LTAB(2) = 'OPER_0D '
  125. KTAB(1) = 0
  126. KTAB(2) = 0
  127. CALL LITABS(LTAB,KTAB,NTB,0,IRET)
  128. IF(IRET.EQ.0)THEN
  129. WRITE(6,*)' Opérateur LAPN :'
  130. WRITE(6,*)' On attend un ensemble de table soustypes'
  131. RETURN
  132. ENDIF
  133. C
  134. C Bifurcation en cas de discrétisation 0D
  135. C
  136. IF (KTAB(1).NE.0) THEN
  137. MTABX = KTAB(1)
  138. ELSEIF (KTAB(2).NE.0) THEN
  139. IPTAB1 = KTAB(2)
  140. CALL TOWA (IPTAB1)
  141. RETURN
  142. ELSE
  143. WRITE(6,*)' Opérateur LAPN :'
  144. WRITE(6,*)' On attend une table de soustype KIZX ou OPER_0D'
  145. RETURN
  146. ENDIF
  147.  
  148. C.......................................................................
  149. C
  150. C- Récupération de la table EQEX (pointeur MTAB1)
  151. C
  152. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  153. IF(MTAB1.EQ.0)THEN
  154. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  155. MOTERR( 1: 8) = ' EQEX '
  156. MOTERR( 9:16) = ' EQEX '
  157. MOTERR(17:24) = ' KIZX '
  158. CALL ERREUR(786)
  159. RETURN
  160. ENDIF
  161. CALL ACME(MTAB1,'NAVISTOK',NASTOK)
  162. IF(NASTOK.EQ.0)THEN
  163. CALL ZLAPL(MTABX,MTAB1)
  164. RETURN
  165. ENDIF
  166. C
  167. C- Récupération de la table INCO (pointeur KINC)
  168. C
  169. CALL LEKTAB(MTAB1,'INCO',KINC)
  170. IF(KINC.EQ.0)THEN
  171. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  172. MOTERR( 1: 8) = ' INCO '
  173. MOTERR( 9:16) = ' INCO '
  174. MOTERR(17:24) = ' EQEX '
  175. CALL ERREUR(786)
  176. RETURN
  177. ENDIF
  178. C.......................................................................
  179.  
  180. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  181.  
  182. MTYP='MMODEL'
  183. CALL QUETYP(MTYP,0,IRET)
  184. IF(IRET.EQ.1)THEN
  185. CALL LIROBJ('MMODEL',MMDZ,1,IRET)
  186. ELSE
  187. TYPE=' '
  188. CALL ACMO(MTABX,'DOMZ',TYPE,MMDZ)
  189. IF(TYPE.NE.'MMODEL')THEN
  190. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  191. MOTERR( 1: 8) = ' DOMZ '
  192. MOTERR( 9:16) = ' DOMZ '
  193. MOTERR(17:24) = ' KIZX '
  194. CALL ERREUR(786)
  195. RETURN
  196. ENDIF
  197. ENDIF
  198.  
  199. C*****************************************************************************
  200. C OPTIONS
  201. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI
  202. C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC
  203. C IDCEN = 0-> rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG
  204.  
  205. IAXI=0
  206. IF(IFOMOD.EQ.0)IAXI=2
  207. C
  208. C- Récupération de la table des options KOPT (pointeur KOPTI)
  209. C
  210. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  211. IF (KOPTI.EQ.0) THEN
  212. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  213. MOTERR( 1: 8) = ' KOPT '
  214. MOTERR( 9:16) = ' KOPT '
  215. MOTERR(17:24) = ' KIZX '
  216. CALL ERREUR(786)
  217. RETURN
  218. ENDIF
  219.  
  220. C*****************************************************************************
  221. C
  222. C- Récupération de la table DOMAINE associée au domaine local
  223. C
  224.  
  225. C E/ MMODEL : Pointeur de la table contenant l'information cherchée
  226. C /S IPOINT : Pointeur sur la table DOMAINE
  227. C /S INEFMD : Type formulation INEFMD=1 LINE,=2 MACRO,=3 QUADRATIQUE
  228. C INEFMD=4 LINB
  229.  
  230. CALL LEKMOD(MMDZ,MTABZ,INEFMD)
  231.  
  232. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  233. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  234. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  235. IF (IERR.NE.0) RETURN
  236.  
  237. SEGACT MELEME
  238.  
  239. C*****************************************************************************
  240. C VERIFICATIONS SUR LES INCONNUES
  241. C
  242. C- Récupération du nombre d'inconnues et du nom de l'inconnue NOMI
  243. C
  244. TYPE = 'LISTMOTS'
  245. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  246. IF (IERR.NE.0) RETURN
  247. SEGACT LINCO
  248. NBINC = LINCO.MOTS(/2)
  249. IF (NBINC.LE.0.OR.NBINC.GE.3) THEN
  250. C Indice %m1:8 : contient plus de %i1 %m9:16
  251. MOTERR( 1:8) = 'LISTINCO'
  252. INTERR(1) = 2
  253. MOTERR(9:16) = ' MOTS '
  254. CALL ERREUR(799)
  255. RETURN
  256. ENDIF
  257. NOMI = LINCO.MOTS(1)
  258. NOMA = NOMI
  259. NOM4 = NOMI(1:4)
  260. IF (NBINC.EQ.2) THEN
  261. IF (LINCO.MOTS(1).EQ.LINCO.MOTS(2)) THEN
  262. NINCO = 1
  263. ELSE
  264. IF (KFORM.EQ.0) THEN
  265. C Indice %m1:8 : contient plus de %i1 %m9:16
  266. MOTERR( 1:8) = 'LISTINCO'
  267. INTERR(1) = 1
  268. MOTERR(9:16) = ' MOTS '
  269. CALL ERREUR(799)
  270. RETURN
  271. ELSE
  272. NOMA = LINCO.MOTS(2)
  273. ENDIF
  274. ENDIF
  275. ENDIF
  276. C
  277. C- Récupération de l'inconnue
  278. C
  279. TYPE = ' '
  280. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  281. IF (TYPE.NE.'CHPOINT ') THEN
  282. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  283. MOTERR( 1: 8) = 'INC '//NOMI
  284. MOTERR( 9:16) = 'CHPOINT '
  285. CALL ERREUR(800)
  286. RETURN
  287. ELSE
  288. CALL LICHTL(MCHPOI,IZTU1,TYPC,MELEMI)
  289. MCHPIN=MCHPOI
  290. IF (NBINC.EQ.2) THEN
  291. TYPE = ' '
  292. CALL ACMO(KINC,NOMA,TYPE,MCHPO2)
  293. IF (TYPE.NE.'CHPOINT ') THEN
  294. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  295. MOTERR( 1: 8) = 'INC '//NOMA
  296. MOTERR( 9:16) = 'CHPOINT '
  297. CALL ERREUR(800)
  298. RETURN
  299. ELSE
  300. CALL LICHTL(MCHPO2,IZTU2,TYPC,IGEOM2)
  301. IF (IGEOM2.NE.MELEMI) THEN
  302. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  303. MOTERR(1: 8) = 'INC '//NOMA
  304. MOTERR(9:16) = 'CHPOINT '
  305. CALL ERREUR(788)
  306. RETURN
  307. ENDIF
  308. ENDIF
  309. ENDIF
  310. C*****************************************************************************
  311. C Le domaine de definition est donne par le SPG de la premiere inconnue
  312. C Les inconnues suivantes devront posseder ce meme pointeur
  313. C On verifie que les points de la zone sont tous inclus dans ce SPG
  314. IF (KFORM.NE.2) THEN
  315. CALL KRIPAD(MELEMI,IPADI)
  316. IPADS=IPADI
  317. IF(MELEMI.NE.MELEMS)CALL KRIPAD(MELEMS,IPADS)
  318.  
  319. CALL VERPAD(IPADI,MELEME,IRET)
  320. IF (IRET.NE.0) THEN
  321. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  322. MOTERR(1: 8) = 'INC '//NOMI
  323. MOTERR(9:16) = 'CHPOINT '
  324. CALL ERREUR(788)
  325. RETURN
  326. ENDIF
  327. ENDIF
  328. C*****************************************************************************
  329. ENDIF
  330.  
  331. C*****************************************************************************
  332. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI
  333. C KFORM = 0 -> SI 1 -> EF 2 -> VF
  334.  
  335. CALL ACME(KOPTI,'KFORM',KFORM)
  336. C*************************************************************************
  337. C Je vous arrete tout de suite ! si KFORM=1 on ne fai rien d'autre ici !
  338. IF(KFORM.EQ.1)THEN
  339. C CAS FORMULATION EF
  340.  
  341. NINKO=IZTU1.VPOCHA(/2)
  342. IHV=0
  343. IF(NINKO.EQ.IDIM)IHV=1
  344.  
  345. CALL YCLS('LAPN ',MTABX,MTABZ,IHV,MCHPIN,NOMI,MATRIK,MCHPO1)
  346.  
  347. CALL ECROBJ('MATRIK',MATRIK)
  348. CALL ECROBJ('CHPOINT',MCHPO1)
  349. C write(6,*)' FIN YLAPL'
  350. RETURN
  351. ENDIF
  352. C*************************************************************************
  353.  
  354. CALL ACME(KOPTI,'IKOMP',IKOMP)
  355. CALL ACME(KOPTI,'KIMPL',KIMPL)
  356. CALL ACME(KOPTI,'KMACO',KMACO)
  357. CALL ACMF(KOPTI,'AIMPL',AIMPL)
  358.  
  359. IF(KIMPL.EQ.0)THEN
  360. CALL LEKTAB(MTABZ,'MATESI',MATRIK)
  361. SEGACT MATRIK
  362. IMATRI=IRIGEL(4,1)
  363. SEGACT IMATRI
  364.  
  365. CALL LEKTAB(MTABZ,'XXDXDY',MCHPDX)
  366. CALL LEKTAB(MTABZ,'XXVOLUM',MCHPVO)
  367. CALL LEKTAB(MTABZ,'XXDIAME',MCHPDE)
  368. CALL LEKTAB(MTABZ,'XXDIEMIN',MCHPDI)
  369. IF (IERR.NE.0) RETURN
  370.  
  371. CALL LICHTL(MCHPDX,IZTCO,TYPC,IGEOM)
  372. CALL LICHTL(MCHPDI,IZTDI,TYPC,IGEOM)
  373. CALL LICHTL(MCHPDE,IZDIAE,TYPC,IGEOM)
  374. CALL LICHTL(MCHPVO,IZVOL,TYPC,IGEOM)
  375.  
  376. ENDIF
  377.  
  378. C*****************************************************************************
  379. C Lecture du coefficient
  380. C Type du coefficient :
  381. C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur
  382.  
  383. CALL ACME(MTABX,'IARG',IARG)
  384. IF(IARG.GT.1)THEN
  385. WRITE(6,*)' Operateur LAPN '
  386. WRITE(6,*)' Nombre d''arguments incorrect : ',IARG
  387. WRITE(6,*)' On attend 1 '
  388. RETURN
  389. ENDIF
  390.  
  391. IXV(1)=MELEMC
  392. IXV(2)=1
  393. IXV(3)=0
  394. IXV(4)=MELEMS
  395.  
  396. IRET=0
  397. IF(KFORM.EQ.1)IRET=4
  398.  
  399. CALL LEKCOF('Opérateur LAPN :',
  400. & MTABX,KINC,1,IXV,MLAM,MZLAM,NPT1,NC1,IK1,IRET)
  401. IF(IRET.EQ.0)RETURN
  402.  
  403. C write(6,*)' KFORM,KIMPL=',KFORM,KIMPL
  404. C*************************************************************************
  405. IF(KFORM.EQ.0)THEN
  406. C CAS FORMULATION EF SI (GRESHO)
  407.  
  408. IF(KIMPL.NE.0)THEN
  409. WRITE(6,*)' Opérateur LAPN :'
  410. C Option %m1:8 incompatible avec les données
  411. MOTERR( 1: 8) = ' EFM1 '
  412. WRITE(6,*)' Options incompatibles : EFM1 et (IMPL ou SEMI) '
  413. CALL ERREUR(803)
  414. RETURN
  415. ENDIF
  416.  
  417. NC=IZTU1.VPOCHA(/2)
  418. NPTI=IZTU1.VPOCHA(/1)
  419. TYPE='SOMMET'
  420. CALL KRCHPT(TYPE,MELEMS,NC,IZG1,NOM4)
  421.  
  422. CALL LICHTM(IZG1,IZGG1,TYPC,IGEOM)
  423.  
  424. NPTS=IZGG1.VPOCHA(/1)
  425.  
  426. NCOT=IZTCO.VPOCHA(/1)
  427.  
  428. SEGACT MELEME
  429. NBSOUS=LISOUS(/1)
  430. IF(NBSOUS.EQ.0)NBSOUS=1
  431. NUTOEL=0
  432. DT=1.E30
  433.  
  434.  
  435. DO 1 L=1,NBSOUS
  436. IPT1=MELEME
  437. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  438. SEGACT IPT1
  439.  
  440. IZAFM=LIZAFM(L,1)
  441. IPM1=IZAFM
  442. SEGACT IZAFM
  443. IF(IAXI.NE.0)THEN
  444. IPM1=LIZAFM(L,2)
  445. SEGACT IPM1
  446. ENDIF
  447.  
  448. NP =IPT1.NUM(/1)
  449. NBEL=IPT1.NUM(/2)
  450. IES=IDIM
  451. NINKO=IZTU1.VPOCHA(/2)
  452.  
  453. CALL YCLPLS(AM,IPM1.AM,IPT1.NUM,
  454. & NBEL,NUTOEL,NPTI,NPTS,NINKO,IES,NP,IAXI,IPADI.LECT,IPADS.LECT,
  455. & MZLAM.VPOCHA,IK1,
  456. & IZTU1.VPOCHA,IZGG1.VPOCHA,
  457. & IZVOL.VPOCHA,IZTCO.VPOCHA,NCOT,IZDIAE.VPOCHA,IZTDI.VPOCHA,
  458. & DT,DTT2,NUEL,DIAEL)
  459.  
  460. SEGDES IZAFM,IPT1
  461. IF(IAXI.NE.0)SEGDES IPM1
  462. NUTOEL=NUTOEL+NBEL
  463. 1 CONTINUE
  464. SEGDES MATRIK,IMATRI,MELEME
  465. DTT1=0.
  466.  
  467. CALL LEKTAB(MTAB1,'PASDETPS',MTABT)
  468.  
  469. IF(MTABT.EQ.0)THEN
  470. CALL CRTABL(MTABT)
  471. CALL ECMM(MTABT,'SOUSTYPE','PASDETPS')
  472. CALL ECMO(MTAB1,'PASDETPS','TABLE ',MTABT)
  473. DTP=1.E30+DT
  474. IPAT=1
  475. DTT1=0.
  476. CALL ECME(MTABT,'NUPASDT',IPAT)
  477. ELSE
  478. CALL ACMF(MTABT,'DELTAT',DTP)
  479. ENDIF
  480.  
  481. IF(DT.LT.DTP)THEN
  482. CALL ECMF(MTABT,'DELTAT',DT)
  483. CALL ECMM(MTABT,'OPER','LAPL')
  484. CALL ECMM(MTABT,'ZONE',NOMZ)
  485. CALL ECMF(MTABT,'DTCONV',DTT1)
  486. CALL ECMF(MTABT,'DTDIFU',DTT2)
  487. CALL ECMF(MTABT,'DIAEL',DIAEL)
  488. CALL ECME(MTABT,'NUEL',NUEL)
  489. ENDIF
  490.  
  491. SEGDES IZTU1
  492. SEGDES IZGG1
  493. IF(IK1.EQ.0)THEN
  494. SEGDES MZLAM
  495. ENDIF
  496. SEGDES IZVOL,IZTCO,IZDIAE,IZTDI
  497. SEGDES LINCO
  498.  
  499. NRIGE=7
  500. NKID =9
  501. NKMT =7
  502. NMATRI=0
  503. SEGINI MATRIK
  504. CALL ECROBJ('MATRIK',MATRIK)
  505. CALL ECROBJ('CHPOINT',IZG1)
  506.  
  507. C*************************************************************************
  508. ELSE IF(KFORM.EQ.2)THEN
  509. C CAS FORMULATION VF
  510. CALL LAPLVF(MTABX)
  511. ENDIF
  512. C*************************************************************************
  513.  
  514. C write(6,*)' FIN YLAPL'
  515. 9999 CONTINUE
  516. RETURN
  517. 1001 FORMAT(20(1X,I5))
  518. 1002 FORMAT(10(1X,1PE11.4))
  519. END
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  

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