Télécharger pasapas.procedur

Retour à la liste

Numérotation des lignes :

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

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