Télécharger transnon.procedur

Retour à la liste

Numérotation des lignes :

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

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