Télécharger pasapas.procedur

Retour à la liste

Numérotation des lignes :

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

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