Télécharger pasapas.procedur

Retour à la liste

Numérotation des lignes :

  1. * PASAPAS PROCEDUR PASCAL 21/02/01 21:15:08 10873
  2.  
  3. 'DEBP' PASAPAS PRECED*'TABLE';
  4. 'SAUT' 1 'LIGNE';
  5. '------------------ DEBUT DE LA PROCEDURE PASAPAS --------------------';
  6. ************************************************************************
  7. * *
  8. * *
  9. *** PRECED objet de type TABLE *
  10. * C'est une table donnant , les arguments d'entrees, les *
  11. * options, puis les resultats des pas precedents *
  12. * *
  13. * Etat initial au debut du pas de temps decrit par le MCHELM WTAB.ETAT1*
  14. * champs de materiaux : *
  15. * WTAB.'MAT_REF' materiau etat a la temperature de REFERENCE *
  16. * WTAB.'MAT0' materiau etat debut de calcul *
  17. * WTAB.'MAT1' materiau fin du pas de temps *
  18. * *
  19. ************************************************************************
  20.  
  21. **************** I PARTIE ******************************************
  22.  
  23. *---------- attribution des valeurs par defaut et verifs elementaires
  24. PAS_DEFA PRECED ;
  25. *-------- initialisation du pas precedent si besoin et creation des tables de sorties.
  26. PAS_INIT PRECED ;
  27.  
  28. WTAB = PRECED.'WTABLE' ;
  29. conti = PRECED.'CONTINUATION';
  30. estim = PRECED.'ESTIMATION' ;
  31. *
  32. WTAB.'GE0_DEB'=WTAB.'FOR0';
  33. 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION');
  34. 'SI' ( 'EXIS' conti 'DEPLACEMENTS');
  35. WTAB.'GE0_DEB'= 'FORME' conti . 'DEPLACEMENTS';
  36. 'FINSI';
  37. 'FINSI';
  38. 'FORM' WTAB.'FOR0';
  39.  
  40. *--------- quel est le delta-temps du dernier pas calcule ? ---------
  41. 'SI' ('EGA' WTAB.'DT' ('MOT' 'INCONNU'));
  42. DELTAN = 0.D0 ;
  43. WTAB.'DT' = DELTAN ;
  44. 'SINON';
  45. DELTAN= WTAB.'DT';
  46. 'FINSI';
  47.  
  48. *------------Appel a une procedure utilisateur PERSO1
  49. 'SI' WTAB.'PROCEDURE_PERSO1';
  50. PRECED.'PERSO1_APPEL' = 1 ;
  51. PERSO1 PRECED ;
  52. 'SI' ('EXIS' PRECED 'ARRET') ;
  53. WTAB.'ARRET' = PRECED.'ARRET' ;
  54. 'FINSI' ;
  55. 'FINSI';
  56.  
  57. * ------------Appel a une procedure utilisateur REEV_MEC
  58. 'SI' WTAB.'PROCEDURE_REEV_MEC' ;
  59. REEV_MEC PRECED 0 ;
  60. 'FINSI' ;
  61.  
  62. * ------------Appel a une procedure utilisateur REEV_THE
  63. 'SI' WTAB.'PROCEDURE_REEV_THE' ;
  64. REEV_THE PRECED 0 ;
  65. 'FINSI' ;
  66.  
  67. *--------- initialisation ETAT ET MATERIAUX
  68. WTAB.'ETAT0' = PAS_ETAT PRECED WTAB.'TEMPS0' ;
  69. WTAB.'ETAT1' = WTAB.'ETAT0' ;
  70. WTAB.'MAT0' = PAS_MATE PRECED WTAB.'ETAT0' ;
  71. WTAB.'MAT1' = WTAB.'MAT0' ;
  72.  
  73. *--------- initialisation deformation thermique de reference
  74. 'SI' WTAB.'FOR_MECA' ;
  75. 'SI' (WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER' ) ;
  76. 'SI' ('EGA' WTAB.'ETREF' 'INCONNU');
  77. WTAB.'ETAT_REF'= PAS_ETAT PRECED WTAB.'TEMPS0' 'REFERENCE';
  78. WTAB.'MAT_REF' = PAS_MATE PRECED WTAB.'ETAT_REF' ;
  79. WTAB.'ETREF' ='EPTH' WTAB.'MO_TOT' WTAB.'MAT_REF' WTAB.'TEMPERATURE_REFERENCE' ;
  80. 'FINS' ;
  81.  
  82. 'SI' WTAB.'POR1';
  83. 'SI' ('EGA' ('TYPE' WTAB.'TET1') 'CHPOINT');
  84. TET1 ='CHAN' 'CHAM' WTAB.'TET1' WTAB.'MO_TOT' 'STRESSES' 'TEMPERATURES' ;
  85. 'FINS';
  86. WTAB.'MSRTHER1'= PAS_EPTH PRECED WTAB.'MO_TOT' WTAB.'MAT0' TET1 ;
  87. 'FINS' ;
  88. 'FINS' ;
  89. 'FINS' ;
  90.  
  91. ************************** II PARTIE *************************
  92. ******************************************************************
  93. ******************* boucle sur les pas de temps *****************
  94. ******************************************************************
  95.  
  96. * ------------quelques initialisations de l'algorithme
  97. PASFINAL = 0 ;
  98. IPAS = 0 ;
  99. ICHG = 0 ;
  100. IAUTO = 1 ;
  101. IREREDU = VRAI;
  102. TEMP0 = WTAB.'TEMPS0';
  103. ISAUV = VRAI;
  104. DTV =('EXTR' WTAB.'TEMPS_CALCULES' 1) - TEMP0 ;
  105. 'SI' ( DTV '<' 1.e-15 );
  106. 'SI' WTAB.'FREQUENTIEL' ;
  107. DTV = 1.e-14 ;
  108. 'SINON' ;
  109. DTV =('EXTR' WTAB.'TEMPS_CALCULES' 2) - TEMP0 ;
  110. 'FINSI';
  111. 'FINSI';
  112. WTAB.'ARRET' = FAUX;
  113. WTAB.'AUTODEUX'= FAUX;
  114. WTAB.'CONV' = VRAI;
  115. DT_AVANT = DTV ;
  116. WTAB.'NOMBRE_ITERATIONS'=12;
  117.  
  118. * Attention Bizarre : RFROT est initialise ici et utilise dans UNPAS ????
  119. RFROT=0;
  120.  
  121. *---------- debut boucle sur pas de temps
  122. 'REPETER' BEXTERN ;
  123.  
  124. *---recherche du temps a calculer TI
  125. NPAS='DIME' WTAB.'TEMPS_CALCULES';
  126. ICHG=ICHG + 1; WTAB.'ICHG'= ICHG;
  127. 'SI' ( ICHG '>' NPAS) ; 'QUITTER' BEXTERN; 'FINSI';
  128. TI = 'EXTRAIRE' WTAB.'TEMPS_CALCULES' ICHG ;
  129. TIV=TI;
  130. 'SI' (WTAB.'FREQUENTIEL') ;
  131. 'SI' (TI '<' TEMP0 ) ; 'ITERER' BEXTERN ; 'FINSI' ;
  132. 'SINON' ;
  133. 'SI' ((TI '<' TEMP0 ) 'OU' (TI 'EGA' PRECED.'TEMPS'. 0));
  134. 'ITERER' BEXTERN ;
  135. 'FINSI'; 'FINSI';
  136.  
  137. *---ajustement du pas en fonction du nombre d iteration du pas precedent
  138. PASFINAL=PASFINAL+1;
  139. 'SI' WTAB.'PAS_AJUSTE';
  140. DTV=DT_AVANT;
  141. 'SI' WTAB.'CONV';
  142. 'SI' (WTAB.'NOMBRE_ITERATIONS' > 20);
  143. DTV=DTV'/' (2. ** 0.5);
  144. 'FINSI';
  145. 'SI' (WTAB.'NOMBRE_ITERATIONS' < 7);
  146. 'SI' IREREDU;
  147. DTV=DTV '*' (2. ** 0.5);
  148. 'FINSI';
  149. 'FINSI';
  150. DT_AVANT= DTV;
  151. IREREDU=VRAI;
  152. 'SINON';
  153. DTV=0.0000000001D0* DT_AVANT;
  154. DT_AVANT= DT_AVANT /2.;
  155. IREREDU=FAUX;
  156. 'FINSI';
  157. TTI = DTV* 1.0000000001 + TEMP0;
  158. 'SI' ( TTI '&lt;EG' TIV );
  159. TI=TTI;
  160. PASFINAL=0;
  161. 'FINSI';
  162. 'FINSI';
  163. estim.'TEMPS'=TI;
  164. 'SI' (PASFINAL '>EG' 1.5) ; DT_AVANT= TI-TEMP0; 'FINSI';
  165. WTAB.'T_FINAL'= TI;
  166. WTAB.'DT_INIT' = TI-TEMP0;
  167. 'SI'((WTAB.'CONSOLIDATION' 'OU' WTAB.'DYNAMIQUE')
  168. 'ET' (WTAB.'DT_INIT' 'EGA' 0.));
  169. 'ITERER' BEXTERN;
  170. 'FINSI';
  171. WTAB.'DT'= WTAB.'DT_INIT';
  172.  
  173. *---compteur IPAS des pas de temps calcules
  174. IPAS = IPAS + 1;
  175. WTAB.'PAS'=IPAS;
  176.  
  177. *---Mise a jour du modele si chargement de type MODE :
  178. 'SI' (WTAB.'CHAR_MODE') ;
  179. MODEVOL1 = 'TIRE' WTAB.'CHARGEMENT' 'MODE' TI ;
  180. WTAB.'MODELE' = MODEVOL1 ;
  181.  
  182. 'SI' (WTAB.'CHAR_MATE') ;
  183. MATEVOL1 = 'TIRE' WTAB.'CHARGEMENT' 'MATE' TI ;
  184. WTAB.'CARACTERISTIQUES' = MATEVOL1 ;
  185. 'FINSI' ;
  186.  
  187. PAS_MODL PRECED ;
  188.  
  189. 'SI' WTAB.'RAYO' ;
  190. WTAB.'RAYONNEMENT' = 'PRRA' WTAB.'MOD_RAY' ;
  191. 'FINSI' ;
  192.  
  193. * On sauvegarde les modeles successifs pour analyse resultats :
  194. ESTIM.'MODELES' = WTAB.'MODELE' ;
  195. * ESTIM.'MAILLAGES' = 'EXTR' WTAB.'MODELE' 'MAIL' ;
  196.  
  197. 'FINSI' ;
  198.  
  199. *--- Mise a jour blocages passes dans chargement
  200. * Cas BLOCAGES_MECANIQUES (BLOM)
  201. 'SI' (WTAB.'CHAR_BLOM') ;
  202. * mess ' ***** TIRE CHAR BLOM au temps ' TI ;
  203. * BLOM du pas precedent :
  204. 'SI' ('EXIS' WTAB 'BLOM') ;
  205. BLOM0 = WTAB . 'BLOM' ;
  206. 'SINON' ;
  207. BLOM0 = 'VIDE' 'RIGIDITE' ;
  208. 'FINSI' ;
  209. * BLOM du pas courant :
  210. BLOM1 = 'TIRE' WTAB.'CHARGEMENT' 'BLOM' TI ;
  211. WTAB . 'BLOM' = BLOM1 ;
  212.  
  213. * Si different, on remplace dans BLOCAGES_MECANIQUES et op. resolution RRRR
  214. DBLOM01 = BLOM0 diff BLOM1 ;
  215. 'SI' ('NON' ('VIDE' DBLOM01)) ;
  216. mess ' ***** Modif. blocages mecaniques' ;
  217. * On ne remplace que ce qui est necessaire :
  218. BLOM01 = BLOM0 'INTE' BLOM1 ;
  219. DBLOM0 = BLOM0 'DIFF' BLOM01 ;
  220. DBLOM1 = BLOM1 'DIFF' BLOM01 ;
  221. * MAJ Blocages Mecaniques :
  222. BLOMEC1 = WTAB.'BLOCAGES_MECANIQUES' ;
  223. WTAB.'BLOCAGES_MECANIQUES' = (BLOMEC1 'DIFF' DBLOM0) 'ET' DBLOM1 ;
  224.  
  225. * MAJ Operateur Resolution :
  226. 'SI' ('EXIS' WTAB 'RRRR') ;
  227. RRRR = WTAB.'RRRR' ;
  228. WTAB.'RRRR' = (RRRR 'DIFF' DBLOM0) 'ET' DBLOM1 ;
  229. 'FINSI' ;
  230. 'FINSI' ;
  231. 'FINSI' ;
  232.  
  233. * Cas BLOCAGES_THERMIQUES (BLOT)
  234. 'SI' (WTAB.'CHAR_BLOT') ;
  235. * mess ' ***** TIRE CHAR BLOT au temps ' TI ;
  236. * BLOT du pas precedent :
  237. 'SI' ('EXIS' WTAB 'BLOT') ;
  238. BLOT0 = WTAB . 'BLOT' ;
  239. 'SINON' ;
  240. BLOT0 = 'VIDE' 'RIGIDITE' ;
  241. 'FINSI' ;
  242. * BLOT du pas courant :
  243. BLOT1 = 'TIRE' WTAB.'CHARGEMENT' 'BLOT' TI ;
  244. WTAB . 'BLOT' = BLOT1 ;
  245.  
  246. * Si different, on remplace dans BLOCAGES_THERMIQUES
  247. DBLOT01 = BLOT0 diff BLOT1 ;
  248. 'SI' ('NON' ('VIDE' DBLOT01)) ;
  249. * On ne remplace que ce qui est necessaire :
  250. BLOT01 = BLOT0 'INTE' BLOT1 ;
  251. DBLOT0 = BLOT0 'DIFF' BLOT01 ;
  252. DBLOT1 = BLOT1 'DIFF' BLOT01 ;
  253. * MAJ Blocages THERMIQUES :
  254. BLOTEC1 = WTAB.'BLOCAGES_THERMIQUES' ;
  255. WTAB.'BLOCAGES_THERMIQUES' = (BLOTEC1 'DIFF' DBLOT0) 'ET' DBLOT1 ;
  256. 'FINSI' ;
  257. 'FINSI' ;
  258.  
  259. * Cas BLOCAGES_DIFFUSIONS (BLOD)
  260. 'SI' (WTAB.'CHAR_BLOD') ;
  261. * mess ' ***** TIRE CHAR BLOD au temps ' TI ;
  262. * BLOD du pas precedent :
  263. 'SI' ('EXIS' WTAB 'BLOD') ;
  264. BLOD0 = WTAB . 'BLOD' ;
  265. 'SINON' ;
  266. BLOT0 = 'VIDE' 'RIGIDITE' ;
  267. 'FINSI' ;
  268. * BLOD du pas courant :
  269. BLOD1 = 'TIRE' WTAB.'CHARGEMENT' 'BLOD' TI ;
  270. WTAB . 'BLOD' = BLOD1 ;
  271.  
  272. * Si different, on remplace dans BLOCAGES_DIFFUSIONS
  273. DBLOD01 = BLOD0 diff BLOD1 ;
  274. 'SI' ('NON' ('VIDE' DBLOD01)) ;
  275. * On ne remplace que ce qui est necessaire :
  276. BLOD01 = BLOD0 'INTE' BLOD1 ;
  277. DBLOD0 = BLOD0 'DIFF' BLOD01 ;
  278. DBLOD1 = BLOD1 'DIFF' BLOD01 ;
  279. * MAJ Blocages DIFFUSION :
  280. BLODEC1 = WTAB.'BLOCAGES_DIFFUSIONS' ;
  281. WTAB.'BLOCAGES_DIFFUSIONS' = (BLODEC1 'DIFF' DBLOD0) 'ET' DBLOD1 ;
  282. 'FINSI' ;
  283. 'FINSI' ;
  284.  
  285. *---on se place dans la configuration deformee
  286. 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION');
  287. 'SI' (WTAB.'RECALCUL');
  288. 'SI' ('EGA' ( 'TYPE' WTAB.'GE0_DEB') 'CONFIGUR');
  289. 'FORM' WTAB.'GE0_DEB';
  290. 'FINSI';
  291. 'FINSI';
  292. 'FINSI';
  293.  
  294. *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  295. *++++++++++++++++++ BOUCLE interne de bouclage mec_ther ++++++++++++++
  296. *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  297. I_BOTH = 0 ;
  298. 'REPETER' BO_BOTH WTAB.'BOU_METH' ;
  299. I_BOTH = I_BOTH + 1 ;
  300. *
  301. * re-initialisation de WTAB.'CHARGEMENT' en tete de boucle mec-ther
  302. *
  303. 'SI' WTAB.'CONVERGENCE_MEC_THE' ;
  304. WTAB.'CHARGEMENT' = WTAB . 'CHARGEMENT_I' ;
  305. 'FINSI';
  306.  
  307. *######CALCUL D'UN PAS SI IL Y A DE LA THERMIQUE ####################
  308. 'SI' (WTAB.'FOR_THER' 'OU' WTAB.'FOR_DIFF') ;
  309. 'SI' WTAB.'FOR_MECA' ;
  310. *---------- en cas de convergence mecanique thermique
  311. 'SI' (I_BOTH > 1) ;
  312. *---------- reprise de la configuration meca de la derniere estimation
  313. * du pas present si coherence mecanique/thermique
  314. 'SI' ('EXIS' estim 'FOR' );
  315. WTAB .'RECARI' = VRAI ;
  316. WTAB .'RECADET' = VRAI ;
  317. WTAB.'REA_GEOM' = VRAI ;
  318. 'FORM' estim.'FOR' ;
  319. 'FINSI';
  320. 'FINSI' ;
  321. 'FINSI' ;
  322.  
  323. 'SI' (TI 'NEG' TEMP0);
  324. 'SI' ('NON' ('EXISTE' PRECED 'PAS_MAX'));
  325. WTAB.'TEM_CALC' = 'PROG' TI;
  326. 'SINON';
  327. 'SI' ((TEMP0 + PRECED.'PAS_MAX') '>EG' TI);
  328. WTAB.'TEM_CALC' = 'PROG' TI;
  329. 'SINON';
  330. WTAB.'TEM_CALC' = 'PROG' TEMP0
  331. 'PAS' PRECED.'PAS_MAX' TI;
  332. WTAB.'TEM_CALC' = 'ENLE' WTAB.'TEM_CALC' 1;
  333. 'FINSI';
  334. 'FINSI';
  335. *----- Appel a la procedure thermique (lineaire ou nonlineaire) ----
  336. 'SI' ('NON' WTAB.'COUPLAGE'); 'MENAGE'; 'FINSI';
  337. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE');
  338. CHTER = TRANSNON PRECED;
  339. 'FINSI';
  340. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'LINEAIRE');
  341. CHTER = TRANSLIN PRECED;
  342. 'FINSI';
  343. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT');
  344. WTAB.'NOUV_PAS' = ('EXTR' WTAB.'TEM_CALC' 1) - TEMP0;
  345. CHTER = DUPONT2 PRECED;
  346. 'FINSI';
  347.  
  348. * Verification d'une erreur en sortie
  349. 'SI' CHTER.'ERREUR';
  350. 'ERREUR' ' ';
  351. 'FINSI';
  352.  
  353. * Modele Metallurgique (T.L. en juin 2018)
  354. 'SI' WTAB.'FOR_METALLU' ;
  355. estim.'PROPORTIONS_PHASES' = CHTER.'PROPORTIONS_PHASES' ;
  356. 'FINSI';
  357.  
  358. 'SI' WTAB.'PHASE';
  359. WTAB.'PROPPHAS' = CHTER.'PROPPHAS' ;
  360. estim.'PROPORTIONS_PHASE'= CHTER.'PROPPHAS' ;
  361. 'FINSI' ;
  362.  
  363. 'SI' WTAB.'FOR_THER' ;
  364. WTAB.'TET2'=CHTER.'INITIAL(2)' ;
  365. WTAB.'CLIT'=CHTER.'CLIT' ;
  366. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE') ;
  367. 'SI' ('NEG' WTAB.'RIBLO_T' 'INCONNU');
  368. WTAB.'RIBLO_T' = CHTER.'RIBLO_T' ;
  369. WTAB.'LISEA_T' = CHTER.'LISEA_T' ;
  370. 'FINSI' ;
  371. 'FINSI' ;
  372. 'SI' WTAB.'RAYO' ;
  373. WTAB.'RAYONNEMENT' = CHTER.'RAYONNEMENT' ;
  374. 'FINSI' ;
  375. 'FINSI' ;
  376. 'SI' WTAB.'FOR_DIFF' ;
  377. WTAB.'CO2' =CHTER.'CO2';
  378. WTAB.'CLID'=CHTER.'CLID' ;
  379. 'FINSI' ;
  380. 'FINS';
  381.  
  382. 'SI' WTAB.'FOR_THER' ;
  383. estim.'TEMPERATURES' = WTAB.'TET2' ;
  384. estim.'REACTIONS_THERMIQUES'='REAC' WTAB.'CLIT' WTAB.'TET2';
  385. 'FINSI';
  386.  
  387. 'SI' WTAB.'FOR_DIFF' ;
  388. estim.'CONCENTRATIONS' = WTAB.'CO2' ;
  389. estim.'REACTIONS_DIFFUSIONS' ='REAC' WTAB.'CLID' WTAB.'CO2';
  390. 'FINSI' ;
  391. *** Reevaluation des donnees du calcul dependant de la temperature
  392. 'SI' WTAB.'PROCEDURE_REEV_THE' ;
  393. REEV_THE PRECED 1 ;
  394. 'FINSI' ;
  395.  
  396. *-----convergence mecanique thermique : reprise configuration ------
  397. *---------- du pas precedent pour refaire la mecanique -------------
  398. 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION');
  399. 'FORM' WTAB.'GE0_DEB';
  400. 'FINSI' ;
  401. 'FINSI' ;
  402. *################## fin du calcul d'un pas thermique #################
  403.  
  404.  
  405. *#######################################################################
  406. *#################### CALCUL D'UN PAS SI MECANIQUE #####################
  407. *#######################################################################
  408. 'SI' WTAB.'FOR_MECA' ;
  409. 'SAUT' 1 'LIGN';
  410. 'MESSAGE' ' Numero du pas : ' IPAS ' Indice d evolution : ' ICHG ' -> temps :' TI;
  411.  
  412. *--------------------- calcul de la temperature ---------------------
  413. * CB215821 : On met la thermique dans le Chargement pour 'TIRER' le chargement
  414. * au bon instant dans UNPAS pour la MECANIQUE
  415. * Il faudra faire de meme avec la MECANIQUE si la THERMIQUE en depend
  416. * 'SI' WTAB.'FOR_THER';
  417. * THTA1='TABLE';
  418. * THTA2='TABLE';
  419. * THTA1.0=TEMP0;
  420. * THTA1.1=TI;
  421. * THTA2.0= conti.'TEMPERATURES' 'ENLE' 'LX' ;
  422. * THTA2.1= estim.'TEMPERATURES' 'ENLE' 'LX' ;
  423. * CHTH='CHAR' 'T' THTA1 THTA2;
  424. * CHASANST= WTAB.'CHARGEMENT' 'ENLE' 'T';
  425. * WTAB.'CHARGEMENT'= CHASANST 'ET' CHTH;
  426. * 'FINSI';
  427. 'SI' WTAB.'CHAR_THE';
  428. WTAB.'TET2' ='TIRE' WTAB.'CHARGEMENT' 'T ' TI;
  429. 'FINSI';
  430.  
  431. *------- Caracteristiques initiales en cas de grands deplacements -----
  432. 'SI' WTAB.'ITCAR';
  433. 'SI' ('EGA' WTAB.'CARA' 'INCONNU');
  434. WTAB.'CARA' = WTAB.'MAT0';
  435. 'FINSI';
  436. 'FINSI';
  437.  
  438. ************************************************************************
  439. **************** APPEL A UNPAS ********************************
  440. ************************************************************************
  441. 'MENA' ;
  442. TT = UNPAS PRECED;
  443.  
  444. *---------- Mise a jour du MODELE du PAS precedent ---------------
  445. WTAB.'MO_TOT_PREC' = TT.'MO_TOT_PREC' ;
  446.  
  447. *---------- retour a la configuration initiale -------------------
  448. 'SI' (WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION');
  449. 'FORM' WTAB.'FOR0';
  450. 'FINSI';
  451.  
  452. *------- test si on a converge
  453. WTAB.'CONV' = TT.'CONV';
  454. 'SI' ('NON' TT.'CONV' 'ET' ('NON' WTAB.'CONVERGENCE_FORCEE'));
  455. * en dynamique et en poreux on garde le PRECED.FREA1 du dernier pas
  456. * converge (dans le cas ou on voudrait continuer le calcul)
  457. * 'SI' WTAB.'DYNAMIQUE' ; WTAB.'FREA1' = F1 ; 'FINSI';
  458. * 'SI' WTAB.'CONSOLIDATION' ;WTAB.'FREA1' = FF1 ; 'FINSI';
  459. 'ERREUR' 997 ;
  460. 'FINSI';
  461.  
  462. * Remplissage de la table ESTIMATION : champs en fin de pas
  463. DEP0= conti.'DEPLACEMENTS';
  464. * DEP = ENLEVER DEP0 'LX';
  465. estim.'DEPLACEMENTS'= TT.'ZU1' ;
  466. * 'DETRUIRE' DEP;
  467. estim.'DEFORMATIONS'= TT.'DEFF';
  468. estim.'CONTRAINTES' = TT.'SIGF' ;
  469. estim.'DFGRAD' = TT.'DFGRAD';
  470. 'SI' WTAB.'IPLAVI' ;
  471. estim.'VARIABLES_INTERNES' = TT.'VARF';
  472. estim.'DEFORMATIONS_INELASTIQUES' = TT.'DFPF';
  473. 'FINSI' ;
  474. 'SI' WTAB.'GRANDS_DEPLACEMENTS' ;
  475. estim.'FOR' = TT.'FOR' ;
  476. 'FINSI' ;
  477. 'SI' WTAB . 'DYNAMIQUE' ;
  478. estim.'VITESSES' = TT.'VITI' ;
  479. estim.'ACCELERATIONS' = TT.'ACCEI' ;
  480. 'FINSI';
  481. * 'SI' WTAB .'ITCAR';
  482. * estim.'CARA_ACTU' = TT.'CARA' ;
  483. * 'FINSI';
  484. *** Reevaluation des donnees du calcul dependant de la mecanique
  485. 'SI' WTAB.'PROCEDURE_REEV_MEC' ;
  486. REEV_MEC PRECED 1;
  487. 'FINSI' ;
  488. 'FINSI';
  489. *#######################################################################
  490. *################### FIN DU CALCUL D'UN PAS MECANIQUE ##################
  491. *#######################################################################
  492.  
  493.  
  494.  
  495. ***
  496. *** Test de la convergence mecanique thermique
  497. ***
  498. 'SI' WTAB.'CONVERGENCE_MEC_THE' ;
  499. * je cherche la convergence thermo-mecanique : je dois au moins
  500. * calculer deux fois mon probleme
  501. 'SI' (I_BOTH > 1) ;
  502. * Test sur toutes les composantes (notamment, si DIFFUSION)
  503. CHT1 = WTAB . 'THER_COURANT' ;
  504. DUABS2 = 'ABS' (WTAB.'THER_COURANTP' - CHT1) ;
  505. CRICOH1 = 0. ;
  506. NBINCO1 = 'DIME' WTAB . 'PRIM_TOT' ;
  507. 'REPE' BINCO1 NBINCO1 ;
  508. LINCOI1 = 'MOTS' ('EXTR' WTAB.'PRIM_TOT' &BINCO1) ;
  509. MDUABSI1 = 'MAXI' DUABS2 'AVEC' LINCOI1 ;
  510. NORMI1 = 'MAXI' 'ABS' CHT1 'AVEC' LINCOI1 ;
  511. 'SI' (NORMI1 '&lt;EG' (1.E-14 * MDUABSI1)) ;
  512. NORMI1 = 1. ;
  513. 'FINS' ;
  514. CRICOHI1 = MDUABSI1 / NORMI1 ;
  515. 'SI' (CRICOHI1 '>' CRICOH1) ;
  516. CRICOH1 = CRICOHI1 ;
  517. 'FINS' ;
  518. 'FIN' BINCO1 ;
  519.  
  520. WTAB.'CONV_THMEC' = CRICOH1 '<' (WTAB . 'CRITERE_COHERENCE') ;
  521. * Fin de boucle Si ne converge Pas
  522. 'SI'('NON' WTAB.'CONV_THMEC') ;
  523. 'SI' (I_BOTH >EG WTAB.'BOU_METH');
  524. 'MESS' 'PAS DE COHERENCE TROUVEE MECANIQUE THERMIQUE' ;
  525. 'ERREUR' 999;
  526. 'FINSI' ;
  527. 'FINSI' ;
  528. 'SINON' ;
  529. * je suis sur la premiere boucle de convergence thermomecanique
  530. WTAB.'CONV_THMEC' = FAUX ;
  531. 'FINSI' ;
  532. * THER_COURANTPrecedent dans WTAB pour test CONVERGENCE_MEC_THE
  533. WTAB . 'THER_COURANTP' = WTAB . 'THER_COURANT' ;
  534. 'SINON' ;
  535. * ici je ne cherche pas la convergence thermomecanique
  536. WTAB.'CONV_THMEC' = VRAI ;
  537. 'FINSI' ;
  538.  
  539. 'SI' (WTAB.'CONV_THMEC') ;
  540. 'QUITTER' BO_BOTH ;
  541. 'FINSI' ;
  542.  
  543. 'SI' ('NEG' ('TYPE' WTAB.'GE0_DEB') 'MOT') ;
  544. FORME WTAB.'GE0_DEB';
  545. 'FINSI' ;
  546.  
  547. 'FIN' BO_BOTH ;
  548.  
  549. *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  550. *++++++++++++++++ fin de boucle interne de convergence mec_ther ++++++++
  551. *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  552.  
  553. *----- Preparation du pas suivant : Thermique et Diffusion
  554. 'SI' WTAB.'FOR_THER';
  555. WTAB.'TET2' = estim.'TEMPERATURES' ;
  556. WTAB.'TET1'=WTAB.'TET2';
  557. 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT');
  558. WTAB.'TET0' = WTAB.'TET1' ;
  559. WTAB.'VIEUXPAS' = WTAB.'NOUV_PAS' ;
  560. WTAB.'RELAXATION_DUPONT' = CHTER.'RELAXATION_DUPONT';
  561. 'SI' ('EXIS' CHTER 'INITIAL(1)') ;
  562. WTAB.'TET1' = CHTER.'INITIAL(1)';
  563. 'FINSI' ;
  564. 'FINSI';
  565. 'FINSI' ;
  566.  
  567. 'SI' WTAB.'FOR_DIFF';
  568. WTAB.'CO1' = WTAB.'CO2' ;
  569. WTAB.'CO2' = estim.'CONCENTRATIONS' ;
  570. 'FINSI' ;
  571.  
  572. *----- Preparation du pas suivant : Mecanique
  573. 'SI' WTAB.'FOR_MECA' ;
  574. 'SI' ('EXISTE' TT 'SECOND_MEMBRE');
  575. WTAB . 'SECOND_MEMBRE' = TT . 'SECOND_MEMBRE' ;
  576. 'FINSI' ;
  577. 'SI' ('EXISTE' TT 'SUCCES');
  578. WTAB . 'SUCCES' = TT . 'SUCCES' ;
  579. 'FINSI' ;
  580. 'SI' ('EXISTE' TT 'AUTOCOEF');
  581. WTAB . 'AUTOCOEF' = TT . 'AUTOCOEF' ;
  582. 'FINSI' ;
  583. 'SI' ('EXISTE' TT 'AUTOREDU');
  584. WTAB . 'AUTOREDU' = TT . 'AUTOREDU' ;
  585. 'FINSI' ;
  586. 'SI' ('EXISTE' TT 'AUTORED1');
  587. WTAB . 'AUTORED1' = TT . 'AUTORED1' ;
  588. 'FINSI' ;
  589. 'SI' ('EXISTE' TT 'RIBLO_M');
  590. WTAB . 'RIBLO_M' = TT . 'RIBLO_M' ;
  591. WTAB . 'LISEA_M' = TT . 'LISEA_M' ;
  592. 'FINSI' ;
  593. 'SI' ('EXISTE' TT 'INCREMENT');
  594. WTAB . 'INCREMENT' = TT . 'INCREMENT' ;
  595. 'FINSI' ;
  596. 'SI' ('EXISTE' TT 'INITEMPS');
  597. WTAB . 'INITEMPS' = TT . 'INITEMPS' ;
  598. 'FINSI' ;
  599. 'SI' ('EXISTE' TT 'DT');
  600. WTAB . 'DT' = TT . 'DT' ;
  601. 'FINSI' ;
  602. 'SI' ('EXISTE' TT 'NBPLAS');
  603. WTAB . 'NBPLAS' = TT . 'NBPLAS' ;
  604. 'FINSI' ;
  605. 'SI' ('EXISTE' TT 'NOMBRE_ITERATIONS');
  606. WTAB . 'NOMBRE_ITERATIONS' = TT . 'NOMBRE_ITERATIONS' ;
  607. 'FINSI' ;
  608. 'SI' ('EXISTE' TT 'FFROT');
  609. WTAB . 'FFROT' = TT . 'FFROT' ;
  610. 'FINSI' ;
  611. 'SI' ('EXISTE' TT 'RESIDU');
  612. WTAB . 'RESIDU' = TT . 'RESIDU' ;
  613. 'FINSI' ;
  614. 'SI' ('EXISTE' TT 'FNONL');
  615. WTAB . 'FNONL' = TT . 'FNONL' ;
  616. 'FINSI' ;
  617. 'SI' ('EXISTE' TT 'DTPREC');
  618. WTAB . 'DTPREC' = TT . 'DTPREC' ;
  619. 'FINSI' ;
  620. * SP : Modification de WTAB.'TET2' suite a appel a UNPAS
  621. * CB : SI (IPILOT) ==> TET2 est TIRE entre TEMPS0 et TI
  622. 'SI' ('EXISTE' TT 'TET2');
  623. WTAB . 'TET2' = TT . 'TET2' ;
  624. 'FINSI' ;
  625. 'SI' ('EXISTE' TT 'XDENO');
  626. WTAB . 'XDENO' = TT . 'XDENO' ;
  627. 'FINSI' ;
  628. 'SI' ('EXISTE' TT 'XDENOM');
  629. WTAB . 'XDENOM' = TT . 'XDENOM' ;
  630. 'FINSI' ;
  631. 'SI' ('EXISTE' TT 'LASTKTAN');
  632. WTAB . 'LASTKTAN' = TT . 'LASTKTAN' ;
  633. 'FINSI' ;
  634. 'SI' ('EXISTE' TT 'DFGRAD');
  635. WTAB . 'DFGRAD'= TT .'DFGRAD';
  636. 'FINSI' ;
  637. 'SI' ('EXIS' TT 'ETHER2');
  638. WTAB.'ETHER1'= TT.'ETHER2';
  639. WTAB.'ETHER2'= TT.'ETHER2';
  640. 'FINSI';
  641. 'SI' ('EXIS' TT 'MSRTHER2');
  642. WTAB.'MSRTHER1'= TT.'MSRTHER2';
  643. WTAB.'MSRTHER2'= TT.'MSRTHER2';
  644. 'FINSI';
  645. 'SI' ('EXIS' TT 'DEFOR2');
  646. WTAB.'DEFOR1'= TT.'DEFOR2';
  647. WTAB.'DEFOR2'= TT.'DEFOR2';
  648. 'FINSI';
  649. 'SI'('EXIS' TT 'ETAT2');
  650. WTAB.'ETAT1'= TT.'ETAT2';
  651. 'FINSI';
  652.  
  653. * fin des reactualisations.
  654. *--------------------------- deplacement ------------------------------
  655. TT.'DEPTOT' = estim.'DEPLACEMENTS' ;
  656. *-------------------- forces de reaction ------------------------------
  657. TT.'REAC'= 'REAC' TT.'DEPTOT' WTAB.'CLIM';
  658. estim.'REACTIONS' = TT.'REAC' ;
  659. *------------------ deformation d'origine thermique ------------------
  660. 'SI' WTAB.'CHAR_THE';
  661. WTAB.'ETHER2' = TT.'ETHER2' ;
  662. 'SI' WTAB.'POR1' ;
  663. WTAB.'MSRTHER2' = TT.'MSRTHER2';
  664. 'FINSI';
  665. 'FINSI';
  666. *------- en dynamique : vitesse, forces de reactions, operateur -------
  667.  
  668. 'SI' WTAB . 'DYNAMIQUE' ;
  669. 'SI' WTAB . 'LIAISON_PERSISTANTE' ;
  670. * corection des vitesses pour avoir des vitesses relatives nulles
  671. * aux points qui sont en contact
  672. TT.'VITI' = TT.'VITI' + TT.'VAUX' ;
  673. 'SINON' ;
  674. * forces d'acceleration et d'amortissement a la fin du pas *
  675. WTAB.'FREA1' = TT.'FOPL' - TT.'REAC';
  676. * en cas d'appuis unilateraux avec choc elastique essai de corriger
  677. * les vitesses fournies par le schema
  678.  
  679. TT.'VITI'= VITEUNIL TT.'ZRAIDV' WTAB.'MASSE' TT.'VITI'
  680. tt.'DEPT' DEP0 WTAB.'DT' WTAB.'SECOND_MEMBRE' WTAB;
  681. 'SI' ( 'EXIS' WTAB 'RATE_VITEUNIL');
  682. 'ERREUR' 'Probleme dans viteunil' ; 'FINSI';
  683. 'FINSI' ;
  684. 'SI' ( 'NEG' WTAB.'REAPREC' 'INCONNU');
  685. 'SI' ('EGA' ('TYPE' (EXTR TT.'REAC' 'MAIL')) 'MAILLAGE');
  686. reacdif='REDU' WTAB.'REAPREC' (EXTR TT.'REAC' 'MAIL');
  687. TT.'REAC'= TT.'REAC' - REACDIF;
  688. 'FINSI' ;
  689. WTAB.'REAPREC'=TT.'REAC';
  690. 'SINON';
  691. WTAB . 'REAPREC'= TT.'REAC';
  692. 'FINSI';
  693. estim.'VITESSES' = TT.'VITI' ;
  694. estim.'REACTIONS' = TT.'REAC' ;
  695. 'FINSI';
  696.  
  697. *---------- en consolidation : operateur ------------------------------
  698. 'SI' WTAB . 'CONSOLIDATION' ;
  699. WTAB.'OPERATEUR' = ROP;
  700. 'FINSI';
  701.  
  702. *-------------------------- configuration -----------------------------
  703.  
  704. 'SI' WTAB.'GRANDS_DEPLACEMENTS' ;
  705. WTAB.'RECALCUL'= VRAI ;
  706. WTAB.'GE0_DEB' = TT.'FOR' ;
  707. 'SI' WTAB.'ITCAR' ;
  708. WTAB.'CARA' = TT.'CARA' ;
  709. 'FINSI' ;
  710. 'FINSI';
  711. 'FORM' WTAB.'FOR0';
  712.  
  713. ***********************************************************************
  714. 'SI' ('ET' (WTAB.'FEFP_FORMULATION')
  715. (WTAB.'UPDATE_LAGRANGIAN')) ;
  716. * tc 'SI' ( 'NEG' WTAB.'FOR' 'INCONNU'); DETR GEOM1; 'FINSI';
  717. WTAB.'GE0_DEB' = TT.'FOR' ; WTAB.'RECALCUL'=VRAI;
  718. 'FINSI';
  719. ************************************************************************
  720.  
  721. *--------------------- destruction de l operateur ----------------------
  722.  
  723. 'SI' (WTAB . 'RECADET') ;
  724. * 'DETR' RH 'ELEM';
  725. 'OUBLIER' ROP;
  726. 'FINSI';
  727.  
  728. *----------------------------- temps initial --------------------------
  729. DT2 =( TI - TEMP0)/10000.;
  730. 'SI' (WTAB . 'AUTOMATIQUE' 'OU' ('NON' WTAB.CONV));
  731. TEMP0 = ( TI - TEMP0) * WTAB.'AUTOCOEF' + TEMP0;
  732. 'MESS' ' Temps effectivement calcule et non converge : ' TEMP0;
  733. WTAB.'TEMPS0' = TEMP0;
  734. 'SINON';
  735. TEMP0=TI;
  736. WTAB.'TEMPS0' = TEMP0;
  737. 'FINSI';
  738.  
  739. *----------------- Appel a une procedure personnelle -------------------
  740.  
  741. 'SI' (WTAB.'PROCEDURE_PERSO1');
  742. PRECED.'PERSO1_APPEL' = 2 ;
  743. PERSO1 PRECED;
  744. 'SI' ('EXIS' PRECED 'ARRET') ;
  745. WTAB . 'ARRET' = PRECED . 'ARRET' ;
  746. 'FINSI' ;
  747. TEMP0 = WTAB.'TEMPS0' ;
  748. 'FINSI';
  749. *----------------- On redefinit WTAB.'CHARGEMENT_I' ------------------
  750. 'SI' WTAB.'CONVERGENCE_MEC_THE' ;
  751. WTAB.'CHARGEMENT_I' = WTAB.'CHARGEMENT' ;
  752. 'FINSI';
  753. 'FINSI';
  754.  
  755. *++++++++++++++++++ fin preparation pas suivant mecanique +++++
  756. *################## Sauvegarde ###############################
  757. 'SI' ('NON' WTAB.'FOR_MECA') ;
  758. DT2 =( TI - TEMP0)/10000.;
  759. TEMP0=TI;
  760. WTAB.'TEMPS0' = TEMP0;
  761. TT = 'TABLE' ;
  762. 'FINSI';
  763. * pour ne pas sauvegarder la matrice de raideur si on doit la recalculer
  764. 'SI' ('EXIS' WTAB 'RRRR') ;
  765. 'SI' WTAB.'RECARI' ;
  766. WTAB ='ENLE' WTAB 'RRRR' ;
  767. PRECED.'WTABLE'= WTAB ;
  768. 'SI' ('EXIS' estim 'FOR') ;
  769. estim ='ENLE' estim 'FOR' ;
  770. PRECED.'ESTIMATION'=estim ;
  771. 'FINSI';
  772. 'FINSI';
  773. 'FINSI';
  774.  
  775. *-- remplissage de la table de continuation et des tables de resultats
  776. *-- s'il faut garder les resultats, sauvegarde incrementale et
  777. *-- fantomisation si economique
  778. ISAUV = PAS_RESU TEMP0 iauto PRECED ;
  779.  
  780. *******************************************
  781. ***** cas du pilotage automatique *******
  782. *******************************************
  783.  
  784. 'SI' WTAB . 'AUTOMATIQUE'; IAUTO=IAUTO+1;
  785. 'SI' ((WTAB . 'AUTOCOEF' 'EGA' 0.9999999D0) 'OU'
  786. (TEMP0 '>EG' TI)) ;
  787. TEMP0=TI;
  788. 'MESS' ' Objectif atteint ';
  789. 'MESS' ' ';
  790. WTAB.'AUTODEUX' = FAUX ;
  791. WTAB.AUTORED1 = 0 ;
  792. WTAB.AUTOREDU = 1. ;
  793. IAUTO=1;
  794. 'SINON';
  795. 'MESS' ' Objectif non atteint: On recommence';
  796. 'MESS' ' ';
  797. 'SI' ( IAUTO >EG WTAB.'AUTOPAS');
  798. 'ERREUR' 1000;
  799. * 'MESS' 'Pilotage non converge apres ' IAUTO ' pas.';
  800. 'FINSI';
  801. WTAB.'AUTODEUX'=VRAI;ICHG=ICHG - 1;
  802. 'FINSI';
  803. 'FINSI';
  804. *
  805. 'SI'(WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER');
  806. WTAB.'TET1'=WTAB.'TET2';
  807. 'SI' WTAB.'FOR_MECA';
  808. WTAB.'ETHER1' =WTAB.'ETHER2';
  809. 'FINSI';
  810. 'SI' WTAB.'POR1';
  811. WTAB.'MSRTHER1'=WTAB.'MSRTHER2';
  812. 'FINSI';
  813. 'FINSI' ;
  814. 'SI' WTAB.'CHAR_DEFI' ; WTAB.'DEFOR1'=WTAB.'DEFOR2';'FINSI';
  815. 'SI' WTAB.'FOR_DIFF' ; WTAB.'CO1' =WTAB.'CO2' ;'FINSI' ;
  816. ************************************************************************
  817. ****** cas de la convergence forcee
  818. ************************************************************************
  819. 'SI' WTAB.'PAS_AJUSTE';
  820. 'SI' ((TI < TIV) 'OU' ('NON' WTAB.'CONV')); ICHG=ICHG-1;'FINSI';
  821. 'FINSI';
  822. 'SI' WTAB.'ARRET';
  823. 'QUITTER' BEXTERN;
  824. 'FINSI';
  825. ************************************************************************
  826. *************** FIN DE LA BOUCLE SUR LES PAS DE TEMPS ******************
  827. ************************************************************************
  828. 'FIN' BEXTERN;
  829. ************************************************************************
  830.  
  831. 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU');
  832. WTAB.'AMORTISSEMENT' = TOTO ;
  833. 'FINSI';
  834.  
  835. 'SI' ('NEG' ('TYPE' WTAB.'GE0_DEB') 'MOT') ;
  836. 'OUBL' WTAB 'GE0_DEB' ;
  837. 'FINSI' ;
  838.  
  839. * on tue WTAB.'MAT1' s'il existe car il peut etre tres gourmand en place
  840. WTAB.'MAT1' = 'MOT' 'INCONNU';
  841.  
  842. 'MESS' ' ';
  843. 'MESS'
  844. '------------------- FIN DE LA PROCEDURE PASAPAS ---------------------';
  845. 'SAUT' 1 'LIGNE';
  846. *
  847. ************************************************************************
  848. *
  849. 'SI' ('EXIS' WTAB 'RRRR') ;
  850. * pour forcer le calcul de la rigidite si on rappele pasapas
  851. WTAB1= 'ENLEVER' WTAB 'RRRR';
  852. PRECED .'WTABLE'= WTAB1;
  853. 'FINSI';
  854.  
  855. * Typage de la table en sortie de PASAPAS ;
  856. PRECED.'SOUSTYPE' = 'MOT' 'PASAPAS' ;
  857.  
  858. 'FINPROC' PRECED ;
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  

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