Télécharger zdudw.eso

Retour à la liste

Numérotation des lignes :

zdudw
  1. C ZDUDW SOURCE CB215821 23/01/25 21:15:41 11573
  2. SUBROUTINE ZDUDW(MTABX,MTAB1)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C
  7. C CET OPERATEUR DISCRETISE L'OPERATEUR DE PENALISATION DIV(U)=EPS*P
  8. C EN 2D SUR LES ELEMENTS QUA4 TRI3 TRI7 et QUA9 PLAN OU AXI
  9. C EN 3D SUR LES ELEMENTS CUB8 ET PRI6
  10. C
  11. C SYNTAXE :
  12. C ---------
  13. C
  14. C DUDW(EPS) INCO UN :
  15. C
  16. C COEFFICIENTS :
  17. C --------------
  18. C
  19. C
  20. C EPS (SCAL DOMA) PARAMETRE DE PENALISATION
  21. C (SCAL ELEM)
  22. C
  23. C INCONNUES :
  24. C -----------
  25. C
  26. C UN CHAMP DE VITESSE
  27. C
  28. C
  29. C OPTIONS : POROSITE DIV(PU)=EPS*P
  30. C SOURCE DIV(U)-Q=EPS*P
  31. C
  32. C************************************************************************
  33.  
  34.  
  35. -INC PPARAM
  36. -INC CCOPTIO
  37. -INC CCGEOME
  38. -INC SMCOORD
  39. -INC SMLENTI
  40. -INC SMELEME
  41. POINTEUR MELEM1.MELEME,MELEMS.MELEME,MELEMI.MELEME,MELEMP.MELEME
  42. POINTEUR MELEMC.MELEME
  43. -INC SMCHPOI
  44. POINTEUR IZGG1.MPOVAL,SRCE.MPOVAL,IZTGG1.MPOVAL
  45.  
  46. -INC SIZFFB
  47. POINTEUR IZF1.IZFFM
  48.  
  49. -INC SMLMOTS
  50. POINTEUR LINCO.MLMOTS
  51. SEGMENT TRAV
  52. REAL*8 AF(NP,NP,NINC,NINC),AS(NP,NINC),CT(MP1,NP,NINC),PQ(MP1)
  53. ENDSEGMENT
  54. CHARACTER*8 TYPE,TYPC
  55. CHARACTER*(LOCOMP) NOM0,NOM1,NOM2,NOM3,NOMZ,NOMI
  56. DIMENSION IXV(3)
  57. PARAMETER (NTB=1)
  58. DIMENSION KTAB(NTB)
  59. C*****************************************************************************
  60. CDUDW
  61. C write(6,*)' Operateur DUDW '
  62.  
  63. C
  64. C- Récupération de la table INCO (pointeur KINC)
  65. C
  66. CALL LEKTAB(MTAB1,'INCO',KINC)
  67. IF(KINC.EQ.0)THEN
  68. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  69. MOTERR( 1: 8) = ' INCO '
  70. MOTERR( 9:16) = ' INCO '
  71. MOTERR(17:24) = ' EQEX '
  72. CALL ERREUR(786)
  73. RETURN
  74. ENDIF
  75.  
  76. C*****************************************************************************
  77. C OPTIONS
  78. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI
  79. C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC
  80. C IDCEN = 0-> rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG
  81.  
  82. IAXI=0
  83. IF(IFOMOD.EQ.0)IAXI=2
  84. C
  85. C- Récupération de la table des options KOPT (pointeur KOPTI)
  86. C
  87. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  88. IF (KOPTI.EQ.0) THEN
  89. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  90. MOTERR( 1: 8) = ' KOPT '
  91. MOTERR( 9:16) = ' KOPT '
  92. MOTERR(17:24) = ' KIZX '
  93. CALL ERREUR(786)
  94. RETURN
  95. ENDIF
  96.  
  97. CALL ACME(KOPTI,'KIMPL',KIMPL)
  98. CALL ACME(KOPTI,'KPOIN',KPRE)
  99. CALL ACME(KOPTI,'KFORM',KFORM)
  100.  
  101. IF(KFORM.NE.0.AND.KFORM.NE.1)THEN
  102. C Option %m1:8 incompatible avec les données
  103. MOTERR( 1: 8) = 'EF/EFM1 '
  104. CALL ERREUR(803)
  105. RETURN
  106. ENDIF
  107.  
  108. C write(6,*)' Apres les options '
  109. C*****************************************************************************
  110. C
  111. C- Récupération de la table DOMAINE associée au domaine local
  112. C
  113. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  114. CALL LEKTAB(MTABX,'DOMZ',MTABZ)
  115. IF(MTABZ.EQ.0)THEN
  116. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  117. MOTERR( 1: 8) = ' DOMZ '
  118. MOTERR( 9:16) = ' DOMZ '
  119. MOTERR(17:24) = ' KIZX '
  120. CALL ERREUR(786)
  121. RETURN
  122. ENDIF
  123.  
  124. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  125. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  126. MACRO1=0
  127. CALL LEKTAB(MTABZ,'MACRO1',MELEMI)
  128. IF(MELEMI.NE.0)MACRO1=1
  129. CALL LEKTAB(MTABZ,'QUADRATI',MQUAD)
  130. IF (IERR.NE.0) RETURN
  131.  
  132. IF(MQUAD.EQ.0.AND.MACRO1.EQ.0.AND.KPRE.NE.2)THEN
  133. WRITE(6,*)'Operateur DUDW '
  134. WRITE(6,*)'Type d''éléments non prévu'
  135. RETURN
  136. ENDIF
  137.  
  138. IF(KPRE.EQ.2)THEN
  139. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  140. MELEMP=MELEMC
  141. MELEMI=MELEME
  142. ELSEIF(KPRE.EQ.3)THEN
  143. CALL LEKTAB(MTABZ,'CENTREP0',MELEMC)
  144. MELEMP=MELEMC
  145. ELSEIF(KPRE.EQ.4)THEN
  146. CALL LEKTAB(MTABZ,'CENTREP1',MELEMC)
  147. CALL LEKTAB(MTABZ,'ELTP1NC ',MELEMP)
  148. ENDIF
  149.  
  150. SEGACT MELEME
  151. SEGACT MELEMP
  152. C*************************************************************************
  153. C VERIFICATIONS SUR LES INCONNUES
  154. C write(6,*)' Verification des inconnues '
  155.  
  156. TYPE='LISTMOTS'
  157. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  158. SEGACT LINCO
  159.  
  160. NBINC=LINCO.MOTS(/2)
  161. IF(NBINC.NE.1)THEN
  162. C Indice %m1:8 : contient plus de %i1 %m9:16
  163. MOTERR( 1:8) = 'LISTINCO'
  164. INTERR(1) = 1
  165. MOTERR(9:16) = ' MOTS '
  166. CALL ERREUR(799)
  167. RETURN
  168. ENDIF
  169.  
  170. NOMI=LINCO.MOTS(1)
  171.  
  172. TYPE=' '
  173. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  174. IF(TYPE.NE.'CHPOINT ')THEN
  175. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  176. MOTERR= 'INC '//NOMI
  177. MOTERR( 9:16) = 'CHPOINT '
  178. CALL ERREUR(800)
  179. RETURN
  180. ELSE
  181. CALL LICHT(MCHPOI,IZTU1,TYPC,MELEM1)
  182. ENDIF
  183.  
  184. C*************************************************************************
  185. C Le domaine de definition est donne par le SPG de la premiere inconnue
  186. C Les inconnues suivantes devront posseder ce meme pointeur
  187. C On verifie que les points de la zone sont tous inclus dans ce SPG
  188.  
  189. CALL KRIPAD(MELEM1,MLENTI)
  190.  
  191. CALL VERPAD(MLENTI,MELEME,IRET)
  192. IF(IRET.NE.0)THEN
  193. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  194. MOTERR= 'INC '//NOMI
  195. MOTERR(9:16) = 'CHPOINT '
  196. CALL ERREUR(788)
  197. RETURN
  198. ENDIF
  199.  
  200. NINC=IDIM
  201.  
  202. MLENT1=MLENTI
  203.  
  204. C*****************************************************************************
  205. C Lecture du ou des coefficients
  206. C write(6,*)' Lecture des coefficients'
  207.  
  208. CALL ACME(MTABX,'IARG',IARG)
  209.  
  210. C? IXV(1)=MELEMC
  211. IXV(1)=0
  212. IXV(2)=1
  213. IXV(3)=0
  214. CALL LEKCOF('Opérateur DUDW :',
  215. & MTABX,KINC,1,IXV,IZTG1,IZTGG1,NPT1,NC1,IK1,IRET)
  216. IF(IRET.EQ.0)RETURN
  217. KITT=2
  218.  
  219. INDGS=0
  220. SRCE=IZTGG1
  221. MPOVA1 =IZTGG1
  222. MPOVA3 =IZTGG1
  223.  
  224. IF(IARG.EQ.2)THEN
  225. IXV(1)=MELEMC
  226. IXV(2)=1
  227. IXV(3)=0
  228. CALL LEKCOF('Opérateur DUDW :',
  229. & MTABX,KINC,2,IXV,IZS,SRCE,NPTS,NCS,IKS,IRET)
  230. IF(IRET.EQ.0)RETURN
  231. INDGS=1
  232. CALL KRIPAD(MELEMC,MLENT1)
  233. ENDIF
  234.  
  235. C*************************************************************************
  236. IF(KFORM.EQ.0)THEN
  237. C CAS FORMULATION EF SI (GRESHO)
  238.  
  239. IF(KIMPL.NE.0)THEN
  240. GO TO 90
  241. ENDIF
  242.  
  243. WRITE(6,*)' Operateur DUDW '
  244. WRITE(6,*)' Cas Formulation EF SI '
  245. WRITE(6,*)' Cas invalide '
  246. GO TO 90
  247.  
  248. C*************************************************************************
  249. ELSE IF(KFORM.EQ.1)THEN
  250. C CAS FORMULATION EF
  251.  
  252. NUTOEL=0
  253.  
  254. SEGACT MELEMI
  255. NBSOUS=MELEMI.LISOUS(/1)
  256. IF(NBSOUS.EQ.0)NBSOUS=1
  257.  
  258. NRIGE=7
  259. NKID =9
  260. NKMT =7
  261. NMATRI=1
  262. SEGINI MATRIK
  263. IRIGEL(1,1)=MELEMI
  264. IRIGEL(2,1)=MELEMI
  265. NBOP=0
  266. NBME=NINC*NINC
  267. C NBME=2
  268. NBELC=0
  269. SEGINI IMATRI
  270. IRIGEL(4,1)=IMATRI
  271. KSPGP=MELEMS
  272. KSPGD=MELEMS
  273.  
  274. IF(NBME.EQ.4)THEN
  275. NOM1='1'//NOMI(1:LOCOMP-1)
  276. NOM2='2'//NOMI(1:LOCOMP-1)
  277. LISPRI(1)=NOM1
  278. LISDUA(1)=NOM1
  279. LISPRI(2)=NOM2
  280. LISDUA(2)=NOM1
  281. LISPRI(3)=NOM1
  282. LISDUA(3)=NOM2
  283. LISPRI(4)=NOM2
  284. LISDUA(4)=NOM2
  285. ELSEIF(NBME.EQ.9)THEN
  286. NOM1='1'//NOMI(1:LOCOMP-1)
  287. NOM2='2'//NOMI(1:LOCOMP-1)
  288. NOM3='3'//NOMI(1:LOCOMP-1)
  289. LISPRI(1)=NOM1
  290. LISDUA(1)=NOM1
  291. LISPRI(2)=NOM2
  292. LISDUA(2)=NOM1
  293. LISPRI(3)=NOM3
  294. LISDUA(3)=NOM1
  295.  
  296. LISPRI(4)=NOM1
  297. LISDUA(4)=NOM2
  298. LISPRI(5)=NOM2
  299. LISDUA(5)=NOM2
  300. LISPRI(6)=NOM3
  301. LISDUA(6)=NOM2
  302.  
  303. LISPRI(7)=NOM1
  304. LISDUA(7)=NOM3
  305. LISPRI(8)=NOM2
  306. LISDUA(8)=NOM3
  307. LISPRI(9)=NOM3
  308. LISDUA(9)=NOM3
  309.  
  310. ELSEIF(NBME.EQ.2)THEN
  311.  
  312. LISPRI(1)='1'//NOMI(1:LOCOMP-1)
  313. LISDUA(1)='1'//NOMI(1:LOCOMP-1)
  314. LISPRI(2)='2'//NOMI(1:LOCOMP-1)
  315. LISDUA(2)='2'//NOMI(1:LOCOMP-1)
  316.  
  317. ELSE
  318. WRITE(6,*)' Operateur DUDW '
  319. WRITE(6,*)' Cas invalide'
  320. GO TO 90
  321. ENDIF
  322.  
  323.  
  324. IF(INDGS.NE.0)THEN
  325. NAT=2
  326. NSOUPO=1
  327. SEGACT MELEMS
  328. N=MELEMS.NUM(/2)
  329. NC=NINC
  330. SEGINI MCHPO1,MSOUP1,MPOVA1
  331. MCHPO1.IFOPOI=IFOUR
  332. MCHPO1.MOCHDE=TITREE
  333. MCHPO1.MTYPOI='SMBR'
  334. MCHPO1.JATTRI(1)=2
  335. MCHPO1.IPCHP(1)=MSOUP1
  336. MSOUP1.NOCOMP(1)=NOM1
  337. MSOUP1.NOCOMP(2)=NOM2
  338. IF(NINC.EQ.3)MSOUP1.NOCOMP(3)=NOM3
  339. MSOUP1.IGEOC=MELEMS
  340. MSOUP1.IPOVAL=MPOVA1
  341.  
  342. SEGACT MELEMC
  343. N=MELEMC.NUM(/2)
  344. NC=1
  345. SEGINI MCHPO3,MSOUP3,MPOVA3
  346. MCHPO3.IFOPOI=IFOUR
  347. MCHPO3.MOCHDE=TITREE
  348. MCHPO3.MTYPOI='SMBR'
  349. MCHPO3.JATTRI(1)=2
  350. MCHPO3.IPCHP(1)=MSOUP3
  351. MSOUP3.NOCOMP(1)='SCAL'
  352. MSOUP3.IGEOC=MELEMC
  353. MSOUP3.IPOVAL=MPOVA3
  354.  
  355. ENDIF
  356.  
  357. DO 101 L=1,NBSOUS
  358. IPT1=MELEMI
  359. IPT2=MELEMI
  360. IF(NBSOUS.NE.1)IPT1=MELEMI.LISOUS(L)
  361. SEGACT IPT1
  362. IF(INDGS.NE.0)THEN
  363. IPT2=MELEMP
  364. IF(NBSOUS.NE.1)IPT2=MELEMP.LISOUS(L)
  365. SEGACT IPT2
  366. ENDIF
  367.  
  368. IF(MQUAD.NE.0)THEN
  369. IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//'PRP0'
  370. IF(KPRE.EQ.3)NOM0=NOMS(IPT1.ITYPEL)//'PRP0'
  371. IF(KPRE.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'PRP1'
  372. ELSEIF(MACRO1.NE.0)THEN
  373. IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//' '
  374. IF(KPRE.EQ.3)NOM0=NOMS(IPT1.ITYPEL)//'MCP0'
  375. IF(KPRE.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'MCP1'
  376. ELSE
  377. IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//' '
  378. ENDIF
  379.  
  380. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  381.  
  382.  
  383. SEGACT IZFFM*MOD
  384. IZHR=KZHR(1)
  385. SEGACT IZHR*MOD
  386. NES=GR(/1)
  387. NPG=GR(/3)
  388. IZF1=KTP(1)
  389. SEGACT IZF1*MOD
  390. MP1=IZF1.FN(/1)
  391. NP = IPT1.NUM(/1)
  392.  
  393. MP = NP
  394. NBEL=IPT1.NUM(/2)
  395. SEGINI IPM1,IPM2,IPM3,IPM4
  396. LIZAFM(L,1)=IPM1
  397. C LIZAFM(L,2)=IPM4
  398. LIZAFM(L,2)=IPM2
  399. LIZAFM(L,3)=IPM3
  400. LIZAFM(L,4)=IPM4
  401. IPM5=IPM1
  402. IPM6=IPM1
  403. IPM7=IPM1
  404. IPM8=IPM1
  405. IPM9=IPM1
  406. IF(NBME.EQ.9)THEN
  407. SEGINI IPM5,IPM6,IPM7,IPM8,IPM9
  408. LIZAFM(L,5)=IPM5
  409. LIZAFM(L,6)=IPM6
  410. LIZAFM(L,7)=IPM7
  411. LIZAFM(L,8)=IPM8
  412. LIZAFM(L,9)=IPM9
  413. ENDIF
  414.  
  415. C Pour l'instant les sources et puits de masse ne sont pas actifs
  416. INDG2=0
  417. KI2=0
  418. KJ2=0
  419.  
  420. SEGINI TRAV
  421.  
  422. NPT=MPOVA1.VPOCHA(/1)
  423. SEGACT,MCOORD
  424. CALL XDUDW(FN,IZF1.FN,GR,PG,XYZ,HR,PGSQ,RPG,AJ,
  425. & NES,IDIM,NP,MP1,NPG,IAXI,NINC,
  426. & IZTGG1.VPOCHA,IK1,SRCE.VPOCHA,INDGS,IKS,
  427. & IPT1.NUM,NBEL,NUTOEL,XCOOR,AF,AS,CT,PQ,
  428. & IPM1.AM,IPM2.AM,IPM3.AM,IPM4.AM,IPM5.AM,IPM6.AM,IPM7.AM,
  429. & IPM8.AM,IPM9.AM,MPOVA1.VPOCHA,NPT,LECT,IPT2.NUM,MLENT1.LECT,
  430. & MPOVA3.VPOCHA)
  431.  
  432. SEGSUP TRAV
  433. SEGDES IPT1
  434. NUTOEL=NUTOEL+NBEL
  435. 101 CONTINUE
  436. SEGDES IMATRI
  437. SEGDES MELEME,MATRIK
  438. IF(IK1.EQ.1)THEN
  439. SEGSUP IZTGG1
  440. ELSE
  441. SEGDES IZTGG1
  442. ENDIF
  443. CALL ECMO(MTABX,'MATELM','MATRIK',MATRIK)
  444.  
  445.  
  446. IF(INDGS.NE.0)THEN
  447.  
  448. TYPE=' '
  449. CALL ACMO(MTAB1,'SMBR',TYPE,MCHPO2)
  450. IF(TYPE.NE.'CHPOINT')THEN
  451. CALL ECMO(MTAB1,'SMBR','CHPOINT',MCHPO1)
  452. ELSE
  453. CALL ECROBJ('CHPOINT',MCHPO2)
  454. CALL ECROBJ('CHPOINT',MCHPO1)
  455. CALL PRFUSE
  456. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  457. CALL ECMO(MTAB1,'SMBR','CHPOINT',MCHPOI)
  458. ENDIF
  459.  
  460. TYPE=' '
  461. C CALL ACMO(MTAB1,'DUDWSRCE',TYPE,MCHPO4)
  462. C IF(TYPE.NE.'CHPOINT')THEN
  463. CALL ECMO(MTAB1,'DUDWSRCE','CHPOINT',MCHPO3)
  464. C ELSE
  465. C CALL ECROBJ('CHPOINT',MCHPO3)
  466. C CALL ECROBJ('CHPOINT',MCHPO4)
  467. C CALL PRFUSE
  468. C CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  469. C CALL ECMO(MTAB1,'DUDWSRCE','CHPOINT',MCHPOI)
  470. C ENDIF
  471.  
  472. ENDIF
  473.  
  474. SEGSUP MLENTI
  475. IF(INDGS.NE.0)SEGSUP MLENT1
  476.  
  477. RETURN
  478. C*************************************************************************
  479. ELSE IF(KFORM.EQ.2)THEN
  480. C CAS FORMULATION VF
  481.  
  482. RETURN
  483. ENDIF
  484. C*************************************************************************
  485. 1002 FORMAT(10(1X,1PE11.4))
  486. 90 CONTINUE
  487. WRITE(6,*)' Interuption anormale de DUDW'
  488. RETURN
  489. END
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  

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