Télécharger pasapas.procedur

Retour à la liste

Numérotation des lignes :

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

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