Télécharger transnon.procedur

Retour à la liste

Numérotation des lignes :

  1. * TRANSNON PROCEDUR FANDEUR 21/03/09 21:15:08 10915
  2. 'DEBPROC' TRANSNON PRECED*'TABLE';
  3. *----------------------------------------------------------------------*
  4. * *
  5. * T R A N S N O N *
  6. * --------------- *
  7. * *
  8. * RESOLUTION D'UN PROBLEME DE THERMIQUE TRANSITOIRE NON-LINEAIRE *
  9. * METHODE A UN PAS DE TEMPS ( THETA SCHEMA ) *
  10. * *
  11. * ETAB, TABLE CONTENANT EN ENTREE : *
  12. * *
  13. * INDICE 'TET1' CHAMP DE TEMPERATURE INITIAL AU PAS 0 *
  14. * INDICE 'RAYO' LOGIQUE VALANT VRAI POUR UNE CONDITION *
  15. * DE RAYONNEMENT *
  16. * INDICE 'EMISSIVITE' MCHAML DECRIVANT LES FACTEURS D'EMISSIVITE*
  17. * NOM DE LA COMPOSANTE : EMIS *
  18. * INDICE 'CELSIUS' LOGIQUE VALANT VRAI SI L'UNITE EST LE *
  19. * DEGRE CELSIUS (CAPITAL SI RAYONNEMENT) *
  20. * INDICE 'MOD_THE' OBJET MODELE THERMIQUE *
  21. * INDICE 'MOD_CON' OBJET MODELE CONVECTION *
  22. * INDICE 'BLOCAGES_THERMIQUES' MATRICE DE BLOCAGE *
  23. * INDICE 'MAT_THE' OBJET MATERIAU THERMIQUE. *
  24. * CE CHAMP PEUT AVOIR DES COMPOSANTES DE *
  25. * TYPE FLOTTANT OU EVOLUTION (ABS-ORD). *
  26. * ABS : VARIABLE QUELCONQUE *
  27. * ORD : VALEUR DE LA COMPOSANTE CONCERNE POUR*
  28. * LA VALEUR ABS. *
  29. * INDICE 'MAT_CON' OBJET MATERIAU CONVECTION *
  30. * INDICE 'CHARGEMENT' CHARGEMENT DECRIVANT LES *
  31. * VALEURS DES VARIABLES EXTERNES (EX: TE, *
  32. * FLUX,TEMPERATURES IMPOSEES ,...) *
  33. * INDICE 'PHASE' LOGIQUE VALANT VRAI SI CHGT DE PHASE *
  34. * INDICE 'TEMPS0' TEMPS INITIAL (CORRESPOND A TET1) *
  35. * INDICE 'TEM_CALC' LISTREEL : TEMPS DES RESULTATS A CALCULER *
  36. * INDICE 'RELAXATION_THETA' VALEUR DU COEFFICIENT DE RELAXATION *
  37. * (VALEUR PAR DEFAUT 0.5) *
  38. * INDICE 'SOUS_RELAXATION' VALEUR DU COEFF. DE SOUS-RELAXATION *
  39. * (VALEUR PAR DEFAUT 0.5) *
  40. * INDICE 'PRECISION' VALEUR DU CRITERE DE CONVERGENCE *
  41. * (VALEUR PAR DEFAUT 1.E-4) *
  42. * INDICE 'MAXITERATION' NOMBRE MAXIMUM D'ITERATIONS AUTORISEES *
  43. * INDICE PROJECTION LOGIQUE VALANT VRAI SI COUPLAGE ET SI LE *
  44. * MAILLAGE DE LA MECANIQUE ET DE LA THERMIQUE*
  45. * EST DIFFERENT *
  46. * *
  47. * ETAB CONTIENT EN SORTIE *
  48. * *
  49. * INDICE INITIAL(2) DERNIER CHAMP DE TEMPERATURE CALCULE *
  50. * *
  51. * REMARQUE : CERTAINES VARIABLES ONT DES NOMS IMPOSES. *
  52. * LE TEMPS : TEMPS *
  53. * LA TEMPERATURE : T *
  54. * LA TEMPERATURE EXTERIEURE : TE *
  55. * LES TEMPERATURES IMPOSEES : TIMP *
  56. * LES FLUX : Q *
  57. * *
  58. * LE NOM DES AUTRES VARIABLES EST LAISSE AU CHOIX DE *
  59. * L'UTILISATEUR *
  60. * *
  61. ************************************************************************
  62. * Recuperation de l'information contenue dans ETAB *
  63. ************************************************************************
  64. ERR_VAL = FAUX ;
  65. STAB ='TABL' ;
  66. ETAB = PRECED.'WTABLE';
  67.  
  68. LPRIM1 = ETAB.'PRIM_TOT' ;
  69. LDUAL1 = ETAB.'DUAL_TOT' ;
  70. LPRIM2 =('MOTS' 'TEMP') 'ET' LPRIM1 ;
  71. NBDUA1 = 'DIME' LDUAL1 ;
  72.  
  73. * Appel a PAS_MODL :
  74. * Mise a jour des indices de PRECED.WTABLE relatifs aux modeles
  75. * si PRECED.WTABLE.MODELE a ete modifie
  76. PAS_MODL PRECED ;
  77.  
  78. MODMEC = ETAB.'MO_TOT' ; 'COMM' 'Formulation MECANIQUE & POREUX' ;
  79.  
  80. MODTOT = ETAB.'MOD_TOT' ; 'COMM' 'Formulation THERMIQUE & THERMOHYDRIQUE & DIFFUSION' ;
  81. MATTOT0 ='REDU' MODTOT ETAB.'MAT_TOT' ;
  82. MAILTOT ='EXTR' MODTOT 'MAIL';
  83.  
  84. * -------------- presence de conduction
  85. ICONDU = ETAB.'CONDUCTION';
  86. 'SI' ICONDU;
  87. MATCOND0=ETAB.'MAT_COND';
  88. MODCOND =ETAB.'MOD_COND';
  89. 'FINS';
  90.  
  91. * -------------- presence de convection
  92. ICONVE= ETAB.'CONVECTION' ;
  93. 'SI' ICONVE;
  94. MATCONV0=ETAB.'MAT_CON';
  95. MODCONV =ETAB.'MOD_CON';
  96. 'FINS';
  97.  
  98. * -------------- presence d'advection
  99. IADVEC=ETAB.'ADVECTION';
  100. 'SI' IADVEC;
  101. MATADV0 = ETAB.'MAT_ADV';
  102. MODADV = ETAB.'MOD_ADV';
  103. 'FINS';
  104.  
  105. * -------------- presence de rayonnement
  106. IRADI = ETAB.'RAYO';
  107. 'SI' IRADI ;
  108. MATRAY0 = ETAB.'MAT_RAY';
  109. MODRAY = ETAB.'MOD_RAY';
  110. 'SI' ('NON' ('EXIS' ETAB 'CTE_STEFAN_BOLTZMANN')) ;
  111. CTE_SB = 5.67037321E-8 ;
  112. 'MESS' 'ATTENTION ! Constante de Stefan-Boltzmann en unites SI' ;
  113. 'MESS' ' soit ' CTE_SB ;
  114. ETAB.'CTE_STEFAN_BOLTZMANN' = CTE_SB ;
  115. 'FINS' ;
  116. 'FINS' ;
  117.  
  118. * -------------- presence de sources de chaleur
  119. ISOURQ = ETAB.'SOURCE_Q';
  120. 'SI' ISOURQ ;
  121. MATSOQ0 = ETAB.'MAT_SOQ';
  122. MODSOQ = ETAB.'MOD_SOQ';
  123. 'FINS';
  124.  
  125. * -------------- presence de changement de phase
  126. IPHASE =ETAB.'PHASE';
  127. 'SI' IPHASE;
  128. MODPHA = ETAB.'MOD_PHA' ;
  129. MATPHA0 = ETAB.'MAT_PHA' ;
  130. BLOPHA = ETAB.'BLO_PHASE';
  131. PROPHA0 = ETAB.'PROPPHAS' ;
  132. PROPHA1 = PROPHA0 ;
  133. 'FINS';
  134.  
  135. * -------------- presence Modele Metallurgie (T.L. en juin 2018)
  136. IMETAL = ETAB.'FOR_METALLU' ;
  137. 'SI' IMETAL;
  138. MODMET = ETAB.'MOD_MET' ;
  139. PHA_MET0= PRECED.'ESTIMATION'.'PROPORTIONS_PHASES' ;
  140. 'FINS';
  141.  
  142. * -------------- presence de thermohydrohydrique
  143. ITHM1=ETAB.'THM1';
  144. 'SI' ITHM1;
  145. MATTHM0 = ETAB.'MAT_THM';
  146. MODTHM = ETAB.'MOD_THM';
  147. 'FINS';
  148.  
  149. * -------------- presence de diffusion
  150. IDIFF=ETAB.'FOR_DIFF';
  151. 'SI' IDIFF;
  152. MATDIF0 = ETAB.'MAT_DIF' ;
  153. MODDIF = ETAB.'MOD_DIF' ;
  154. 'FINS';
  155.  
  156. * CB215821 : Je crois que 'RIBLO_T' et 'LISEA_T' ne sont jamais remplis... (Voir pasapas ; pas_defa ; transnon)
  157. IRIB = 'NEG' ETAB.'RIBLO_T' 'INCONNU' ;
  158. 'SI' IRIB;
  159. RIBL_VAL = ETAB.'RIBLO_T' ;
  160. LISE_VAL = ETAB.'LISEA_T' ;
  161. 'FINS' ;
  162.  
  163. * Parallelisation automatique des calculs ?
  164. IPARAL ='EGA' ETAB.'PROCESSEURS' 'AUTOMATIQUE' ;
  165. 'OPTI' 'PARA' IPARAL ;
  166.  
  167. 'SI' IPARAL ;
  168. NBPART=ETAB.'NBPART';
  169.  
  170. MODRTOT ='PART' 'ARLE' MODTOT NBPART ;
  171. MATRTOT0 ='REDU' MATTOT0 MODRTOT ;
  172. 'SI' ICONDU;
  173. MODRCOND='PART' 'ARLE' MODCOND NBPART ;
  174. MATRCOND='REDU' MATCOND0 MODRCOND ;
  175. 'FINS';
  176. 'SI' ICONVE;
  177. MODRCON ='PART' 'ARLE' MODCONV NBPART ;
  178. MATRCON ='REDU' MATCONV0 MODRCON ;
  179. 'FINS';
  180. 'SI' IADVEC;
  181. MODRADV ='PART' 'ARLE' MODADV NBPART ;
  182. MATRADV ='REDU' MATADV0 MODRADV ;
  183. 'FINS' ;
  184. 'SI' IRADI;
  185. MODRRAY ='PART' 'ARLE' MODRAY NBPART ;
  186. MATRRAY ='REDU' MATRAY0 MODRRAY ;
  187. 'FINS';
  188. 'SI' ISOURQ;
  189. MODRSOQ ='PART' 'ARLE' MODSOQ NBPART ;
  190. MATRSOQ ='REDU' MATSOQ0 MODRSOQ ;
  191. 'FINS';
  192. 'SI' IPHASE;
  193. MODRPHA ='PART' 'ARLE' MODPHA NBPART ;
  194. MATRPHA ='REDU' MATPHA0 MODRPHA ;
  195. 'FINS';
  196. 'SI' IMETAL;
  197. MODRMET ='PART' 'ARLE' MODMET NBPART ;
  198. PHA_MET0='REDU' PHA_MET0 MODRMET ;
  199. 'FINS';
  200. 'SI' ITHM1;
  201. MODRTHM ='PART' 'ARLE' MODTHM NBPART ;
  202. MATRTHM ='REDU' MATTHM0 MODRTHM ;
  203. 'FINS' ;
  204. 'SI' IDIFF ;
  205. MODRDIFF='PART' 'ARLE' MODDIF NBPART ;
  206. MATRDIFF='REDU' MATDIF0 MODRDIFF ;
  207. 'FINS' ;
  208.  
  209. 'SINO' ;
  210. MODRTOT = MODTOT ;
  211. MATRTOT0 = MATTOT0 ;
  212. 'SI' ICONDU;
  213. MODRCOND= MODCOND ;
  214. MATRCOND= MATCOND0;
  215. 'FINS';
  216. 'SI' ICONVE;
  217. MODRCON = MODCONV ;
  218. MATRCON = MATCONV0;
  219. 'FINS';
  220. 'SI' IADVEC;
  221. MODRADV = MODADV ;
  222. MATRADV = MATADV0 ;
  223. 'FINS';
  224. 'SI' IRADI;
  225. MODRRAY = MODRAY ;
  226. MATRRAY = MATRAY0 ;
  227. 'FINS';
  228. 'SI' ISOURQ;
  229. MODRSOQ = MODSOQ ;
  230. MATRSOQ = MATSOQ0 ;
  231. 'FINS';
  232. 'SI' IPHASE;
  233. MODRPHA = MODPHA ;
  234. MATRPHA = MATPHA0 ;
  235. 'FINS';
  236. 'SI' IMETAL;
  237. MODRMET =MODMET ;
  238. 'FINS';
  239. 'SI' ITHM1;
  240. MODRTHM = MODTHM ;
  241. MATRTHM = MATTHM0 ;
  242. 'FINS';
  243. 'SI' IDIFF;
  244. MODRDIFF = MODDIF ;
  245. MATRDIFF = MATDIF0 ;
  246. 'FINS' ;
  247. 'FINS' ;
  248.  
  249. *------- Initialisation de la liste des temps a calculer ---------
  250. TE_CALC = ETAB.'TEM_CALC' ;
  251. DCALC ='DIME' TE_CALC ;
  252. ITE_IT = 0 ;
  253.  
  254. *-------------- Calcul du premier pas de calcul -------------------
  255. TEM0 = ETAB.'TEMPS0' ;
  256. TEM1 ='EXTR' TE_CALC 1;
  257. T_PAS = TEM1 - TEM0 ;
  258.  
  259. *-------------- modif pour recuperer le temps du dernier pas de calcul
  260. TEM_VAL = TEM1 ;
  261. *-------------- fin de modif -----------------------------------------
  262.  
  263. *---- Initialisation de la valeur du critere de fin d'iteration ---
  264. ZPREC1 = ETAB.'PRECISION' ;
  265.  
  266. *--------- Initialisation du nombre d'iterations autorisees -------
  267. 'SI' ('EXIS' ETAB 'MAXITERATION');
  268. MAX1 = ETAB.'MAXITERATION';
  269. 'SINO';
  270. MAX1 = 150;
  271. 'FINS';
  272.  
  273. *-------- Recherche des variables selon lesquelles varie ----------
  274. *---------------------- le champ de materiau ----------------------
  275. * Si couplage, on regarde les caracteristiques variables du modele complet
  276. si ETAB.'COUPLAGE' ;
  277. LVAREX = 'EXTR' (ETAB.'CARACTERISTIQUES') 'DEVA';
  278. sino ;
  279. LVAREX = 'EXTR' MATTOT0 'DEVA';
  280. fins ;
  281. ILVA = 'DIME' LVAREX;
  282. IMATCHG = 'EXIS' LVAREX 'TEMP' ;
  283. NONLIN1 = (('EGA' ILVA 1) 'ET' ('NON' IMATCHG))
  284. 'OU' ('>EG' ILVA 2)
  285. 'OU' ETAB.'PROCEDURE_PARATHER' ;
  286. 'SI' NONLIN1 ;
  287. 'SI' ETAB.'COUPLAGE';
  288. CONTI=PRECED.'CONTINUATION';
  289. *--- Creation du MCHAML contenant tous les parametres mecaniques --
  290. *-------- Ces parametres sont determines au temps TEM0 ------------
  291. *----- Ces parametres sont projetes sur le maillage thermique -----
  292. DEP1 ='CHAN' 'CHAM' CONTI.'DEPLACEMENTS' MODMEC 'NOEUD';
  293. CON1 ='CHAN' 'NOEUD' CONTI.'CONTRAINTES' MODMEC ;
  294. CHAR1_ME = DEP1 'ET' CON1 ;
  295. * 'SI' ('EXIS' CONTI 'VITESSES');
  296. * VIT1 = 'CHAN' 'CHAM' CONTI.'VITESSES' MODMEC 'NOEUD';
  297. * CHAR1_ME = CHAR1_ME 'ET' VIT1;
  298. * 'FINS';
  299. 'SI' ('EXIS' CONTI 'VARIABLES_INTERNES');
  300. VAR1 ='CHAN' 'NOEUD' CONTI.'VARIABLES_INTERNES' MODMEC ;
  301. CHAR1_ME = CHAR1_ME 'ET' VAR1 ;
  302. * DEF1 ='CHAN' 'NOEUD' ETAB.'DEI_EST' MODMEC ;
  303. * CHAR1_ME = CHAR1_ME 'ET' VAR1 'ET' DEF1;
  304. 'FINS';
  305. 'SI' ETAB.'PROJECTION';
  306. CHAR_ME ='CHAN' 'CHAM' ('PROI' MAILTOT CHAR1_ME) MODRTOT 'RIGIDITE';
  307. 'SINO';
  308. CHAR_ME ='CHAN' 'CHAM' ('CHAN' 'CHPO' CHAR1_ME MODMEC) MODRTOT 'RIGIDITE';
  309. 'FINS';
  310. 'FINS';
  311. 'FINS';
  312.  
  313. *-----------recherche des composantes de materiau qui varient et initialisation
  314. * --------- des logiques de recalcul des matrices.-------------------
  315. LCOREX = 'EXTR' MATTOT0 'COVA' ;
  316.  
  317. IKDEP =('EXIS' LCOREX 'K ') 'OU' ('EXIS' LCOREX 'K1 ') 'OU' ('EXIS' LCOREX 'K11 ') ;
  318. ICDEP =('EXIS' LCOREX 'RHO ') 'OU' ('EXIS' LCOREX 'C ') 'OU' ('EXIS' LCOREX 'M ') ;
  319. IECDEP = 'EXIS' LCOREX 'H ' ;
  320. IKDDEP =('EXIS' LCOREX 'KD ') 'OU' ('EXIS' LCOREX 'KD1 ') 'OU' ('EXIS' LCOREX 'KD11') ;
  321. ICDDEP = 'EXIS' LCOREX 'CDIF' ;
  322. IKVITE = 'EXIS' LCOREX 'VITE' ;
  323.  
  324. ICPCONS = ETAB.'CAPACONST' ;
  325. IKCONS = ETAB.'CONDCONST' ;
  326.  
  327. 'SI' ITHM1 ;
  328. IKDEP= VRAI ;
  329. ICDEP= VRAI ;
  330. 'FINS' ;
  331.  
  332. *------- Cas particulier ou il n'y a pas de CAPACITE ------------------*
  333. *- Ceci correspond au cas ou, au moins, une des 2 composantes 'C ' -*
  334. *- et/ou 'RHO ' n'est pas definie dans le materiau (facultatives). -*
  335. LCOMPM = 'EXTR' MATTOT0 'COMP' ;
  336.  
  337. ICAPATH = ETAB.'FOR_THER' 'ET' ('EXIS' LCOMPM 'C ') 'ET' (('EXIS' LCOMPM 'RHO ') 'OU' ('EXIS' LCOMPM 'M '));
  338. ICAPADI = IDIFF 'ET' ('EXIS' LCOMPM 'CDIF') ;
  339. ICAPA = ICAPATH 'OU' ICAPADI 'OU' ICPCONS ;
  340. 'SI' ('NON' ICAPATH) ;
  341. ICDEP = FAUX ;
  342. 'FINS' ;
  343. 'SI' ('NON' ICAPADI) ;
  344. ICDDEP = FAUX ;
  345. 'FINS' ;
  346.  
  347. *---------- Initialisation de l'unite de temperature --------------
  348. 'SI' ('EXIS' ETAB 'CELSIUS');
  349. ICELS = ETAB.'CELSIUS' 'ET' ETAB.'FOR_THER' ;
  350. 'SINO';
  351. ICELS = FAUX;
  352. 'FINS';
  353.  
  354. *---------- Initialisation de la temperature de reference----------
  355. 'SI' ICELS;
  356. TREF = 273.15 ;
  357. 'SINO';
  358. TREF = 0. ;
  359. 'FINS';
  360. ETAB.'TREF'=TREF;
  361.  
  362. *----------- Initialisation du champ de temperatures ------------
  363. CHTREF ='VIDE' 'CHPOINT' / 'DIFFUS' ;
  364. U0 ='VIDE' 'CHPOINT' / 'DIFFUS' ;
  365. 'SI' ETAB.'FOR_THER' ;
  366. U0 = ETAB.'TET1';
  367. 'SI' ICELS ;
  368. CHTREF =(0. * U0) + TREF ;
  369. 'FINS' ;
  370. 'FINS' ;
  371.  
  372. 'SI' IDIFF ;
  373. U0 = U0 'ET' ETAB.'CO1';
  374. 'FINS' ;
  375.  
  376. ETAB.'THER_COURANT' = U0 ;
  377. U0MTREF = U0 ;
  378. U0 = U0 + CHTREF ;
  379.  
  380. *---------- y-a-t-il definition des coefficients lambda ----------
  381. * En regime stationnaire (sans CAPACITE), ou en presence d'advection on force LAMBDA1 a 1.
  382. * SINO on ne resout pas le bon probleme !
  383. 'SI' (IADVEC 'OU' ('NON' ICAPA)) ;
  384. LAMBDA1 = 1. ;
  385. 'SINO';
  386. 'SI' ( 'EXIS' ETAB 'RELAXATION_THETA' ) ;
  387. LAMBDA1 = ETAB.'RELAXATION_THETA' ;
  388. 'SINO' ;
  389. LAMBDA1 = 1. ;
  390. 'FINS' ;
  391. 'FINS' ;
  392. ETAB.'RELAXATION_THETA' = LAMBDA1 ;
  393.  
  394.  
  395. 'SI' ('<EG' (LAMBDA1 - 1.0) 1.E-6) ;
  396. I_LAMBD1 = 3 ;
  397. 'SINO' ;
  398. 'SI' ('<EG' (LAMBDA1 - 0.5) 1.E-6) ;
  399. I_LAMBD1 = 2 ;
  400. 'SINO' ;
  401. 'SI' ('<EG' LAMBDA1 1.E-6) ;
  402. I_LAMBD1 = 1 ;
  403. 'SINO' ;
  404. I_LAMBD1 = 0 ;
  405. 'FINS' ;
  406. 'FINS' ;
  407. 'FINS' ;
  408.  
  409. *---- En cas de rayonnement : recalcul des facteurs de forme -----------
  410. *---- Si geometrie modifiee ou s'il n'existent pas, --------------
  411. 'SI' IRADI ;
  412. ETAB.'CHMAT' = MATTOT ;
  413. IAPPEL = 2 ;
  414. t_rayo = PAS_RAYO PRECED tem1 IAPPEL ;
  415. t_rayo ='MOT' 'INCONNU' ;
  416. 'FINS' ;
  417.  
  418. ********************************************************************
  419. * Rappel des donnees du probleme *
  420. ********************************************************************
  421. 'SI' ETAB.'MESSTHER' ;
  422. ETAB.'MESSTHER' = FAUX ;
  423. 'SI' ICAPA ;
  424. 'MESS' ' *** Probleme TRANSITOIRE ' ;
  425. 'SINO' ;
  426. 'MESS' ' *** Probleme STATIONNAIRE' ;
  427. 'FINS' ;
  428.  
  429. 'SI' ('EGA' ETAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE');
  430. 'MESS' ' *** Methode a un pas de temps (theta methode) ' ;
  431. 'SINO';
  432. 'MESS' ' *** Methode a deux pas de temps (DUPONT2) ' ;
  433. 'MESS' ' > Calcul du premier pas par la theta-methode ' ;
  434. 'FINS';
  435.  
  436. 'MESS' ' *** Donnees utilisees du probleme :';
  437. 'MESS' ' > Champ de temperatures a l instant : ' TEM0;
  438. 'SI' NONLIN1;
  439. 'MESS' ' > K,C ou H variables.';
  440. 'SINO';
  441. 'MESS' ' > K,C et H constants.';
  442. 'FINS';
  443.  
  444. 'SI' ICELS;
  445. 'MESS' ' > Unite de temperature utilisee : Celsius.';
  446. 'SINO';
  447. 'MESS' ' > Unite de temperature utilisee : Kelvin.';
  448. 'FINS';
  449.  
  450. 'SI' ('EGA' ETAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE');
  451. 'MESS' ' > Coefficient de relaxation : ' LAMBDA1;
  452. 'SINO';
  453. 'MESS' ' > Coefficient de relaxation pour la theta-methode : ' LAMBDA1 ;
  454. 'MESS' ' > Coefficient de relaxation pour la methode Dupont2 : ' ETAB.'RELAXATION_DUPONT' ;
  455. 'MESS' ' > Coefficient de sous-relaxation : ' LAMBDA2;
  456. 'FINS';
  457.  
  458. 'SI' IPHASE;
  459. 'MESS' ' > Changement de phase prevu.';
  460. 'SINO';
  461. 'MESS' ' > Pas de changement de phase prevu.';
  462. 'FINS';
  463.  
  464. 'SI' ('NEG' ETAB.'BLOCAGES_THERMIQUES' 'INCONNU');
  465. 'MESS' ' > Presence de temperatures imposees.';
  466. 'SINO';
  467. 'MESS' ' > Pas de temperatures imposees.';
  468. 'FINS';
  469.  
  470. 'SI' ('EXIS' ETAB.'CHARGEMENT' 'Q ');
  471. 'MESS' ' > Presence de flux.';
  472. 'SINO';
  473. 'MESS' ' > Pas de presence de flux.';
  474. 'FINS';
  475.  
  476. 'SI' ICONDU;
  477. 'MESS' ' > Presence de conduction';
  478. 'SINO';
  479. 'MESS' ' > Pas de presence de conduction ';
  480. 'FINS';
  481.  
  482. 'SI' ICONVE;
  483. 'MESS' ' > Presence de convection.';
  484. 'SINO';
  485. 'MESS' ' > Pas de terme de convection.';
  486. 'FINS';
  487.  
  488. 'SI' IRADI;
  489. 'MESS' ' > Presence de rayonnement.';
  490. 'SINO';
  491. 'MESS' ' > Pas de presence de rayonnement.';
  492. 'FINS';
  493.  
  494. 'SI' IADVEC;
  495. 'MESS' ' > Presence d advection.';
  496. 'SINO';
  497. 'MESS' ' > Pas de presence d advection';
  498. 'FINS';
  499.  
  500. 'SI' ICPCONS ;
  501. 'MESS' ' > Presence d une capacite constante.';
  502. 'FINS';
  503.  
  504. 'SI' IKCONS ;
  505. 'MESS' ' > Presence d une conductivite constante.';
  506. 'FINS';
  507. 'MESS' ' ';
  508. 'FINS';
  509.  
  510. ********************************************************************
  511. * Boucle sur les pas de temps *
  512. ********************************************************************
  513. 'REPETER' BOUC_SO ;
  514. ITE3 = &BOUC_SO;
  515. TEMM = (LAMBDA1 * TEM1) + ((1 - LAMBDA1) * TEM0);
  516. TH_COUR = U0MTREF ;
  517. ETAB.'THER_COURANT' = TH_COUR ;
  518.  
  519. 'MESS' ' ';
  520. 'MESS' '---- Calcul du champ de temperature au temps :'TEM1;
  521. 'MESS' ' ';
  522. *---- initialisation du materiau
  523. 'SI' (NONLIN1 'OU' IMATCHG) ;
  524. *-------------- Cas de la temperature et du temps ---------------
  525. CHVAR ='CHAN' 'CHAM' TH_COUR MODRTOT 'RIGIDITE' ;
  526. CHVAR2 ='MANU' 'CHML' MODRTOT 'TEMP' TEMM 'RIGIDITE' ;
  527. CHVAR = CHVAR 'ET' CHVAR2 ;
  528. *-------------- Cas des variables mecaniques --------------------
  529. *---- si il y a couplage on les "rentre" toutes dans CHVAR ------
  530. 'SI' ETAB.'COUPLAGE';
  531. CHVAR = CHVAR 'ET' CHAR_ME;
  532. 'FINS';
  533. *-------------- Mise a jour des variables externes --------------
  534. 'SI' ETAB.'PROCEDURE_PARATHER' ;
  535. PARATHER PRECED TEMM ;
  536.  
  537. * Remise en place des MCHAML sur les bons MMODELS car on suppose
  538. * que l'utilisateur ne connais pas tous les indices de ETAB.
  539. MATRTOT0 ='REDU' ETAB.'MAT_TOT' MODRTOT ;
  540. 'SI' ICONDU;
  541. MATRCOND='REDU' ETAB.'MAT_COND' MODRCOND;
  542. 'FINS';
  543. 'SI' ICONVE;
  544. MATRCON ='REDU' ETAB.'MAT_CON' MODRCON ;
  545. 'FINS';
  546. 'SI' IADVEC;
  547. MATRADV ='REDU' ETAB.'MAT_ADV' MODRADV ;
  548. 'FINS' ;
  549. 'SI' IRADI;
  550. MATRRAY ='REDU' ETAB.'MAT_RAY' MODRRAY ;
  551. 'FINS';
  552. 'SI' IPHASE;
  553. MATRPHA ='REDU' ETAB.'MAT_PHA' MODRPHA ;
  554. 'FINS';
  555. 'SI' ITHM1;
  556. MATRTHM ='REDU' ETAB.'MAT_THM' MODRTHM ;
  557. 'FINS' ;
  558. 'SI' IDIFF ;
  559. MATRDIFF='REDU' ETAB.'MAT_DIF' MODRDIFF;
  560. 'FINS' ;
  561. 'FINS' ;
  562.  
  563. *-------------- Cas des autres variables --------------------
  564. 'REPETER' BOU_NU2 ILVA;
  565. ITE2 = &BOU_NU2;
  566. MOTI = 'EXTR' LVAREX ITE2;
  567. 'SI' ('EXIS' LPRIM2 MOTI) ;
  568. 'ITER' BOU_NU2 ;
  569. 'FINS' ;
  570. 'SI' ETAB.'COUPLAGE';
  571. 'SI' ('EXIS' CHAR_ME MOTI );
  572. 'SI' ('NEG' LAMBDA1 0.);
  573. 'MESS'
  574. '*** Le materiau thermique depend de parametres mecaniques';
  575. 'ERRE' '*** Il faut initialiser SOUS-RELAXATION a 0.';
  576. 'FINS';
  577. 'ITERER' BOU_NU2;
  578. 'FINS';
  579. 'FINS';
  580. 'SI' ('EXIS' ETAB.'CHARGEMENT' MOTI);
  581. CH_1 = 'TIRE' ETAB.'CHARGEMENT' MOTI TEMM;
  582. TYP_1 = 'TYPE' CH_1;
  583.  
  584. * on suppose que les chargements qui ne sont pas d'origine mecanique
  585. * sont appuyes sur le maillage thermique.
  586. 'SI' ('EGA' TYP_1 'CHPOINT');
  587. CHVAR2 = 'CHAN' 'CHAM' CH_1 MODRTOT 'RIGIDITE';
  588. 'SINO';
  589. CHVAR2 = 'CHAN' 'RIGIDITE' CH_1 MODRTOT;
  590. 'FINS';
  591. CHVAR = CHVAR + CHVAR2;
  592. 'SINO';
  593. 'MESS' '*** Il manque une donnee du chargement ***';
  594. 'MESS' '*** Variable concernee : 'MOTI;
  595. 'ERREUR' ' ';
  596. 'FINS';
  597. 'FIN' BOU_NU2;
  598. 'FINS';
  599.  
  600. *----------------- Calcul du champ de materiau a T= U0 -----------------
  601. 'SI' (NONLIN1 'OU' IMATCHG) ;
  602. CHVAR1 ='REDU' CHVAR MODRTOT;
  603. CHMAT ='VARI' 'NUAG' MODRTOT MATRTOT0 CHVAR1 'RIGIDITE';
  604. 'SI' (IDIFF 'OU' ETAB.'THE1') ;
  605. CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ;
  606. 'SI' ITHM1 ;
  607. ma ff0 = @MATETHM MODRTHM TH_COUR ;
  608. CHMAT1 = CHMAT1 'ET' ma ;
  609. 'FINS' ;
  610. 'SINO' ;
  611. 'SI' ITHM1 ;
  612. CHMAT1 ff0 = @MATETHM MODRTHM TH_COUR ;
  613. 'FINS' ;
  614. 'FINS' ;
  615.  
  616. 'SINO';
  617. CHMAT = MATRTOT0 ;
  618. 'SI' (IDIFF 'OU' ETAB.'THE1') ;
  619. CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ;
  620. 'SI' ITHM1 ;
  621. ma ff0 = @MATETHM MODRTHM TH_COUR ;
  622. CHMAT1 = CHMAT1 'ET' ma ;
  623. 'FINS' ;
  624. 'SINO' ;
  625. 'SI' ITHM1 ;
  626. CHMAT1 ff0 = @MATETHM MODRTHM TH_COUR ;
  627. 'FINS' ;
  628. 'FINS' ;
  629. 'FINS';
  630.  
  631. * On conserve le materiau instancie CHMAT dans ETAB (Pour PAS_RAYO...)
  632. ETAB.'CHMAT' ='REDU' CHMAT MODTOT ;
  633.  
  634. MATRTOT ='REDU' CHMAT1 MODRTOT ;
  635. 'SI' ICONDU;
  636. MATRCOND='REDU' CHMAT1 MODRCOND;
  637. 'FINS';
  638. 'SI' ICONVE;
  639. MATRCON ='REDU' CHMAT1 MODRCON;
  640. 'FINS';
  641. 'SI' IRADI;
  642. MATRRAY ='REDU' CHMAT1 MODRRAY;
  643. 'FINS';
  644. 'SI' IADVEC;
  645. MATRADV ='REDU' CHMAT1 MODRADV;
  646. 'FINS' ;
  647. 'SI' ISOURQ ;
  648. MATRSOQ ='REDU' CHMAT1 MODRSOQ ;
  649. 'FINS' ;
  650. 'SI' IPHASE;
  651. MATRPHA ='REDU' CHMAT1 MODRPHA;
  652. 'FINS';
  653. 'SI' ITHM1;
  654. MATRTHM ='REDU' CHMAT1 MODRTHM ;
  655. 'FINS' ;
  656. 'SI' IDIFF ;
  657. MATRDIFF='REDU' CHMAT1 MODRDIFF;
  658. 'FINS' ;
  659.  
  660. *--- Calcul des matrices d'iteration On les recalcule a cause de perso
  661. IKDETO=FAUX;IBCONS=FAUX;
  662. 'SI' ICONDU ;
  663. KDETO ='COND' MODRCOND MATRCOND;
  664. IKDETO= VRAI;
  665. 'FINS';
  666. 'SI' ITHM1;
  667. KDCC ='COND' MODRTHM MATRTHM;
  668. 'SI' IKDETO;
  669. KDETO=KDETO 'ET' KDCC;
  670. 'SINO';
  671. KDETO=KDCC;
  672. IKDETO=VRAI;
  673. 'FINS';
  674. 'FINS';
  675. 'SI' (('NON' IKDEP) 'ET' IKDETO);
  676. BCONS= KDETO;
  677. IBCONS=VRAI;
  678. 'FINS';
  679.  
  680. 'SI' ICONVE;
  681. KDCCG= 'COND' MODRCON MATRCON;
  682. 'SI' IKDETO;
  683. KDETO=KDETO 'ET' KDCCG;
  684. 'SINO';
  685. KDETO=KDCCG;
  686. IKDETO=VRAI;
  687. 'FINS';
  688. 'SI' ('NON' IECDEP);
  689. 'SI' IBCONS ;
  690. BCONS=BCONS 'ET' KDCCG;
  691. 'SINO';
  692. BCONS=KDCCG;
  693. IBCONS=VRAI;
  694. 'FINS';
  695. 'FINS';
  696. 'FINS';
  697.  
  698. 'SI' IADVEC;
  699. * la conduction de du model d'advection est deja calculer grace a icondu
  700. 'SI' ('NON' IKVITE);
  701. KDCC2= 'ADVE' MODRADV MATRADV;
  702. 'SI' IKDETO;
  703. KDETO=KDETO 'ET' KDCC2;
  704. 'SINO';
  705. KDETO= KDCC2 ;
  706. IKDETO=VRAI;
  707. 'FINS';
  708. 'SI' IBCONS;
  709. BCONS = BCONS 'ET' KDCC2;
  710. 'SINO';
  711. BCONS= KDCC2;
  712. IBCONS=VRAI;
  713. 'FINS';
  714. 'FINS';
  715. 'FINS';
  716.  
  717. 'SI' IDIFF;
  718. KDEDI = 'COND' MODRDIFF MATRDIFF ;
  719. 'SI' IKDETO;
  720. KDETO=KDETO 'ET' KDEDI;
  721. 'SINO';
  722. KDETO=KDEDI;
  723. IKDETO=VRAI;
  724. 'FINS';
  725. 'SI' ('NON' IKDDEP);
  726. 'SI' IBCONS;
  727. BCONS=BCONS 'ET' KDEDI;
  728. 'SINO';
  729. BCONS = KDEDI;
  730. IBCONS= VRAI ;
  731. 'FINS';
  732. 'FINS';
  733. 'FINS' ;
  734.  
  735. 'SI' IKCONS ;
  736. 'SI' IKDETO ;
  737. KDETO = KDETO 'ET' ETAB.'CONDUCTIVITE_CONSTANTE' ;
  738. 'SINO' ;
  739. KDETO = ETAB.'CONDUCTIVITE_CONSTANTE' ; KDETO = VRAI ;
  740. 'FINS' ;
  741. 'SI' IBCONS;
  742. BCONS=BCONS 'ET' ETAB.'CONDUCTIVITE_CONSTANTE' ;
  743. 'SINO';
  744. BCONS= ETAB.'CONDUCTIVITE_CONSTANTE' ; IBCONS=VRAI ;
  745. 'FINS';
  746. 'FINS' ;
  747. *
  748. AA = KDETO * LAMBDA1 ;
  749. CCONS = AA ;
  750. BB = KDETO ;
  751. 'SI' ('NON' IBCONS) ;
  752. BCONS = EXTR KDETO 'RIGI' 'MULT'; IBCONS=VRAI;
  753. 'FINS';
  754. *
  755. 'SI' ICAPA ;
  756. 'SI' ICAPATH ;
  757. 'SI' ICONDU;
  758. CDET= 'CAPA' MODRCOND MATRCOND / T_PAS;
  759. AA= CDET 'ET' AA ;
  760. 'SI' ICDEP ; CCONS = CDET 'ET' CCONS ; 'FINS' ;
  761. 'FINS';
  762. 'SI' ITHM1;
  763. CDET= 'CAPA' MODRTHM MATRTHM / T_PAS;
  764. AA= CDET 'ET' AA ;
  765. 'SI' ICDEP; CCONS = CDET 'ET' CCONS ; 'FINS' ;
  766. 'FINS';
  767. 'FINS';
  768. 'SI' ICAPADI ;
  769. CDET = 'CAPA' MODRDIFF MATRDIFF / T_PAS ;
  770. AA = CDET 'ET' AA ;
  771. 'SI' ICDDEP ; CCONS = CDET 'ET' CCONS ; 'FINS' ;
  772. 'FINS' ;
  773. 'SI' ICPCONS ;
  774. CDET = ETAB.'CAPACITE_CONSTANTE' / T_PAS ;
  775. AA = CDET 'ET' AA ;
  776. 'SI' ICDDEP ; CCONS = CDET 'ET' CCONS ; 'FINS' ;
  777. 'FINS' ;
  778. 'FINS' ;
  779.  
  780. *----------------- y-a-t-il des blocages ---------------------------
  781. * on le laisse ici car perso peut l'avoir modifie de memepour les autres
  782. * matrices
  783. IKBLOC=FAUX;
  784. 'SI' ETAB.'FOR_THER' ;
  785. IKBLOC=VRAI;
  786. MAT_BLOC = ETAB.'BLOCAGES_THERMIQUES' ;
  787. 'SI' ('EGA' MAT_BLOC 'INCONNU') ;
  788. MAT_BLOC = 'EXTR' KDETO 'RIGI' 'MULT' ;
  789. 'FINS' ;
  790. MAT_BLTH = MAT_BLOC ;
  791. 'FINS' ;
  792.  
  793. 'SI' IDIFF ;
  794. MAT_BLDI = ETAB.'BLOCAGES_DIFFUSIONS' ;
  795. 'SI' ('EGA' MAT_BLDI 'INCONNU') ;
  796. MAT_BLDI = 'EXTR' KDEDI 'RIGI' 'MULT' ;
  797. 'FINS' ;
  798. 'SI' IKBLOC;
  799. MAT_BLOC = MAT_BLOC 'ET' MAT_BLDI;
  800. 'SINO';
  801. MAT_BLOC = MAT_BLDI;
  802. 'FINS';
  803. 'FINS' ;
  804.  
  805. AA = AA 'ET' MAT_BLOC ;
  806. MAT_CHPO = MAT_BLOC * U0 ;
  807. SECON = MAT_CHPO ;
  808.  
  809. *------------------- y-a-t-il des temperatures imposees--------
  810. ICHUIMP=FAUX;
  811. 'SI' ETAB.'FOR_THER' ;
  812. 'SI' ('EXIS' ETAB.'CHARGEMENT' 'TIMP') ;
  813. CH_UIMP = 'TIRE' ETAB.'CHARGEMENT' 'TIMP' TEM1 ;
  814. 'SI' ICELS ;
  815. CH_UIMP = CH_UIMP + TREF ;
  816. 'FINS' ;
  817. ICHUIMP=VRAI;
  818. 'FINS';
  819. 'FINS';
  820. 'SI' IDIFF;
  821. 'SI' ('EXIS' ETAB.'CHARGEMENT' 'CIMP') ;
  822. CH_CI = 'TIRE' ETAB.'CHARGEMENT' 'CIMP' TEM1 ;
  823. 'SI' ICHUIMP;
  824. CH_UIMP= CH_UIMP 'ET' CH_CI;
  825. 'SINO';
  826. CH_UIMP=CH_CI;
  827. 'FINS';
  828. ICHUIMP=VRAI;
  829. 'FINS';
  830. 'FINS';
  831. 'SI' ('NON' ICHUIMP);
  832. CH_UIMP='DEPI' MAT_BLOC 0.;
  833. 'FINS';
  834. MAT_CHPO = CH_UIMP - MAT_CHPO ;
  835. SECON = CH_UIMP - SECON ;
  836.  
  837. *---------- Si convection on cherche TE ------------
  838. *----------calcul convection second membre --------------
  839. 'SI' ICONVE;
  840. 'SI' ('EXIS' ETAB.'CHARGEMENT' 'TECO' ) ;
  841. CH_TEC ='TIRE' ETAB.'CHARGEMENT' 'TECO' TEMM ;
  842. 'SI' ICELS ;
  843. CH_TEC = CH_TEC + TREF ;
  844. 'FINS' ;
  845. CHAL_TEI ='CONV' MODRCON MATRCON CH_TEC ;
  846.  
  847. MAT_CHPO = MAT_CHPO + CHAL_TEI;
  848. 'SI' ('NON' IECDEP) ;
  849. SECON = SECON + CHAL_TEI;
  850. 'FINS' ;
  851. 'SINO' ;
  852. 'SI' ('EXIS' MATRCON 'TC') ;
  853. CH_TEC = 'EXCO' MATRCON 'TC' 'T' ;
  854. CH_TEC = 'CHAN' 'CHPO' MODRCON CH_TEC ;
  855. 'SI' ICELS ;
  856. CH_TEC = CH_TEC + TREF ;
  857. 'FINS' ;
  858. CHAL_TEI ='CONV' MODRCON MATRCON CH_TEC ;
  859. MAT_CHPO = MAT_CHPO + CHAL_TEI;
  860. 'SI' ('NON' IECDEP) ;
  861. SECON = SECON + CHAL_TEI;
  862. 'FINS' ;
  863. 'FINS' ;
  864. 'FINS';
  865. 'FINS';
  866.  
  867. *--------- SI terme de flux -------------------------------
  868.  
  869. 'SI' ITHM1 ;
  870. ma FTGC = @MATETHM MODRTHM TH_COUR ;
  871. MAT_CHPO = MAT_CHPO - FTGC;
  872. SECON = SECON - FTGC;
  873. 'FINS';
  874.  
  875. 'REPE' Boucle NBDUA1 ;
  876. MOTCOMP = 'EXTR' LDUAL1 &Boucle ;
  877. 'SI' ('EXIS' ETAB.'CHARGEMENT' MOTCOMP) ;
  878. CH_DUA = 'TIRE' ETAB.'CHARGEMENT' MOTCOMP TEMM ;
  879. MAT_CHPO = MAT_CHPO + CH_DUA ;
  880. SECON = SECON + CH_DUA ;
  881. 'FINS' ;
  882. 'FIN' Boucle ;
  883.  
  884. *------------- calcul des termes rayonnement --------------------------
  885.  
  886. 'SI' IRADI ;
  887. IAPPEL = 3 ;
  888. t_rayo = PAS_RAYO PRECED TEMM IAPPEL ;
  889. 'SI' ('EXIS' t_rayo 'ADDI_MATRICE') ;
  890. RIG_RAYO = LAMBDA1 '*' t_rayo.'ADDI_MATRICE';
  891. ccons = RIG_RAYO 'ET' ccons ;
  892. aa = RIG_RAYO 'ET' aa ;
  893. bb = t_rayo.'ADDI_MATRICE' 'ET' bb;
  894. 'FINS';
  895. 'SI' ('EXIS' t_rayo 'ADDI_SECOND') ;
  896. MAT_CHPO = MAT_CHPO 'ET' t_rayo.'ADDI_SECOND' ;
  897. 'FINS';
  898. 'SI' ('EXIS' t_rayo 'RAYO_VALEUR');
  899. STAB.'RAYONNEMENT' = t_rayo.'RAYO_VALEUR' ;
  900. 'FINS';
  901. t_rayo = 'MOT' 'INCONNU' ;
  902. 'FINS';
  903.  
  904. *------------- calcul des sources de chaleur --------------------
  905.  
  906. 'SI' ISOURQ ;
  907. CHQ1 = SOUR MODRSOQ MATRSOQ ;
  908. MAT_CHPO = MAT_CHPO 'ET' CHQ1 ;
  909. SECON = SECON 'ET' CHQ1 ;
  910. 'FINS';
  911.  
  912. *------------- en cas de procedure utilisateur CHARTHER --------------
  913.  
  914. 'SI' etab.'PROCEDURE_CHARTHER' ;
  915. taat = charther preced temm ;
  916. 'SI' ('EXIS' taat 'ADDI_MATRICE') ;
  917. mat_z = lambda1 '*' taat.'ADDI_MATRICE' ;
  918. ccons = mat_z 'ET' ccons ;
  919. aa = mat_z 'ET' aa ;
  920. bb = taat.'ADDI_MATRICE' 'ET' bb ;
  921. 'FINS';
  922. 'SI' ('EXIS' taat 'ADDI_SECOND') ;
  923. MAT_CHPO = MAT_CHPO 'ET' taat.'ADDI_SECOND' ;
  924. 'FINS';
  925. oublier taat ;
  926. 'FINS';
  927.  
  928.  
  929. * Pour le Changement de PHASE : Blocages et Jeux
  930. 'SI' IPHASE;
  931. AA = AA 'ET' BLOPHA ;
  932. Q_LAT_INT=('SOUR' MODPHA ('EXCO' MATTOT0 'DUAL') MATTOT0 'ELEM') / T_PAS ;
  933. JEU_PHAS = 'PHAJ' MODTOT MATTOT0 U0MTREF ;
  934. MAT_CHPO = MAT_CHPO + JEU_PHAS ;
  935. SECON = SECON + JEU_PHAS ;
  936. 'FINS';
  937. *--------------- Calcul du premier residu --------------------------
  938.  
  939. B3 = BB * U0 ;
  940. MAT_CHPO = MAT_CHPO - B3 ;
  941. ********************************************************************
  942. * Boucle sur les iterations *
  943. ********************************************************************
  944. * on peut mettre n'importe quoi c'est pour
  945. * ne pas faire de tests dans la boucle
  946. ZNACCE =2;
  947. ZITAC= 0 ;
  948. IT= 0 ;
  949. ITDEP=3;
  950. 'SI' IPHASE;
  951. ITDEP=5;
  952. 'FINS';
  953. ITACC = 0;
  954. ACFP1 = MAT_CHPO * 0. ;
  955. ACFP2 = ACFP1 ;
  956. MAT_CHPP=ACFP1 ;
  957. ACFP3 = ACFP1 ;
  958. ACFEP1 = ACFP1;
  959. ACFEP2 = ACFP1 ;
  960. CORREC = 0.;
  961. U0 = 'ENLE' U0 'LX';
  962. U1 = U0 ;
  963. DU0 ='VIDE' 'CHPOINT' / 'DIFFUS' ;
  964. DU1 ='VIDE' 'CHPOINT' / 'DIFFUS' ;
  965. EXCPHA ='VIDE' 'CHPOINT' / 'DISCRET';
  966.  
  967. 'REPETER' BOU_IT1;
  968. * IT est le compteur de BOU_IT1, ITACC doit etre =< 0 pour qu'on accelere
  969. IT = IT + 1 ;
  970. ITACC = ITACC - 1 ;
  971. ZITAC = ZITAC + 1 ;
  972. ITE_IT = &BOU_IT1;
  973.  
  974. * Nombre max d'iteration autorise est-il depasse?
  975. 'SI' (ITE_IT '>' MAX1);
  976. 'SAUTER' 1 'LIGNE' ;
  977. 'MESS' '*** LE CALCUL N A PAS CONVERGE ***';
  978. ERR_VAL= VRAI;
  979. 'QUIT' BOUC_SO ;
  980. 'FINS';
  981. AUTORISA= VRAI;
  982. BB = BCONS;CC=CCONS;
  983. *
  984. *---------------------------------------------------------------------
  985. * La force motrice de l'iteration est fixee: RESIDU
  986. * on va calculer un nouveau champ de deplacement
  987. *
  988. * calcul de l'increment de l'increment de deplacement zdep1
  989. * par resolution lineaire
  990. *
  991. *
  992. * acceleration de convergence
  993. *
  994. CORRECP = CORREC;
  995. CORREC = 0;
  996. ACFP0 = (MAT_CHPO - MAT_CHPP) 'ENLE' FLX ;
  997. ACFEP0 = ACFP0;
  998. ACFEP0 = ACFEP0 - CORRECP ;
  999. 'SI' ('MULT' IT ZNACCE) ;
  1000. 'SI' (IT > ITDEP);
  1001. CORREC = 'ACT3' ACFEP2 ACFEP1 ACFEP0 ACFP3 ACFP2 ACFP1 ACFP0 ;
  1002. MAT_CHPO = MAT_CHPO - CORREC ;
  1003. 'FINS';
  1004. 'FINS';
  1005. MAT_CHPP=MAT_CHPO ;
  1006.  
  1007. SI (IT > 3);
  1008. 'DETR' ACFP3;
  1009. 'DETR' ACFEP2;
  1010. 'FINS';
  1011. ACFP3 = ACFP2 ; ACFP2 = ACFP1 ; ACFP1 = ACFP0 ;
  1012. ACFEP2 = ACFEP1 ; ACFEP1 = ACFEP0 ;
  1013.  
  1014. MENAGE;
  1015.  
  1016. 'SI' IRIB ;
  1017. 'SI' IPHASE;
  1018. DU1 BID BID BID BID = 'RESO' AA MAT_CHPO 'INIB' RIBL_VAL LISE_VAL EXCPHA ;
  1019. 'SINO';
  1020. DU1 BID BID BID = 'RESO' AA MAT_CHPO 'INIB' RIBL_VAL LISE_VAL ;
  1021. 'FINS';
  1022. 'SINO';
  1023. 'SI' IPHASE;
  1024. DU1 = 'RESO' AA MAT_CHPO EXCPHA ;
  1025. 'SINO';
  1026. DU1 = 'RESO' AA MAT_CHPO ;
  1027. * mess ' ITeration ' it;
  1028. * aaa= extr aa rigi mult ; mess ' aaa ' ; list aaa;
  1029. * mess ' mat_chpo' ; list mat_chpo;
  1030. * mess ' du1 ' ; list du1;
  1031. 'FINS';
  1032. 'FINS';
  1033. ZRAID_T = 'EXTR' AA 'CONT';
  1034. 'SI' ('EXIS' ZRAID_T 'NITER');
  1035. RIBL_VAL = ZRAID_T.7;
  1036. LISE_VAL = ZRAID_T.6;
  1037. IRIB=VRAI;
  1038. 'FINS';
  1039.  
  1040.  
  1041. 'SI' IPHASE;
  1042. * Flux generalises ('LX')
  1043. EXCPHA ='EXCP' MODTOT MATPHA0 PROPHA0 Q_LAT_INT U0MTREF DU1 ;
  1044.  
  1045. 'SOUC' 0;
  1046. PROPHA1 ='PROP' MODTOT PROPHA0 Q_LAT_INT DU1 ;
  1047. AUTORISA=(ITE_IT '>' 1) 'ET' ('NON' ('SOUC')) ;
  1048. 'FINS';
  1049.  
  1050. U1 = U0 + DU1 ;
  1051.  
  1052. 'SI' ('EGA' I_LAMBD1 0) ;
  1053. U_BOU1 = (LAMBDA1 * U1) + ((1 - LAMBDA1) * U0);
  1054. 'SINO' ;
  1055. 'SI' ('EGA' I_LAMBD1 1) ; U_BOU1 = U0 ; 'FINS' ;
  1056. 'SI' ('EGA' I_LAMBD1 2) ; U_BOU1 = 0.5 * (U0 + U1) ; 'FINS' ;
  1057. 'SI' ('EGA' I_LAMBD1 3) ; U_BOU1 = U1 ; 'FINS' ;
  1058. 'FINS' ;
  1059.  
  1060. TH_COUR = U_BOU1 - CHTREF;
  1061. ETAB.'THER_COURANT' = TH_COUR ;
  1062.  
  1063.  
  1064. * Calcul des Proportions de Phases (Modele Metallurgique par T.L. en mai 2018)
  1065. 'SI' IMETAL ;
  1066. CHT0 ='CHAN' 'CHAM' ('EXCO' U0 'T' 'T') MODRMET ;
  1067. CHT1 ='CHAN' 'CHAM' ('EXCO' U1 'T' 'T') MODRMET ;
  1068. CHETPS0 ='MANU' 'CHML' MODRMET 'TEMP' tem0 'STRESSES';
  1069. CHETPS1 ='MANU' 'CHML' MODRMET 'TEMP' tem1 'STRESSES';
  1070. PHA_MET1 ='COMP' MODRMET (PHA_MET0 'ET' CHETPS0 'ET' CHT0 'ET' CHMAT) ( CHETPS1 'ET' CHT1 'ET' CHMAT ) ;
  1071. 'FINS' ;
  1072.  
  1073.  
  1074. *-------- Calcul du critere de fin d'iteration -------------------
  1075. ZPREC2 = 0. ;
  1076. DDU= DU1 - DU0 ;
  1077. 'REPE' BINCO1 NBDUA1 ;
  1078. LPRIMI1 = 'MOTS' ('EXTR' LPRIM1 &BINCO1) ;
  1079. MDUABSI1 = 'MAXI' 'ABS' DDU 'AVEC' LPRIMI1 ;
  1080. NORMI1 = 'MAXI' 'ABS' U1 'AVEC' LPRIMI1 ;
  1081. 'SI' (NORMI1 '&lt;EG' (1.E-14 * MDUABSI1)) ;
  1082. NORMI1 = 1. ;
  1083. 'FINS' ;
  1084. ZPRECI2 = MDUABSI1 / NORMI1 ;
  1085. 'SI' (ZPRECI2 '>' ZPREC2) ;
  1086. ZPREC2 = ZPRECI2 ;
  1087. 'FINS' ;
  1088. 'FIN' BINCO1 ;
  1089. DU0 = DU1;
  1090. 'MESS' ' Iteration numero : 'ITE_IT
  1091. ' Valeur du critere : 'ZPREC2 ;
  1092. 'SI' ((ZPREC2 '&lt;EG' ZPREC1) 'ET' AUTORISA);
  1093. 'QUITTER' BOU_IT1;
  1094. 'FINS';
  1095.  
  1096. *****************************************************************
  1097. * CALCUL DU NOUVEAU RESIDU *
  1098. *****************************************************************
  1099. MAT_CHPO = SECON ;
  1100. * Gestion des variables externes *
  1101. *****************************************************************
  1102.  
  1103. 'SI' NONLIN1 ;
  1104.  
  1105. *-------------- Cas de la temperature et du temps ---------------
  1106.  
  1107.  
  1108. CHVAR ='CHAN' 'CHAM' TH_COUR MODRTOT 'RIGIDITE' ;
  1109. CHVAR2 ='MANU' 'CHML' MODRTOT 'TEMP' TEMM 'RIGIDITE' ;
  1110. CHVAR = CHVAR 'ET' CHVAR2 ;
  1111.  
  1112. *-------------- Cas des variables mecaniques --------------------
  1113. *---- si il y a couplage on les "rentre" toutes dans CHVAR ------
  1114.  
  1115. 'SI' ETAB.'COUPLAGE';
  1116. CHVAR = CHVAR 'ET' CHAR_ME;
  1117. 'FINS';
  1118.  
  1119. *-------------- Mise a jour des variables externes --------------
  1120. 'SI' ETAB.'PROCEDURE_PARATHER' ;
  1121. PARATHER PRECED TEMM ;
  1122.  
  1123. * Remise en place des MCHAML sur les bons MMODELS car on suppose
  1124. * que l'utilisateur ne connais pas tous les indices de ETAB.
  1125. MATRTOT0 ='REDU' ETAB.'MAT_TOT' MODRTOT ;
  1126. 'SI' ICONDU;
  1127. MATRCOND='REDU' ETAB.'MAT_COND' MODRCOND;
  1128. 'FINS';
  1129. 'SI' ICONVE;
  1130. MATRCON ='REDU' ETAB.'MAT_CON' MODRCON ;
  1131. 'FINS';
  1132. 'SI' IADVEC;
  1133. MATRADV ='REDU' ETAB.'MAT_ADV' MODRADV ;
  1134. 'FINS' ;
  1135. 'SI' IRADI;
  1136. MATRRAY ='REDU' ETAB.'MAT_RAY' MODRRAY ;
  1137. 'FINS';
  1138. 'SI' IPHASE;
  1139. MATRPHA ='REDU' ETAB.'MAT_PHA' MODRPHA ;
  1140. MATPHA ='REDU' ETAB.'MAT_PHA' MODPHA ;
  1141. 'FINS';
  1142. 'SI' ITHM1;
  1143. MATRTHM ='REDU' ETAB.'MAT_THM' MODRTHM ;
  1144. 'FINS' ;
  1145. 'SI' IDIFF ;
  1146. MATRDIFF='REDU' ETAB.'MAT_DIF' MODRDIFF;
  1147. 'FINS' ;
  1148. 'FINS' ;
  1149.  
  1150. *-------------- Cas des autres variables --------------------
  1151. 'REPETER' BOU_NU2 ILVA;
  1152. ITE2 = &BOU_NU2;
  1153. MOTI = 'EXTR' LVAREX ITE2;
  1154. 'SI' ('EXIS' LPRIM2 MOTI) ;
  1155. 'ITER' BOU_NU2 ;
  1156. 'FINS' ;
  1157. 'SI' ETAB.'COUPLAGE';
  1158. 'SI' ('EXIS' CHAR_ME MOTI );
  1159. 'SI' ('NEG' LAMBDA1 0.);
  1160. 'MESS' '*** Le materiau thermique depend de parametres mecaniques';
  1161. 'ERRE' '*** Il faut initialiser SOUS-RELAXATION a 0.';
  1162. 'FINS';
  1163. 'ITERER' BOU_NU2;
  1164. 'FINS';
  1165. 'FINS';
  1166. 'SI' ('EXIS' ETAB.'CHARGEMENT' MOTI);
  1167. CH_1 = 'TIRE' ETAB.'CHARGEMENT' MOTI TEMM;
  1168. TYP_1 = 'TYPE' CH_1;
  1169.  
  1170. * on suppose que les chargements qui ne sont pas d'origine mecanique
  1171. * sont appuyes sur le maillage thermique.
  1172. 'SI' ('EGA' TYP_1 'CHPOINT ');
  1173. CHVAR2 = 'CHAN' 'CHAM' CH_1 MODRTOT 'RIGIDITE';
  1174. 'SINO';
  1175. CHVAR2 = 'CHAN' 'RIGIDITE' CH_1 MODRTOT;
  1176. 'FINS';
  1177. CHVAR = CHVAR + CHVAR2;
  1178. 'SINO';
  1179. 'MESS' '*** Il manque une donnee du chargement ***';
  1180. 'MESS' '*** Variable concernee : 'MOTI;
  1181. 'ERREUR' ' ';
  1182. 'FINS';
  1183. 'FIN' BOU_NU2;
  1184. 'FINS';
  1185.  
  1186. *----------------- Calcul du champ de materiau a T= U_BOU1--------------
  1187. 'SI' NONLIN1 ;
  1188. CHVAR1 = 'REDU' CHVAR MODRTOT;
  1189. CHMAT = 'VARI' 'NUAG' MODRTOT MATRTOT0 CHVAR1 'RIGIDITE';
  1190.  
  1191. 'SI' (IDIFF 'OU' ETAB.'THE1') ;
  1192. CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ;
  1193. 'SI' ITHM1 ;
  1194. ma ff0 = @MATETHM MODRTHM TH_COUR ;
  1195. CHMAT1 = CHMAT1 'ET' ma ;
  1196. 'FINS' ;
  1197. 'SINO' ;
  1198. 'SI' ITHM1 ;
  1199. CHMAT1 ff0 = @MATETHM MODRTHM TH_COUR ;
  1200. 'FINS' ;
  1201. 'FINS' ;
  1202.  
  1203. 'SINO';
  1204. CHMAT = MATRTOT0 ;
  1205. 'SI' (IDIFF 'OU' ETAB.'THE1') ;
  1206. CHMAT1 = 'REDU' MATRTOT ETAB.'MOD_THE' ;
  1207. 'SI' ITHM1 ;
  1208. ma ff0 = @MATETHM MODRTHM TH_COUR ;
  1209. CHMAT1=CHMAT1 'ET' ma ;
  1210. 'FINS' ;
  1211. 'SINO' ;
  1212. 'SI' ITHM1 ;
  1213. CHMAT1 ff0 = @MATETHM MODRTHM TH_COUR ;
  1214. 'FINS' ;
  1215. 'FINS' ;
  1216. 'FINS';
  1217.  
  1218. ETAB.'CHMAT' ='REDU' CHMAT MODTOT ;
  1219.  
  1220. MATRTOT ='REDU' CHMAT1 MODRTOT ;
  1221. 'SI' ICONDU;
  1222. MATRCOND='REDU' CHMAT1 MODRCOND;
  1223. 'FINS';
  1224. 'SI' ICONVE;
  1225. MATRCON ='REDU' CHMAT1 MODRCON ;
  1226. 'FINS';
  1227. 'SI' IRADI;
  1228. MATRRAY ='REDU' CHMAT1 MODRRAY ;
  1229. 'FINS';
  1230. 'SI' IADVEC;
  1231. MATRADV ='REDU' CHMAT1 MODRADV ;
  1232. 'FINS' ;
  1233. 'SI' IPHASE;
  1234. MATRPHA ='REDU' CHMAT1 MODRPHA ;
  1235. MATPHA ='REDU' CHMAT1 MODPHA ;
  1236. 'FINS';
  1237. 'SI' ITHM1;
  1238. MATRTHM ='REDU' CHMAT1 MODRTHM ;
  1239. 'FINS' ;
  1240. 'SI' IDIFF ;
  1241. MATRDIFF='REDU' CHMAT1 MODRDIFF;
  1242. 'FINS' ;
  1243.  
  1244. *-------------- CALCUL matrice de conductivite si besoin --------------
  1245. 'SI' IKDEP ;
  1246. 'SI' ICONDU; BB = ('COND' MODRCOND MATRCOND) 'ET' BB;'FINS';
  1247. 'SI' ITHM1 ; BB = ('COND' MODRTHM MATRTHM ) 'ET' BB;'FINS';
  1248. 'FINS' ;
  1249. 'SI' IECDEP;
  1250. 'SI' ICONVE; BB = ('COND' MODRCON MATRCON ) 'ET' BB;'FINS';
  1251. 'FINS';
  1252. 'SI' IKVITE; BB = ('ADVE' MODRADV MATRADV ) 'ET' BB;'FINS';
  1253. 'SI' IKDDEP ; BB = ('COND' MODRDIFF MATRDIFF) 'ET' BB;'FINS';
  1254.  
  1255. *-------------- CALCUL matrice de capacite si besoin------------------
  1256. XDIV = -1.d0 * T_PAS ;
  1257. 'SI' ICDEP ;
  1258. 'SI' ICONDU;CC=(('CAPA' MODRCOND MATRCOND)/XDIV) 'ET' CC;'FINS';
  1259. 'SI' ITHM1 ;CC=(('CAPA' MODRTHM MATRTHM) /XDIV) 'ET' CC;'FINS';
  1260. 'FINS';
  1261. 'SI' ICDDEP ;CC=(('CAPA' MODRDIFF MATRDIFF)/XDIV) 'ET' CC;'FINS';
  1262.  
  1263. *-------------- CALCUL des termes de convection si besoin ---------
  1264. 'SI' ICONVE;
  1265. 'SI' IECDEP;
  1266. 'SI' (('EXIS' ETAB.'CHARGEMENT' 'TECO') 'OU' ('EXIS' MATRCON 'TC')) ;
  1267. CHAL_TE = 'CONV' MODRCON MATRCON CH_TEC ;
  1268. MAT_CHPO = MAT_CHPO + CHAL_TE ;
  1269. 'FINS';
  1270. 'FINS';
  1271. 'FINS';
  1272.  
  1273. *
  1274. *------------- calcul des termes rayonnement --------------------------
  1275. 'SI' IRADI ;
  1276. IAPPEL = 3 ;
  1277. t_rayo = PAS_RAYO PRECED TEM1 IAPPEL ;
  1278. 'SI' ('EXIS' t_rayo 'ADDI_MATRICE') ;
  1279. bb = bb 'ET' t_rayo.'ADDI_MATRICE' ;
  1280. 'FINS';
  1281. 'SI' ('EXIS' t_rayo 'ADDI_SECOND') ;
  1282. MAT_CHPO = MAT_CHPO 'ET' t_rayo.'ADDI_SECOND' ;
  1283. 'FINS';
  1284. 'SI' ('EXIS' t_rayo 'RAYO_VALEUR');
  1285. STAB.'RAYONNEMENT' = t_rayo.'RAYO_VALEUR';
  1286. 'FINS';
  1287. t_rayo = 'MOT' 'INCONNU' ;
  1288. 'FINS';
  1289.  
  1290. *------------- en cas de procedure utilisateur CHARTHER --------------
  1291.  
  1292. 'SI' etab.'PROCEDURE_CHARTHER' ;
  1293. TAAT = charther preced TEM1 ;
  1294. 'SI' ('EXIS' TAAT 'ADDI_MATRICE') ;
  1295. bb = bb 'ET' taat.'ADDI_MATRICE' ;
  1296. 'FINS';
  1297. 'SI' ('EXIS' taat 'ADDI_SECOND') ;
  1298. MAT_CHPO = MAT_CHPO 'ET' taat.'ADDI_SECOND' ;
  1299. 'FINS';
  1300. oublier taat ;
  1301. 'FINS' ;
  1302.  
  1303. *--------------- calcul K*u1 et (lambda1*k + C/DT) * DDU1
  1304. 'SI' ('EGA' I_LAMBD1 1) ;
  1305. DS = BB * U0 ;
  1306. 'SINO' ;
  1307. 'SI' ('NEG' I_LAMBD1 3) ;
  1308. chp_z = LAMBDA1 * DU1 ;
  1309. 'SINO' ;
  1310. chp_z = DU1 ;
  1311. 'FINS' ;
  1312. DS = BB * ( chp_z + U0 ) ;
  1313. 'FINS' ;
  1314. DS2 = CC * DU1;
  1315. MAT_CHPO = MAT_CHPO + DS2 - DS ;
  1316. 'SI' ITHM1 ;
  1317. ma FTGC = @MATETHM MODRTHM TH_COUR ;
  1318. MAT_CHPO = MAT_CHPO - FTGC ;
  1319. 'FINS';
  1320. 'FIN' BOU_IT1;
  1321.  
  1322. 'SI' IPHASE ;
  1323. * Evolution de la proportion de phase (impossible actuellement en parallele car Non-Local)
  1324. PROPHA1 ='PROP' MODTOT PROPHA0 Q_LAT_INT DU1 ;
  1325. PROPHA0 = PROPHA1 ;
  1326. 'FINS' ;
  1327.  
  1328. TH_COUR = U1 - CHTREF ;
  1329. ETAB.'THER_COURANT' = TH_COUR ;
  1330.  
  1331. *--------------- Appel a la procedure utilisateur PERSO2 ---------------
  1332. 'SI' ETAB.'PROCEDURE_PERSO2';
  1333. * CB215821 : Il serait bien de mettre dans ESTIMATION la solution COURANTE
  1334. * 'SI' ('EXIS' PRECED 'TEMPERATURES' ) ;
  1335. * tab_z = 'INDEX' PRECED.'TEMPERATURES' ;
  1336. * IND0 = tab_z. ('DIME' tab_z) ;
  1337. * ETAB.'TEMI' = PRECED.'TEMPERATURES' . IND0 ;
  1338. * 'SINO';
  1339. * tab_z = 'INDEX' PRECED.'CONCENTRATIONS' ;
  1340. * IND0 = tab_z. ('DIME' tab_z) ;
  1341. * ETAB.'TEMI' = PRECED.'CONCENTRATIONS' . IND0 ;
  1342. * 'FINS' ;
  1343. PERSO2 PRECED ;
  1344. * ETAB = 'ENLEVER' ETAB 'TEMI' ;
  1345. 'SI' ('EXIS' PRECED 'ARRET') ;
  1346. ETAB.'ARRET' = PRECED.'ARRET' ;
  1347. 'FINS' ;
  1348. 'FINS';
  1349.  
  1350. *******************************************************************
  1351. * Reinitialisation des variables en vue du pas suivant *
  1352. *******************************************************************
  1353. 'SI' ((ITE3+1) '&lt;EG' DCALC);
  1354. TEM0 = TEM1;
  1355. TEM1 ='EXTR' TE_CALC (ITE3 + 1);
  1356. T_PAS = TEM1 - TEM0 ;
  1357. U0 = U1 ;
  1358. U0MTREF= U0 - CHTREF ;
  1359.  
  1360. 'SINO';
  1361. 'QUIT' BOUC_SO;
  1362. 'FINS';
  1363.  
  1364. *------------------------ On fait le menage -----------------------
  1365. 'MENA' ;
  1366. 'FIN' BOUC_SO ;
  1367.  
  1368. 'SAUT' 1 'LIGN' ;
  1369.  
  1370. STAB.'ERREUR' = ERR_VAL ;
  1371. 'SI' ETAB.'FOR_THER' ;
  1372. CHTMP ='EXCO' TH_COUR ETAB.'PRIM_T' 'NOID' ;
  1373. STAB.'INITIAL(2)' ='CHAN' 'ATTRIBUT' CHTMP 'NATURE' 'DIFFUS';
  1374. STAB.'CLIT' = MAT_BLTH ;
  1375. 'FINS' ;
  1376. 'SI' IDIFF ;
  1377. CHTMP ='EXCO' TH_COUR ETAB.'PRIM_DIF' 'NOID' ;
  1378. STAB.'CO2' ='CHAN' 'ATTRIBUT' CHTMP 'NATURE' 'DIFFUS';
  1379. STAB.'CLID' = MAT_BLDI ;
  1380. 'FINS' ;
  1381.  
  1382. 'SI' IRIB ;
  1383. STAB.'RIBLO_T' = RIBL_VAL ;
  1384. STAB.'LISEA_T' = LISE_VAL ;
  1385. 'FINS' ;
  1386.  
  1387. 'SI' IPHASE ;
  1388. STAB.'PROPPHAS' = PROPHA1 ;
  1389. 'FINS' ;
  1390.  
  1391. *Ecriture des Proportions de Phases en sortie (Modele Metallurgique par T.L. en mai 2018)
  1392. 'SI' IMETAL ;
  1393. STAB.'PROPORTIONS_PHASES' ='REDU' PHA_MET1 ETAB.'MOD_MET' ;
  1394. 'FINS' ;
  1395.  
  1396. 'OPTI' 'PARA' FAUX ;
  1397. 'FINPROC' STAB ;
  1398.  
  1399.  
  1400.  

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