Télécharger caavct.eso

Retour à la liste

Numérotation des lignes :

caavct
  1. C CAAVCT SOURCE CB215821 20/11/25 13:19:00 10792
  2. SUBROUTINE CAAVCT
  3. C************************************************************************
  4. C
  5. C MODIFICATIONS : IZDD -> IZD2 (chgt de diago)
  6. C TEST SUR MTABD
  7. C SIMPLIFICATION DES PARAMETRES DE PF500 (on passe
  8. C MTABD)
  9. C
  10. C************************************************************************
  11. C
  12. C .Rajout de commentaires et de nouveaux messages d'erreurs en utilisant
  13. C la routine ERREUR de K2000 : F.D Juillet 96
  14. C .Correction d'erreurs dans le cas des CHPO Centre : on teste le nom
  15. C des inconnues et on effectue le calcul pour toutes les composantes
  16. C des inconnues : P.G Aout 96
  17. C************************************************************************
  18. IMPLICIT INTEGER(I-N)
  19. IMPLICIT REAL*8 (A-H,O-Z)
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23.  
  24. CHARACTER*8 TYPE,TYPE1,NOM,NOMZ,TYPC,TYP0,TYPINC
  25. CHARACTER*(LOCOMP+1) NOMI1
  26. CHARACTER*(LOCOMP) NOC,KOMP(4),NOMI,NOMIX(10)
  27. C
  28.  
  29. -INC SMLENTI
  30. POINTEUR IZIPAD.MLENTI,MLH.MLENTI
  31. -INC SMCHAML
  32. -INC SMCHPOI
  33. POINTEUR CLIM.MCHPOI
  34. POINTEUR IPHI.MPOVAL,IPHR.MPOVAL,IPHH.MPOVAL
  35. POINTEUR IZD.MCHPOI ,IZD0.MCHPOI ,IZG.MCHPOI ,IZGD.MCHPOI
  36. POINTEUR IZDD.MPOVAL,IZDD0.MPOVAL,IZGG.MPOVAL,IZGDD.MPOVAL
  37. POINTEUR IZD2.MPOVAL,IZSS.MPOVAL,IZS.MCHPOI,IZH.MCHPOI
  38. POINTEUR IZPHI.MCHPOI
  39. -INC SMLMOTS
  40. POINTEUR MINCOG.MLMOTS
  41. -INC SMELEME
  42. POINTEUR MAH.MELEME
  43. POINTEUR MELEMI.MELEME
  44. POINTEUR IGEOM0.MELEME
  45. -INC SMLREEL
  46. -INC SMEVOLL
  47. PARAMETER (NTB=1)
  48. DIMENSION KTAB(NTB)
  49. CHARACTER*8 LTAB(NTB)
  50. DATA KOMP/'UX ','UY ','UZ ','SCAL'/
  51. DATA LTAB /'EQEX '/
  52. C
  53. C- Lecture des tables transmises en arguments
  54. C ------------------------------------------
  55. CALL LITABS(LTAB,KTAB,NTB,1,IRET)
  56. IF (IRET.EQ.0)THEN
  57. WRITE(6,*)' Opérateur AVCT :'
  58. WRITE(6,*)' On attend un ensemble de table soustypes'
  59. RETURN
  60. ENDIF
  61. KIZC = KTAB(1)
  62. C
  63. C- Lecture facultative de la "cfl"
  64. C ------------------------------
  65. CALL LIRREE(ALFA,0,IRET)
  66. IF (IRET.EQ.0) ALFA=1.D0
  67. C
  68. C- Lecture facultative des paramètres pour les impressions de controle
  69. C -------------------------------------------------------------------
  70. CALL LIRCHA(NOM,0,IRET)
  71. IMPR = 0
  72. IF (IRET.EQ.0) THEN
  73. IMPR = 0
  74. ELSEIF (NOM.EQ.'IMPR ') THEN
  75. CALL LIRENT(IMPR,1,IRET)
  76. IF (IRET.EQ.0) RETURN
  77. ENDIF
  78. C
  79. C- Récuperation des pointeurs des tables INCO et EQEX !!
  80. C- BUG dans LITABS puisque EQEX etait facultatif --> à corriger
  81. C
  82. TYPE=' '
  83. CALL ACMO(KIZC,'INCO',TYPE,INCO)
  84. IF(IERR.NE.0) RETURN
  85.  
  86. C
  87. C- Récupération des noms d'inconnues
  88. C ---------------------------------
  89. TYPE = 'LISTMOTS'
  90. CALL ACMO(KIZC,'LISTINCO',TYPE,MLMOT2)
  91. IF (IERR.NE.0) RETURN
  92. SEGACT MLMOT2
  93. NBINC1 = MLMOT2.MOTS(/2)
  94. C
  95. C- Récupérations des pointeurs associés aux tables KIZD et KIZG
  96. C ------------------------------------------------------------
  97. C (contenant la matrice "masse" diagonale et l'"incrément".)
  98. C
  99. TYPE=' '
  100. CALL ACMO(KIZC,'KIZD ',TYPE,KIZD)
  101. TYPE=' '
  102. CALL ACMO(KIZC,'KIZK ',TYPE,KIZK)
  103. TYPE=' '
  104. CALL ACMO(KIZC,'KIZG ',TYPE,KIZG)
  105.  
  106. C
  107. C- Initialisation des données temporelles
  108. C --------------------------------------
  109. CALL ACMF(KIZC,'TFINAL',TFINAL)
  110.  
  111. TYPE=' '
  112. CALL ACMO(KIZC,'PASDETPS',TYPE,MTABT)
  113.  
  114. IF (MTABT.NE.0) THEN
  115. CALL ACMF(MTABT,'DELTAT',DT)
  116. IF (IERR.NE.0) RETURN
  117. CALL ACMF(MTABT,'TPS',TPS)
  118. IF (IERR.NE.0) RETURN
  119. CALL ACME(MTABT,'NUPASDT',IPT)
  120. IF (IERR.NE.0) RETURN
  121. ELSE
  122. DT = 1.D0
  123. TPS = 0.D0
  124. IPT = 1
  125. ENDIF
  126. DT = DT * ALFA
  127.  
  128. IFINAL=0
  129. TPS1 = TPS + DT
  130. C write(6,*)' TPS=',tps,' TFINAL=',tfinal,' DT=',dt
  131. IF(TPS.GT.TFINAL)THEN
  132. IFINAL=1
  133. GO TO 800
  134. ELSEIF(TPS1.GT.TFINAL)THEN
  135. DT=TFINAL-TPS
  136. IFINAL=1
  137. ENDIF
  138. TPS = TPS + DT
  139. C
  140. C- Récupération des pointeurs associés aux tables KIZG1 et KIZS
  141. C ------------------------------------------------------------
  142. C
  143. TYPE=' '
  144. CALL ACMO(KIZC,'KIZG1 ',TYPE,KIZG1)
  145. TYPE=' '
  146. CALL ACMO(KIZC,'KIZS ',TYPE,KIZS)
  147. C
  148. C==============================================================
  149. C Boucle principale : Traitement de chaque inconnue de LISTINCO
  150. C==============================================================
  151. C
  152. DO 1 L=1,NBINC1
  153. C
  154. C- NOMI est l'identifiant de l'inconnue dans chaque table
  155. C
  156. NOMI = MLMOT2.MOTS(L)
  157. C
  158. C- Activation du MPOVAL de l'inconnue au temps précédant
  159. C -----------------------------------------------------
  160. TYPE = 'CHPOINT '
  161. CALL ACMO(INCO,NOMI,TYPE,IZPHI)
  162. IF (IERR.NE.0) RETURN
  163. CALL LICHT(IZPHI,IPHI,TYP0,IGEOM0)
  164. NPT = IPHI.VPOCHA(/1)
  165. NC = IPHI.VPOCHA(/2)
  166. C
  167. C- Activation du terme source éventuel associé à l'inconnue NOMI
  168. C -------------------------------------------------------------
  169. IZSS = 0
  170. IGEOMS = 0
  171. IF (KIZS.NE.0) THEN
  172. TYPE = 'CHPOINT '
  173. CALL ACMO(KIZS,NOMI,TYPE,IZS)
  174. IF (IERR.NE.0) RETURN
  175. CALL LICHT(IZS,IZSS,TYP0,IGEOMS)
  176. IF (IGEOMS.NE.IGEOM0) THEN
  177. MOTERR(1: 8) = NOMI(1:4)//'KIZS'
  178. MOTERR(9:16) = NOMI(1:4)//'INCO'
  179. INTERR(1) = 1
  180. CALL ERREUR(698)
  181. RETURN
  182. ENDIF
  183. ENDIF
  184. C
  185. C- Identification du MPOVAL de l'inconnue au nouveau pas de temps
  186. C --------------------------------------------------------------
  187. C (pour écrasement éventuel des valeurs du pas précédant)
  188. C
  189. IPHR = IPHI
  190. C
  191. C- Correspondance entre numérotation globale et locale
  192. C ---------------------------------------------------
  193. CALL KRIPAD(IGEOM0,IZIPAD)
  194. SEGACT IGEOM0
  195. C
  196. C- Cas ou il y a des matrices masses non diagonales
  197. C ------------------------------------------------
  198. IF(KIZK.NE.0)THEN
  199. TYPE=' '
  200. MATRIK=KIZK
  201. SEGACT MATRIK
  202. NBK=IRIGEL(/2)
  203. DO 411 K=1,NBK
  204.  
  205. IMATRI=IRIGEL(4,K)
  206. SEGACT IMATRI
  207. NBME=LISPRI(/2)
  208. WRITE(6,*)' INCO : ',(LISPRI(ii),ii=1,nbme)
  209. 411 CONTINUE
  210. ENDIF
  211. C
  212. C- Cas où les tables KIZD et KIZG sont données
  213. C -------------------------------------------
  214. IF (KIZD.NE.0.AND.KIZG.NE.0) THEN
  215. C
  216. C- Recherche de la matrice "masse" diagonale associée à l'inconnue NOMI
  217. C --------------------------------------------------------------------
  218. TYPE = ' '
  219. CALL ACMO(KIZD,NOMI,TYPE,IZD)
  220. IF (TYPE.NE.'CHPOINT ') THEN
  221. WRITE(6,*)'pas de matrice diagonale pour ',NOMI
  222. GOTO 1
  223. ENDIF
  224. CALL LICHT(IZD,IZDD,TYPC,IGEOM)
  225. C
  226. C- Recherche de l'"incrément" associé à l'inconnue NOMI
  227. C ----------------------------------------------------
  228. TYPE = ' '
  229. CALL ACMO(KIZG,NOMI,TYPE,IZG)
  230. IF (TYPE.NE.'CHPOINT ') THEN
  231. GOTO 1
  232. ENDIF
  233. CALL LICHT(IZG,IZGG,TYPC,IGEOM)
  234. C
  235. C- Imposition des conditions aux limites sur l'"incrément"
  236. C ------------------------------------------------------
  237. TYPE=' '
  238. CALL ACMO(KIZC,'KIZI ',TYPE,KIZI)
  239. IF (KIZI.NE.0) THEN
  240. DO 211 I=1,NC
  241. NOC = KOMP(I)
  242. IF (NC.EQ.1) NOC=KOMP(4)
  243. TYPE = ' '
  244. CALL ACMO(KIZI,NOMI,TYPE,MCHPOI)
  245. IF (TYPE.EQ.'CHPOINT') THEN
  246. CALL LACHT(MCHPOI,MPOVAL,NOC,MELEMI)
  247. IF (MPOVAL.NE.0) THEN
  248. SEGACT MELEMI
  249. LONG = MELEMI.NUM(/2)
  250. CALL RSETX2(IZGG.VPOCHA(1,I),MELEMI.NUM,
  251. & LONG,VPOCHA,IZIPAD.LECT)
  252. SEGDES MELEMI,MPOVAL
  253. ENDIF
  254. ENDIF
  255. 211 CONTINUE
  256. ENDIF
  257. C
  258. C- Calcul de l'inconnue au nouveau pas de temps
  259. C --------------------------------------------
  260. C- En EF
  261. C- En VF
  262. C
  263. DO 11 I=1,NC
  264. C
  265. C -------------------- Cas de des inconnues situées au Centre
  266. C --------------------------------------
  267. IF (TYPC.EQ.'FACE') THEN
  268. TYPE=' '
  269. CALL ACMO(KIZC,'DOMAINE',TYPE,MTABD)
  270. IF (MTABD.EQ.0) THEN
  271. MOTERR(1: 8) = 'TABLE '
  272. MOTERR(9:16) = 'DOMAINE '
  273. CALL ERREUR(79)
  274. RETURN
  275. ENDIF
  276. TYPE = 'CHPOINT '
  277. cccc CALL ACMO(KIZD,'DIAC0',TYPE,MCHPO4)
  278. CALL ACMO(KIZD,NOMI,TYPE,MCHPO4)
  279. IF (IERR.NE.0) RETURN
  280. CALL LICHT(MCHPO4,IZD2,TYPINC,IGEOM2)
  281. CALL PF500(IZD2,IPHI,IZSS,IZGG,IPHR,DT,MTABD,I)
  282. C
  283. if(I .EQ. NC) SEGDES MCHPO4,IZD2
  284. C
  285. C -------------------- Cas de des inconnues situées au Sommet
  286. C --------------------------------------
  287. ELSEIF (TYPC.EQ.'SOMMET') THEN
  288. IF (KIZG1.EQ.0) THEN
  289. LONG=IZDD.VPOCHA(/1)
  290. CALL P500(IZDD.VPOCHA(1,I),IPHI.VPOCHA(1,I),
  291. & IZGG.VPOCHA(1,I),IPHR.VPOCHA(1,I),LONG,DT)
  292. ELSE
  293. TYPE = ' '
  294. CALL ACMO(KIZG1,NOMI,TYPE,IZGD)
  295. IF (TYPE.NE.'CHPOINT ') THEN
  296. LONG = IZDD.VPOCHA(/1)
  297. CALL P500(IZDD.VPOCHA(1,I),IPHI.VPOCHA(1,I),
  298. & IZGG.VPOCHA(1,I),IPHR.VPOCHA(1,I),LONG,DT)
  299. ELSE
  300. CALL LICHT(IZGD,IZGDD,TYPC,IGEOM)
  301. LONG=IZDD.VPOCHA(/1)
  302. CALL P501(IZDD.VPOCHA(1,I),IPHI.VPOCHA(1,I),
  303. & IZGG.VPOCHA(1,I),IPHR.VPOCHA(1,I),
  304. & LONG,DT,IZGDD.VPOCHA(1,I))
  305. ENDIF
  306. ENDIF
  307. ENDIF
  308. 11 CONTINUE
  309. C
  310. C- Imposition des conditions aux limites
  311. C -------------------------------------
  312. TYPE = ' '
  313. CALL ACMO(KIZC,'CLIM',TYPE,MCHPOI)
  314. IF (TYPE.EQ.'CHPOINT')THEN
  315. DO 111 I=1,NC
  316. IF (NC.EQ.1) THEN
  317. NOC=NOMI
  318. ELSE
  319. WRITE(NOC,FMT='(I1)')I
  320. NOC=NOC(1:1)//NOMI(1:LOCOMP-1)
  321. ENDIF
  322. SEGACT MCHPOI
  323. NSOUPO = IPCHP(/1)
  324. DO 10111 NSP=1,NSOUPO
  325. MSOUPO = IPCHP(NSP)
  326. SEGACT MSOUPO
  327. NCOMP = NOCOMP(/2)
  328. DO 10112 NCP=1,NCOMP
  329. IF (NOCOMP(NCP).EQ.NOC) THEN
  330. MELEMI = IGEOC
  331. MPOVAL = IPOVAL
  332. SEGACT MELEMI,MPOVAL
  333. LONG = MELEMI.NUM(/2)
  334. CALL RSETX2(IPHR.VPOCHA(1,I),MELEMI.NUM,
  335. & LONG,VPOCHA(1,NCP),IZIPAD.LECT)
  336. SEGDES MELEMI,MPOVAL
  337. ENDIF
  338. 10112 CONTINUE
  339. SEGDES MSOUPO
  340. 10111 CONTINUE
  341. SEGDES MCHPOI
  342. 111 CONTINUE
  343. ENDIF
  344. C
  345. C- Mise à zero de l'ensemble des données et ménage
  346. C -----------------------------------------------
  347. LONG = IZGG.VPOCHA(/1)*IZGG.VPOCHA(/2)
  348. CALL INITD(IZGG.VPOCHA,LONG,0.D0)
  349. SEGDES IZG,IZGG
  350. SEGDES IZD,IZDD
  351. IF (KIZG1.NE.0.AND.IZGD.NE.0) THEN
  352. CALL INITD(IZGDD.VPOCHA,LONG,0.D0)
  353. SEGDES IZGD,IZGDD
  354. ENDIF
  355. IF (KIZS.NE.0.AND.IZSS.NE.0) THEN
  356. CALL INITD(IZSS.VPOCHA,LONG,0.D0)
  357. ENDIF
  358. C --------------------------------------------------
  359. C- Fin du cas ou les tables KIZD et KIZG sont données
  360. C --------------------------------------------------
  361. ENDIF
  362. C
  363. C- Traitement des historiques
  364. C --------------------------
  365. IF (MTABT.NE.0) THEN
  366. TYPE=' '
  367. CALL ACMO(KIZC,'HIST',TYPE,KHIS)
  368. IF (KHIS.NE.0)THEN
  369. NUCOMP = IPHR.VPOCHA(/2)
  370. NOMIX(1) = NOMI
  371. NOMIX(2) = '1'//NOMI(1:LOCOMP-1)
  372. NOMIX(3) = '2'//NOMI(1:LOCOMP-1)
  373. NOMIX(4) = '3'//NOMI(1:LOCOMP-1)
  374. DO 82 NUC=1,NUCOMP+1
  375. NUCR = 1
  376. IF (NUC.GT.1) NUCR=NUC-1
  377. TYPE = ' '
  378. CALL ACMO(KHIS,NOMIX(NUC),TYPE,MEVOLL)
  379. IF (TYPE.EQ.'EVOLUTIO')THEN
  380. TYPE1=' '
  381. NOMI1='$'//NOMIX(NUC)(1:LOCOMP-1)
  382. CALL ACMO(KHIS,NOMI1,TYPE1,MAH)
  383. IF (TYPE1.EQ.'MAILLAGE') THEN
  384. SEGACT MAH
  385. ENDIF
  386. CALL ECROBJ('CHPOINT',IZPHI)
  387. CALL ECROBJ('MAILLAGE',MAH)
  388. CALL REDU
  389. CALL LIROBJ('CHPOINT',IZH,1,IRET)
  390. CALL LICHT(IZH,IPHH,TYPC,IGEOM)
  391. TYPE1=' '
  392. CALL ACMO(KHIS,'KFIH',TYPE1,KFIH)
  393. IF (TYPE1.EQ.'ENTIER') THEN
  394. CALL ACME(KHIS,'KFIH',KFIH)
  395. ELSE
  396. KFIH = 20
  397. ENDIF
  398. INDH = IPT - IPT/KFIH * KFIH
  399. IF (INDH.NE.0) GOTO 80
  400.  
  401. SEGACT MEVOLL
  402. NH=IEVOLL(/1)
  403. DO 81 IH=1,NH
  404. KEVOLL=IEVOLL(IH)
  405. SEGACT KEVOLL
  406. MLREE1=IPROGX
  407. IF (IH.EQ.1)THEN
  408. SEGACT MLREE1
  409. JG=MLREE1.PROG(/1)+1
  410. SEGADJ MLREE1
  411. MLREE1.PROG(JG)=TPS
  412. SEGDES MLREE1
  413. ENDIF
  414.  
  415. MLREE2=IPROGY
  416. SEGACT MLREE2
  417. SEGADJ MLREE2
  418. if(ih.le.iphh.vpocha(/1)) then
  419. MLREE2.PROG(JG)=IPHH.VPOCHA(IH,NUCR)
  420. else
  421. MLREE2.PROG(JG)=0
  422. endif
  423. SEGDES MLREE2,KEVOLL
  424. 81 CONTINUE
  425. SEGDES MEVOLL
  426. 80 CONTINUE
  427. SEGDES MAH
  428. ENDIF
  429. 82 CONTINUE
  430. ENDIF
  431. ELSE
  432. WRITE(6,*)' Pour des historiques il faut une table PASDETPS'
  433. ENDIF
  434. C
  435. SEGDES IPHI,IPHR
  436. SEGDES IGEOM0
  437. SEGSUP IZIPAD
  438. 1 CONTINUE
  439. C
  440. SEGDES MLMOT2
  441. C
  442. C- Impressions de controle
  443. C -----------------------
  444. IF (IMPR.NE.0) THEN
  445. KFIDT = IMPR
  446. IF (MTABT.NE.0) THEN
  447. CALL ACMM(MTABT,'OPER',NOMI)
  448. CALL ACMM(MTABT,'ZONE',NOMZ)
  449. CALL ACMF(MTABT,'DTCONV',DTT1)
  450. CALL ACMF(MTABT,'DTDIFU',DTT2)
  451. CALL ACMF(MTABT,'DIAEL',DIAEL)
  452. CALL ACME(MTABT,'NUEL',NUEL)
  453. CALL ACME(MTABT,'NUPASDT',IPT)
  454. ELSE
  455. IPT=1
  456. ENDIF
  457. IND = IPT - IPT/KFIDT * KFIDT
  458.  
  459. IF (IPT.EQ.1) THEN
  460. WRITE(6,*)
  461. & ' IPT : NUMERO DU PAS DE TEMPS , NUEL : NUMERO DE L ELEMENT , '
  462. &,' DIAEL : DIAMETRE MOYEN DE L ELEMENT '
  463. WRITE(6,*)
  464. &' ALFA : TOLERANCE SUR LE PAS DE TEMPS , DTMAX : PAS DE TEMPS MAX'
  465. &,' DTT1 : PAS DE TEMPS DE CONVECTION , DTT2 PAS DE TEMPS DE'
  466. &,' DIFFUSION'
  467. ENDIF
  468. IF (IND.EQ.0)THEN
  469. WRITE(6,1011)NOMZ,NOMI
  470. WRITE(6,1010)IPT,NUEL,DIAEL,ALFA,DT,DTT1,DTT2
  471. ENDIF
  472. ENDIF
  473. C
  474. C- Mise à jour de la table PASDETPS
  475. C --------------------------------
  476. 800 CONTINUE
  477. IF (KIZD.NE.0.AND.KIZG.NE.0) THEN
  478. IF (MTABT.NE.0) THEN
  479. CALL ECMF(MTABT,'DELTAT-1',DT)
  480. CALL ECMF(MTABT,'TPS',TPS)
  481. DT=1.E30
  482. CALL ECMF(MTABT,'DELTAT',DT)
  483. IPT = IPT + 1
  484. CALL ECME(MTABT,'NUPASDT',IPT)
  485. ENDIF
  486. ENDIF
  487.  
  488. CALL ECRENT(IFINAL)
  489.  
  490. RETURN
  491. C
  492. C- Formats associés aux impression de controle
  493. C -------------------------------------------
  494. 1010 FORMAT(2X,'N.DT',I5,' NU.EL',I5,' DIAEL=',1PE11.4,' ALFA=',
  495. & 1PE11.4,' DTMAX=',1PE11.4,
  496. & ' DT1=',1PE11.4,' DT2=',1PE11.4)
  497. 1011 FORMAT(2X,' ZONE :',A8,' OPERATEUR :',A8)
  498. END
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  

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