Télécharger transnon.procedur

Retour à la liste

Numérotation des lignes :

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

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