Télécharger pasapas.procedur

Retour à la liste

Numérotation des lignes :

  1. * PASAPAS PROCEDUR MB234859 24/02/26 21:15:03 11849
  2.  
  3. 'DEBP' PASAPAS PRECED*'TABLE';
  4. 'SAUT' 1 'LIGNE';
  5. '------------------ DEBUT DE LA PROCEDURE PASAPAS --------------------';
  6. ************************************************************************
  7. * *
  8. * PRECED objet de type TABLE *
  9. * C'est une table donnant , les arguments d'entrees, les *
  10. * options, puis les resultats des pas precedents *
  11. * *
  12. * Etat initial au debut du pas de temps decrit par le MCHELM WTAB.ETAT1*
  13. * champs de materiaux : *
  14. * WTAB.'MAT_REF' materiau etat a la temperature de REFERENCE *
  15. * WTAB.'MAT0' materiau etat debut de calcul *
  16. * WTAB.'MAT1' materiau fin du pas de temps *
  17. * *
  18. ************************************************************************
  19.  
  20. **************** I PARTIE ******************************************
  21. * Verifications des infos transmises et valeurs par defaut
  22. PAS_DEFA PRECED ;
  23. * Creation des tables de sortie et initialisations
  24. PAS_INIT PRECED ;
  25.  
  26. WTAB = PRECED.'WTABLE' ;
  27. conti = PRECED.'CONTINUATION';
  28. estim = PRECED.'ESTIMATION' ;
  29. *-----------------------------------------------------------------------
  30. * Appel aux procedures utilisateurs
  31. *-----------------------------------------------------------------------
  32. 'SI' WTAB.'PROCEDURE_PERSO1';
  33. PRECED.'PERSO1_APPEL' = 1 ;
  34. PERSO1 PRECED ;
  35. 'SI' ('EXIS' PRECED 'ARRET') ;
  36. WTAB.'ARRET' = PRECED.'ARRET' ;
  37. 'FINSI' ;
  38. 'FINSI';
  39. *
  40. 'SI' WTAB.'PROCEDURE_REEV_MEC' ;
  41. REEV_MEC PRECED 0 ;
  42. 'FINSI' ;
  43. *
  44. 'SI' WTAB.'PROCEDURE_REEV_THE' ;
  45. REEV_THE PRECED 0 ;
  46. 'FINSI' ;
  47. *-----------------------------------------------------------------------
  48. * Initialisation ETAT et MATERIAUX
  49. *-----------------------------------------------------------------------
  50. WTAB.'ETAT0' = PAS_ETAT PRECED WTAB.'TEMPS0' ;
  51. WTAB.'ETAT1' = WTAB.'ETAT0' ;
  52. WTAB.'MAT0' = PAS_MATE PRECED WTAB.'ETAT0' ;
  53. WTAB.'MAT1' = WTAB.'MAT0' ;
  54. *
  55. *--------- initialisation deformation thermique de reference
  56. 'SI' WTAB.'FOR_MECA' ;
  57. 'SI' WTAB.'ITHER' ;
  58. 'SI' ('EGA' WTAB.'ETREF' 'INCONNU');
  59. WTAB.'ETAT_REF'= PAS_ETAT PRECED WTAB.'TEMPS0' 'REFERENCE';
  60. WTAB.'MAT_REF' = PAS_MATE PRECED WTAB.'ETAT_REF' ;
  61. WTAB.'ETREF' ='EPTH' WTAB.'MO_TOT' WTAB.'MAT_REF' WTAB.'TEMPERATURE_REFERENCE' ;
  62. 'FINS' ;
  63. *
  64. 'SI' ('EGA' ('TYPE' WTAB.'TET1') 'CHPOINT');
  65. TET1 ='CHAN' 'CHAM' WTAB.'TET1' WTAB.'MO_TOT' 'STRESSES' 'TEMPERATURES' ;
  66. 'FINS';
  67. ETT0 = 'EPTH' WTAB.'MO_TOT' WTAB.'MAT0' TET1 ;
  68. WTAB.'ETHER1' = ETT0 - WTAB.'ETREF' ;
  69. *
  70. 'SI' WTAB.'POR1';
  71. WTAB.'MSRTHER1'= PAS_EPTH PRECED WTAB.'MO_TOT' WTAB.'MAT0' TET1 ;
  72. 'FINS' ;
  73. 'FINS' ;
  74. 'FINS' ;
  75.  
  76. ************************** II PARTIE *************************
  77. ******************************************************************
  78. ******************* boucle sur les pas de temps *****************
  79. ******************************************************************
  80. * ------------quelques initialisations de l'algorithme
  81. PASFINAL = 0 ;
  82. IPAS = 0 ;
  83. IAUTO = 1 ;
  84. IREREDU = VRAI;
  85. TEMP0 = WTAB.'TEMPS0';
  86. ISAUV = VRAI;
  87. DTV = ('EXTR' WTAB.'TEMPS_CALCULES' 1) - TEMP0 ;
  88. 'SI' ( DTV '<' 1.e-15 );
  89. 'SI' WTAB.'FREQUENTIEL' ;
  90. DTV = 1.e-14 ;
  91. 'SINON' ;
  92. DTV =('EXTR' WTAB.'TEMPS_CALCULES' 2) - TEMP0 ;
  93. 'FINSI';
  94. 'FINSI';
  95. DT_AVANT = DTV ;
  96. *-----------------------------------------------------------------------
  97. * Debut de la boucle sur les pas de temps
  98. *-----------------------------------------------------------------------
  99. 'REPETER' BEXTERN ;
  100. *
  101. * ----- Determiner le nouvel instant a calculer TI
  102. *
  103. NPAS='DIME' WTAB.'TEMPS_CALCULES';
  104. ICHG = WTAB.'ICHG'; ICHG=ICHG + 1; WTAB.'ICHG'= ICHG;
  105. 'SI' ( ICHG '>' NPAS) ; 'QUITTER' BEXTERN; 'FINSI';
  106. TI = 'EXTRAIRE' WTAB.'TEMPS_CALCULES' ICHG ;
  107. TIV=TI;
  108. 'SI' WTAB.'FREQUENTIEL' ;
  109. 'SI' (TI '<' TEMP0 ) ; 'ITERER' BEXTERN ; 'FINSI' ;
  110. 'SINON' ;
  111. ITERTPS = (TI '<' TEMP0 ) 'OU' (TI 'EGA' PRECED.'TEMPS'. 0) ;
  112. 'SI' ('NON' WTAB.'REEQUILIBRAGE') ;
  113. ITERTPS = ITERTPS 'OU' ('EGA' TI TEMP0) ;
  114. 'FINSI';
  115. 'SI' ITERTPS ;
  116. 'ITERER' BEXTERN ;
  117. 'FINSI';
  118. 'FINSI';
  119. *
  120. * ----- Ajustement du pas en fonction du nb d iteration du pas precedent
  121. *
  122. PASFINAL=PASFINAL+1;
  123. 'SI' WTAB.'PAS_AJUSTE';
  124. DTV=DT_AVANT;
  125. 'SI' WTAB.'CONV';
  126. 'SI' (WTAB.'NOMBRE_ITERATIONS' > 20);
  127. DTV=DTV'/' (2. ** 0.5);
  128. 'FINSI';
  129. 'SI' (WTAB.'NOMBRE_ITERATIONS' < 7);
  130. 'SI' IREREDU;
  131. DTV=DTV '*' (2. ** 0.5);
  132. 'FINSI';
  133. 'FINSI';
  134. DT_AVANT= DTV;
  135. IREREDU=VRAI;
  136. 'SINON';
  137. DTV=0.0000000001D0* DT_AVANT;
  138. DT_AVANT= DT_AVANT /2.;
  139. IREREDU=FAUX;
  140. 'FINSI';
  141. TTI = DTV* 1.0000000001 + TEMP0;
  142. 'SI' ( TTI '&lt;EG' TIV );
  143. TI=TTI;
  144. PASFINAL=0;
  145. 'FINSI';
  146. 'FINSI';
  147. *
  148. estim.'TEMPS'=TI;
  149. 'SI' (PASFINAL '>EG' 1.5) ; DT_AVANT= TI-TEMP0; 'FINSI';
  150. WTAB.'T_FINAL' = TI;
  151. WTAB.'DT_INIT' = TI-TEMP0;
  152. 'SI'((WTAB.'CONSOLIDATION' 'OU' WTAB.'DYNAMIQUE')
  153. 'ET' (WTAB.'DT_INIT' 'EGA' 0.));
  154. 'ITERER' BEXTERN;
  155. 'FINSI';
  156. WTAB.'DT'= WTAB.'DT_INIT';
  157. *
  158. * ----- Compteur IPAS des pas de temps calcules
  159. IPAS = IPAS + 1;
  160. WTAB.'PAS'=IPAS;
  161.  
  162. * ----- Mise a jour du modele si chargement de type MODE :
  163. 'SI' WTAB.'CHAR_MODE' ;
  164. MOD1P = WTAB.'MODELE' ;
  165. MODEVOL1 = 'TIRE' PRECED.'MODELE' 'MODE' TI ;
  166. WTAB.'MODELE' = MODEVOL1 ;
  167.  
  168. 'SI' WTAB.'CHAR_MATE' ;
  169. MATEVOL1 = 'TIRE' PRECED.'CARACTERISTIQUES' 'MATE' TI ;
  170. WTAB.'CARACTERISTIQUES' = MATEVOL1 ;
  171. 'FINSI' ;
  172.  
  173. PAS_MODL PRECED ;
  174.  
  175. * MaJ table rayonnement :
  176. 'SI' WTAB.'RAYO' ;
  177. WTAB.'RAYONNEMENT' = 'PRRA' WTAB.'MOD_RAY' ;
  178. 'FINSI' ;
  179.  
  180. * On sauvegarde les modeles successifs pour analyse resultats :
  181. ESTIM.'MODELES' = WTAB.'MODELE' ;
  182.  
  183. * Initialisation TINI si thermique :
  184. 'SI' WTAB.'THE1' ;
  185. MODX = WTAB.'MOD_COND' ;
  186. MODXP = MOD1P 'EXTR' 'MATE' 'CONDUCTION' ;
  187. GEO1 = MODX 'EXTR' 'MAIL' ;
  188. GEO1P = MODXP 'EXTR' 'MAIL' ;
  189. DGEO1 = GEO1 'DIFF' GEO1P ;
  190.  
  191. * Adapation du modele : transport de la solution
  192. 'SI' ((WTAB.'ADAP_MODE') 'ET' ('NON' (TI '<' (WTAB.'TPS1_ADAP')))) ;
  193. mess '***** Transport solution adaptation' ;
  194. IADAP1 = (WTAB.'INDI_ADAP') + 1 ;
  195. 'SI' (IADAP1 '&lt;EG' ('DIME' (WTAB.'LTPS_ADAP'))) ;
  196. WTAB.'TPS1_ADAP' = WTAB.'LTPS_ADAP' 'EXTR' IADAP1 ;
  197. WTAB.'INDI_ADAP' = IADAP1 ;
  198. 'SINON' ;
  199. WTAB.'TPS1_ADAP' = 'MAXI' WTAB.'TEMPS_CALCULES' + 1. ;
  200. 'FINSI' ;
  201. *erre 21 ;
  202. * Projection du champ de temperature sur la partie adaptee :
  203. DGEO1P = DGEO1 'INTE' GEO1P ;
  204. DGEO2P = (DGEO1 'INTE' GEO1) 'INCLU' DGEO1P 'VOLU' 'BARY' ;
  205. CHT1P = (WTAB.'TET1') 'EXCO' 'T' 'T' ;
  206. CHAMT1P = 'CHAN' 'CHAM' DGEO1P CHT1P ;
  207. CHT2P = 'PROI' CHAMT1P DGEO2P ;
  208. CHT1P = ('REDU' CHT1P (GEO1P 'DIFF' DGEO1P)) 'ET' CHT2P ;
  209. WTAB.'TET1' = CHT1P ;
  210.  
  211. * Calcul de la capacite courante sur la partie adaptee :
  212. DMODX = 'REDU' MODX DGEO2P ;
  213. DMATX = 'REDU' (WTAB.'CARACTERISTIQUES') DMODX ;
  214. DMATX = 'VARI' 'NUAG' DMODX DMATX CHT2P ;
  215. CAPAX = 'CAPA' DMODX DMATX ;
  216. CAPA1P = ('REDU' (WTAB.'CAPA_COURANTE') (GEO1P 'DIFF' DGEO1P)) 'ET' CAPAX ;
  217. WTAB.'CAPA_COURANTE' = CAPA1P ;
  218.  
  219. DGEO1 = (DGEO1 'INTE' GEO1) 'DIFF' DGEO2P ;
  220. 'FINSI' ;
  221.  
  222. * Calcul temperature dans partie ajoutee du modele :
  223. 'SI' ('NON' (('VIDE' DGEO1) 'OU' ('VIDE' (DGEO1 'INTE' GEO1)))) ;
  224. * Quantite de chaleur sur geometrie GEO1P :
  225. CHT1P = (WTAB.'TET1') 'EXCO' 'T' 'T' ;
  226. CHQ1P = (WTAB.'CAPA_COURANTE' lump) * CHT1P ;
  227. * Quantite de chaleur dans ajout :
  228. DMODX = 'REDU' MODX DGEO1 ;
  229. DMATX = 'REDU' (WTAB.'CARACTERISTIQUES') DMODX ;
  230. CHTINIX = DMATX 'EXCO' 'TINI' 'T' ;
  231. CHTINIX = 'CHAN' 'CHPO' CHTINIX DMODX 'MOYE' ;
  232. DMATX = 'VARI' 'NUAG' DMODX DMATX CHTINIX ;
  233. CAPAX = 'CAPA' DMODX DMATX ;
  234. CHQX = (CAPAX lump) * CHTINIX ;
  235. * Calcul T sur GEO1 :
  236. CAPA1 = (WTAB.'CAPA_COURANTE') et CAPAX ;
  237. CHTX1 = 'MANU' 'CHPO' GEO1 1 'T' 1. 'NATURE' 'DIFFUS' ;
  238. CHQX1 = CAPA1 * CHTX1;
  239. CHT1 = (CHQ1P + CHQX) * ('INVE' CHQX1) ('MOTS' 'Q') ('MOTS' 'Q') ('MOTS' 'T') ;
  240. * CHT2 = reso (lump CAPA1) (CHQ1P + CHQX) ; mess '############ avec RESO' ;
  241. *si (ipas > 10) ; erre 21 ; fins ;
  242. WTAB.'TET1' = CHT1 ;
  243. *List ((resu (CHQ1P + CHQX)) maxi abs) ;
  244. *List ((resu (CAPA1*CHT1)) maxi abs) ;
  245. *trac CHT1 GEO1 ;
  246. 'FINSI' ;
  247. 'FINSI' ;
  248.  
  249. * Initialisation PROPORTIONS_PHASES si metallurgie :
  250. 'SI' WTAB.'FOR_METALLU' ;
  251. MODX = WTAB.'MODELE' 'EXTR' 'FORM' 'METALLURGIE' ;
  252. MODXP = MOD1P 'EXTR' 'FORM' 'METALLURGIE' ;
  253. GEO1 = MODX 'EXTR' 'MAIL' ;
  254. GEO1P = MODXP 'EXTR' 'MAIL' ;
  255. DGEO1 = GEO1 'DIFF' GEO1P ;
  256. 'SI' ('NON' (('VIDE' DGEO1) 'OU' ('VIDE' (DGEO1 'INTE' GEO1)))) ;
  257. CHMET0 = ESTIM.'PROPORTIONS_PHASES' ;
  258. DMODX = 'REDU' MODX DGEO1 ;
  259. CHMET1 = 'ZERO' DMODX 'VARINTER' ;
  260. LISCO = 'EXTR' DMODX 'VARI' ;
  261. CMP1 = 'EXCO' CHMET1 ('EXTR' LISCO 1) ('EXTR' LISCO 1) ;
  262. CHMET1 = CHMET1 + (CMP1 + 1.D0);
  263. CHMET1 = CHMET0 'ET' CHMET1 ;
  264. ESTIM.'PROPORTIONS_PHASES' = CHMET1 'REDU' MODX ;
  265. *trac CHMET1 MODX ;
  266. 'FINSI' ;
  267. 'FINS' ;
  268. 'FINSI' ;
  269. *
  270. * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  271. * +++++++++++++++++ BOUCLE interne de bouclage mec_ther ++++++++++++++++
  272. * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  273. I_BOTH = 0 ;
  274. 'REPETER' BO_BOTH WTAB.'BOU_METH' ;
  275. I_BOTH = I_BOTH + 1 ;
  276. *
  277. * Re-initialisation de WTAB.'CHARGEMENT' en tete de boucle mec-ther
  278. 'SI' WTAB.'CONVERGENCE_MEC_THE' ;
  279. WTAB.'CHARGEMENT' = WTAB.'CHARGEMENT_I' ;
  280. 'FINSI';
  281. *
  282. * ####################################################################
  283. * ########### RESOLUTION D'UN PAS SI THERMIQUE/DIFFUSION #############
  284. * ####################################################################
  285. 'SI' (WTAB.'FOR_THER' 'OU' WTAB.'FOR_DIFF') ;
  286. *
  287. * Se placer dans la configuration adequate
  288. 'SI' WTAB.'FOR_MECA' ;
  289. 'SI' (I_BOTH > 1) ;
  290. 'SI' WTAB.'GRANDS_DEPLACEMENTS' ;
  291. WTAB.'RECARI' = VRAI ;
  292. WTAB.'RECADET' = VRAI ;
  293. WTAB.'REA_GEOM' = VRAI ;
  294. 'FORM' WTAB.'FOR' ;
  295. 'FINSI';
  296. 'SINON' ;
  297. 'FORM' WTAB.'GE0_DEB' ;
  298. 'FINSI' ;
  299. 'FINSI' ;
  300. *
  301. 'SI' (TI 'NEG' TEMP0);
  302. 'SI' ('NON' ('EXISTE' PRECED 'PAS_MAX'));
  303. WTAB.'TEM_CALC' = 'PROG' TI;
  304. 'SINON';
  305. 'SI' ((TEMP0 + PRECED.'PAS_MAX') '>EG' TI);
  306. WTAB.'TEM_CALC' = 'PROG' TI;
  307. 'SINON';
  308. WTAB.'TEM_CALC' = 'PROG' TEMP0
  309. 'PAS' PRECED.'PAS_MAX' TI;
  310. WTAB.'TEM_CALC' = 'ENLE' WTAB.'TEM_CALC' 1;
  311. 'FINSI';
  312. 'FINSI';
  313.  
  314. * Mise a jour blocages passes dans chargement
  315. * -> ISO AVANT MAIS A FAIRE A CHAQUE FOIS SI DEPEND DE LA MECA ??
  316. 'SI' ('EGA' I_BOTH 1) ;
  317. * Cas BLOCAGES_THERMIQUES (BLOT) :
  318. 'SI' WTAB.'CHAR_BLOT' ;
  319. BLOT1 = 'TIRE' PRECED.'BLOCAGES_THERMIQUES' 'BLOT' TI ;
  320. WTAB.'BLOCAGES_THERMIQUES' = BLOT1 ;
  321. 'FINSI' ;
  322. *
  323. * Cas BLOCAGES_DIFFUSIONS (BLOD) :
  324. 'SI' WTAB.'CHAR_BLOD' ;
  325. BLOD1 = 'TIRE' PRECED.'BLOCAGES_DIFFUSIONS' 'BLOD' TI ;
  326. WTAB.'BLOCAGES_DIFFUSIONS' = BLOD1 ;
  327. 'FINSI' ;
  328. 'FINSI' ;
  329. *
  330. * ----- Appel a la procedure thermique (lineaire ou nonlineaire) ----
  331. *
  332. 'SI' ('NON' WTAB.'COUPLAGE'); 'MENAGE'; 'FINSI';
  333. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE');
  334. CHTER = TRANSNON PRECED;
  335. 'FINSI';
  336. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'LINEAIRE');
  337. CHTER = TRANSLIN PRECED;
  338. 'FINSI';
  339. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT');
  340. WTAB.'NOUV_PAS' = ('EXTR' WTAB.'TEM_CALC' 1) - TEMP0;
  341. CHTER = DUPONT2 PRECED;
  342. 'FINSI';
  343. *
  344. * Verification d'une erreur en sortie
  345. 'SI' CHTER.'ERREUR';
  346. 'ERREUR' ' ';
  347. 'FINSI';
  348. *
  349. * Modele Metallurgique (T.L. en juin 2018)
  350. 'SI' WTAB.'FOR_METALLU' ;
  351. estim.'PROPORTIONS_PHASES' = CHTER.'PROPORTIONS_PHASES' ;
  352. 'FINSI';
  353. *
  354. 'SI' WTAB.'PHASE';
  355. WTAB.'PROPPHAS' = CHTER.'PROPPHAS' ;
  356. estim.'PROPORTIONS_PHASE' = CHTER.'PROPPHAS' ;
  357. 'FINSI' ;
  358. *
  359. 'SI' WTAB.'FOR_THER' ;
  360. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE') ;
  361. 'SI' ('NEG' WTAB.'RIBLO_T' 'INCONNU');
  362. WTAB.'RIBLO_T' = CHTER.'RIBLO_T' ;
  363. WTAB.'LISEA_T' = CHTER.'LISEA_T' ;
  364. 'FINSI' ;
  365. 'FINSI' ;
  366. 'SI' WTAB.'RAYO' ;
  367. WTAB.'RAYONNEMENT' = CHTER.'RAYONNEMENT' ;
  368. 'FINSI' ;
  369. WTAB.'TET2' = CHTER.'INITIAL(2)' ;
  370. estim.'TEMPERATURES' = WTAB.'TET2' ;
  371. estim.'REACTIONS_THERMIQUES' = 'REAC' CHTER.'CLIT' WTAB.'TET2';
  372. 'FINSI' ;
  373. *
  374. 'SI' WTAB.'FOR_DIFF' ;
  375. WTAB.'CO2' = CHTER.'CO2';
  376. estim.'CONCENTRATIONS' = WTAB.'CO2' ;
  377. estim.'REACTIONS_DIFFUSIONS' = 'REAC' CHTER.'CLID' WTAB.'CO2';
  378. 'FINSI' ;
  379. *
  380. * Se placer sur la configuration de reference (appel proc ut.)
  381. 'FORM' WTAB.'FOR0' ;
  382. *
  383. * Reevaluation des donnees du calcul dependant de la temperature
  384. 'SI' WTAB.'PROCEDURE_REEV_THE' ;
  385. REEV_THE PRECED 1 ;
  386. 'FINSI' ;
  387. 'FINS';
  388. *
  389. 'FINSI' ;
  390. * ####################################################################
  391. * ###### RESOLUTION D'UN PAS SI MECANIQUE/MECANIQUE DES FLUIDES ######
  392. * ####################################################################
  393. 'SI' (WTAB.'FOR_MECA' 'OU' WTAB .'NVSTNL') ;
  394. 'SAUT' 1 'LIGN';
  395. 'MESSAGE' ' Numero du pas : ' IPAS ' Indice d evolution : ' ICHG ' -> temps :' TI;
  396.  
  397. *--------------------- calcul de la temperature ---------------------
  398. * CB215821 : On met la thermique dans le Chargement pour 'TIRER' le chargement
  399. * au bon instant dans UNPAS pour la MECANIQUE
  400. * Il faudra faire de meme avec la MECANIQUE si la THERMIQUE en depend
  401. * 'SI' WTAB.'FOR_THER';
  402. * THTA1='TABLE'; THTA2='TABLE';
  403. * THTA1.0=TEMP0; THTA1.1=TI;
  404. * THTA2.0= conti.'TEMPERATURES' 'ENLE' 'LX' ;
  405. * THTA2.1= estim.'TEMPERATURES' 'ENLE' 'LX' ;
  406. * CHTH='CHAR' 'T' THTA1 THTA2;
  407. * CHASANST= WTAB.'CHARGEMENT' 'ENLE' 'T';
  408. * WTAB.'CHARGEMENT'= CHASANST 'ET' CHTH;
  409. * 'FINSI';
  410. *
  411. * Se placer sur la configuration de debut de pas
  412. 'FORM' WTAB.'GE0_DEB' ;
  413. *
  414. 'MENA' ;
  415. IERRMEC = UNPAS PRECED;
  416. *
  417. * Se placer sur la configuration de reference (appel proc ut.)
  418. 'FORM' WTAB.'FOR0' ;
  419. *
  420. * Test si on a converge
  421. 'SI' IERRMEC ;
  422. 'ERREUR' 997 ;
  423. 'FINSI';
  424. *
  425. * Reevaluation des donnees du calcul dependant de la mecanique
  426. 'SI' WTAB.'PROCEDURE_REEV_MEC' ;
  427. REEV_MEC PRECED 1;
  428. 'FINSI' ;
  429. *
  430. 'FINSI';
  431. * ####################################################################
  432. * ############ TEST DE LA CONVERGENCE MECANIQUE THERMIQUE ############
  433. * ####################################################################
  434. 'SI' WTAB.'CONVERGENCE_MEC_THE' ;
  435. * je cherche la convergence thermo-mecanique : je dois au moins
  436. * calculer deux fois mon probleme
  437. 'SI' (I_BOTH > 1) ;
  438. * Test sur toutes les composantes (notamment, si DIFFUSION)
  439. CHT1 = WTAB.'THER_COURANT' ;
  440. DUABS2 = 'ABS' (WTAB.'THER_COURANTP' - CHT1) ;
  441. CRICOH1 = 0. ;
  442. NBINCO1 = 'DIME' WTAB.'PRIM_TOT' ;
  443. 'REPE' BINCO1 NBINCO1 ;
  444. LINCOI1 = 'MOTS' ('EXTR' WTAB.'PRIM_TOT' &BINCO1) ;
  445. MDUABSI1 = 'MAXI' DUABS2 'AVEC' LINCOI1 ;
  446. NORMI1 = 'MAXI' 'ABS' CHT1 'AVEC' LINCOI1 ;
  447. 'SI' (NORMI1 '&lt;EG' (1.E-14 * MDUABSI1)) ;
  448. NORMI1 = 1. ;
  449. 'FINS' ;
  450. CRICOHI1 = MDUABSI1 / NORMI1 ;
  451. 'SI' (CRICOHI1 '>' CRICOH1) ;
  452. CRICOH1 = CRICOHI1 ;
  453. 'FINS' ;
  454. 'FIN' BINCO1 ;
  455.  
  456. WTAB.'CONV_THMEC' = CRICOH1 '<' (WTAB . 'CRITERE_COHERENCE') ;
  457. * Fin de boucle Si ne converge Pas
  458. 'SI'('NON' WTAB.'CONV_THMEC') ;
  459. 'SI' (I_BOTH >EG WTAB.'BOU_METH');
  460. 'MESS' 'PAS DE COHERENCE TROUVEE MECANIQUE THERMIQUE' ;
  461. 'ERREUR' 999;
  462. 'FINSI' ;
  463. 'FINSI' ;
  464. 'SINON' ;
  465. * je suis sur la premiere boucle de convergence thermomecanique
  466. WTAB.'CONV_THMEC' = FAUX ;
  467. 'FINSI' ;
  468. * THER_COURANTPrecedent dans WTAB pour test CONVERGENCE_MEC_THE
  469. WTAB.'THER_COURANTP' = WTAB.'THER_COURANT' ;
  470. 'SINON' ;
  471. * ici je ne cherche pas la convergence thermomecanique
  472. WTAB.'CONV_THMEC' = VRAI ;
  473. 'FINSI' ;
  474. *
  475. 'SI' WTAB.'CONV_THMEC' ;
  476. 'QUITTER' BO_BOTH ;
  477. 'FINSI' ;
  478. *
  479. 'FIN' BO_BOTH ;
  480. * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  481. * +++++++++++++++++ BOUCLE interne de bouclage mec_ther ++++++++++++++++
  482. * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  483. *
  484. * ----------------------------------------------------------------------
  485. * Mise a jour des champs a TEMPS0 a partir de ceux a TI
  486. * ----------------------------------------------------------------------
  487. *
  488. * Formulation THERMIQUE
  489. 'SI' WTAB.'FOR_THER';
  490. WTAB.'TET1' = estim.'TEMPERATURES' ;
  491. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT');
  492. WTAB.'TET0' = WTAB.'TET1' ;
  493. WTAB.'VIEUXPAS' = WTAB.'NOUV_PAS' ;
  494. WTAB.'RELAXATION_DUPONT' = CHTER.'RELAXATION_DUPONT';
  495. 'SI' ('EXIS' CHTER 'INITIAL(1)') ;
  496. WTAB.'TET1' = CHTER.'INITIAL(1)';
  497. 'FINSI' ;
  498. 'FINSI';
  499. 'FINSI' ;
  500. *
  501. * Formulation DIFFUSION
  502. 'SI' WTAB.'FOR_DIFF';
  503. WTAB.'CO1' = estim.'CONCENTRATIONS' ;
  504. 'FINSI' ;
  505. *
  506. * Formulation MECANIQUE
  507. 'SI' WTAB.'FOR_MECA' ;
  508. *
  509. 'SI' WTAB.'ITHER' ;
  510. WTAB.'TET1' = WTAB.'TET2';
  511. WTAB.'ETHER1' = WTAB.'ETHER2';
  512. 'SI' WTAB.'POR1';
  513. WTAB.'MSRTHER1'= WTAB.'MSRTHER2';
  514. 'FINSI';
  515. 'FINSI' ;
  516. *
  517. 'SI' WTAB.'CHAR_DEFI' ;
  518. WTAB.'DEFOR1' = WTAB.'DEFOR2';
  519. 'FINSI';
  520. *
  521. * En dynamique : vitesse, forces de reactions, operateur
  522. 'SI' WTAB.'DYNAMIQUE' ;
  523. *
  524. * A REPORTER DANS UNPAS ??
  525. 'SI' WTAB.'LIAISON_PERSISTANTE' ;
  526. * correction des vitesses pour avoir des vitesses relatives nulles
  527. * aux points qui sont en contact
  528. estim.'VITESSES' = estim.'VITESSES' + WTAB.'VAUX' ;
  529. 'SINON' ;
  530. * forces d'acceleration et d'amortissement a la fin du pas *
  531. WTAB.'FREA1' = WTAB.'FOPL' - estim.'REACTIONS' ;
  532. * en cas d'appuis unilateraux avec choc elastique essai de corriger
  533. * les vitesses fournies par le schema
  534. estim.'VITESSES' = VITEUNIL WTAB.'ZRAIDV' WTAB.'MASSE' estim.'VITESSES'
  535. WTAB.'DEPT' conti.'DEPLACEMENTS' WTAB.'DT' WTAB.'SECOND_MEMBRE' WTAB;
  536. 'SI' ('EXIS' WTAB 'RATE_VITEUNIL');
  537. 'ERREUR' 'Probleme dans viteunil' ;
  538. 'FINSI';
  539. 'FINSI' ;
  540. 'SI' ('NEG' WTAB.'REAPREC' 'INCONNU');
  541. maireac = 'EXTR' estim.'REACTIONS' 'MAIL' ;
  542. 'SI' ('EGA' ('TYPE' maireac) 'MAILLAGE');
  543. reacdif = 'REDU' WTAB.'REAPREC' maireac ;
  544. estim.'REACTIONS' = estim.'REACTIONS' - REACDIF;
  545. 'FINSI' ;
  546. 'FINSI';
  547. WTAB.'REAPREC' = estim.'REACTIONS';
  548. 'FINSI';
  549. *
  550. * Actualiser la configuration de debut de pas
  551. 'SI' WTAB.'GRANDS_DEPLACEMENTS' ;
  552. WTAB.'GE0_DEB' = WTAB.'FOR' ;
  553. 'FINSI';
  554. *
  555. 'SI' ('ET' WTAB.'FEFP_FORMULATION' WTAB.'UPDATE_LAGRANGIAN') ;
  556. WTAB.'GE0_DEB' = WTAB.'FOR' ;
  557. 'FINSI';
  558. *
  559. 'FINSI';
  560. *
  561. * Mise a jour du temps initial du prochain pas de temps
  562. DT2 = (TI - TEMP0) / 10000.;
  563. 'SI' (WTAB.'AUTOMATIQUE' 'OU' ('NON' WTAB.'CONV'));
  564. TEMP0 = ( TI - TEMP0) * WTAB.'AUTOCOEF' + TEMP0;
  565. 'MESS' ' Temps effectivement calcule et non converge : ' TEMP0;
  566. 'SINON';
  567. TEMP0 = TI;
  568. 'FINSI';
  569. WTAB.'TEMPS0' = TEMP0;
  570.  
  571. * Procedure utilisateur
  572. 'SI' WTAB.'FOR_MECA' ;
  573. 'SI' WTAB.'PROCEDURE_PERSO1' ;
  574. PRECED.'PERSO1_APPEL' = 2 ;
  575. PERSO1 PRECED;
  576. 'SI' ('EXIS' PRECED 'ARRET') ;
  577. WTAB.'ARRET' = PRECED.'ARRET' ;
  578. 'FINSI' ;
  579. TEMP0 = WTAB.'TEMPS0' ;
  580. 'FINSI';
  581. *
  582. *----------------- On redefinit WTAB.'CHARGEMENT_I' ------------------
  583. 'SI' WTAB.'CONVERGENCE_MEC_THE' ;
  584. WTAB.'CHARGEMENT_I' = WTAB.'CHARGEMENT' ;
  585. 'FINSI';
  586. 'FINSI';
  587. *
  588. * pour ne pas sauvegarder la matrice de raideur si on doit la recalculer
  589. 'SI' ('EXIS' WTAB 'RRRR') ;
  590. 'SI' WTAB.'RECARI' ;
  591. 'OUBL' WTAB 'RRRR' ;
  592. 'FINSI';
  593. 'FINSI';
  594. *
  595. * ----------------------------------------------------------------------
  596. * Remplir CONTINUATION et table de resultats + sauvegarde
  597. * ----------------------------------------------------------------------
  598. ISAUV = PAS_RESU TEMP0 iauto PRECED ;
  599. *
  600. * Option AUTOMATIQUE
  601. 'SI' WTAB.'AUTOMATIQUE';
  602. IAUTO=IAUTO+1;
  603. 'SI' ((WTAB.'AUTOCOEF' 'EGA' 0.9999999D0) 'OU' (TEMP0 '>EG' TI)) ;
  604. TEMP0=TI;
  605. 'MESS' ' Objectif atteint '; 'MESS' ' ';
  606. WTAB.'AUTODEUX' = FAUX ;
  607. WTAB.'AUTORED1' = 0 ;
  608. WTAB.'AUTOREDU' = 1. ;
  609. IAUTO=1;
  610. 'SINON';
  611. 'MESS' ' Objectif non atteint: On recommence'; 'MESS' ' ';
  612. 'SI' ( IAUTO >EG WTAB.'AUTOPAS');
  613. 'ERREUR' 1000;
  614. * 'MESS' 'Pilotage non converge apres ' IAUTO ' pas.';
  615. 'FINSI';
  616. WTAB.'AUTODEUX'=VRAI;
  617. ICHG=ICHG - 1; WTAB.'ICHG' = ICHG ;
  618. 'FINSI';
  619. 'FINSI';
  620. *
  621. * Option PAS_AJUSTE
  622. 'SI' WTAB.'PAS_AJUSTE';
  623. 'SI' ((TI < TIV) 'OU' ('NON' WTAB.'CONV'));
  624. ICHG=ICHG-1; WTAB.'ICHG' = ICHG ;
  625. 'FINSI';
  626. 'FINSI';
  627. *
  628. 'SI' WTAB.'ARRET';
  629. 'QUITTER' BEXTERN;
  630. 'FINSI';
  631. *
  632. 'FIN' BEXTERN;
  633. *-----------------------------------------------------------------------
  634. * Fin de la boucle sur les pas de temps
  635. *-----------------------------------------------------------------------
  636. 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU');
  637. WTAB.'AMORTISSEMENT' = TOTO ;
  638. 'FINSI';
  639. *
  640. 'SI' ('NEG' ('TYPE' WTAB.'GE0_DEB') 'MOT') ;
  641. 'OUBL' WTAB 'GE0_DEB' ;
  642. 'FINSI' ;
  643. *
  644. * on tue WTAB.'MAT1' s'il existe car il peut etre tres gourmand en place
  645. WTAB.'MAT1' = 'MOT' 'INCONNU';
  646. *
  647. 'MESS' ' ';
  648. '------------------- FIN DE LA PROCEDURE PASAPAS ---------------------';
  649. 'SAUT' 1 'LIGNE';
  650. *
  651. ************************************************************************
  652. *
  653. * pour forcer le calcul de la rigidite si on rappele pasapas
  654. 'SI' ('EXIS' WTAB 'RRRR') ;
  655. 'OUBL' WTAB 'RRRR';
  656. 'FINSI';
  657.  
  658. * Typage de la table en sortie de PASAPAS ;
  659. PRECED.'SOUSTYPE' = 'MOT' 'PASAPAS' ;
  660. *
  661. 'FINPROC' PRECED ;
  662.  
  663.  

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