Salome HOME
581e3dee8f3dad1c8e4767a064d43802bea60ec8
[tools/eficas.git] / Aster / Cata / cataSTA10 / Macro / macr_ecre_calc_ops.py
1 #@ MODIF macr_ecre_calc_ops Macro  DATE 28/02/2011   AUTEUR BOTTONI M.BOTTONI 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
10 #
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 #
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
20
21
22 def macr_ecre_calc_ops(
23   self,
24   TABLE,
25   DEBIT,
26   FISSURE,
27   ECOULEMENT,
28   TEMPERATURE,
29   MODELE_ECRE,
30   CONVERGENCE,
31   LOGICIEL,
32   VERSION,
33   ENTETE,
34   #COURBES,
35   IMPRESSION,
36   INFO,
37   **args):
38
39   """
40      Procedure de couplage Aster-Ecrevisse
41      Generation par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
42   """
43
44   import os, string, types, shutil
45   import aster
46   from Accas import _F
47   #from Noyau.N_utils import AsType
48   from Utilitai.Utmess import UTMESS
49   from Utilitai.System import ExecCommand
50
51   ier=0
52
53
54   # PARAMETRES DEBUG
55   debug = False
56   
57
58
59
60   # Concept sortant
61   self.DeclareOut('__TAB',TABLE)
62   self.DeclareOut('__DEB',DEBIT)
63
64   # La macro compte pour 1 dans la numerotation des commandes
65   self.set_icmd(1)
66
67   # Info
68   info2 = (INFO==2)
69   if debug :
70       info2=True
71
72   # Parametres Developpeur
73   tmp_ecrevisse = "tmp_ecrevisse"
74   fichier_data  = "data.dat"
75   defaut        = '00'
76
77   # IMPORTATION DE COMMANDES ASTER
78   EXEC_LOGICIEL  = self.get_cmd("EXEC_LOGICIEL")
79   CREA_TABLE     = self.get_cmd("CREA_TABLE")
80 #  IMPR_TABLE     = self.get_cmd("IMPR_TABLE")
81   IMPR_FONCTION  = self.get_cmd("IMPR_FONCTION")
82
83   # RECUPERATION DES MOTS-CLES FACTEURS
84   dFISSURE=FISSURE[0].cree_dict_valeurs(FISSURE[0].mc_liste)
85   for i in dFISSURE.keys():
86     if dFISSURE[i]==None : del dFISSURE[i]
87
88   dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
89   for i in dECOULEMENT.keys():
90     if dECOULEMENT[i]==None : del dECOULEMENT[i]
91
92   dTEMPERATURE=TEMPERATURE[0].cree_dict_valeurs(TEMPERATURE[0].mc_liste)
93   for i in dTEMPERATURE.keys():
94     if dTEMPERATURE[i]==None : del dTEMPERATURE[i]
95
96   dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
97   for i in dMODELE_ECRE.keys():
98     if dMODELE_ECRE[i]==None : del dMODELE_ECRE[i]
99
100   dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
101   for i in dCONVERGENCE.keys():
102     if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
103
104   if debug:
105       print 'dFISSURE = ', dFISSURE
106       print 'dECOULEMENT = ', dECOULEMENT
107       print 'dTEMPERATURE = ', dTEMPERATURE
108       print 'dMODELE_ECRE = ', dMODELE_ECRE
109       print 'dCONVERGENCE = ', dCONVERGENCE
110       print 'ENTETE = ', ENTETE
111       print 'IMPRESSION = ', IMPRESSION
112       print 'INFO = ', INFO
113
114
115
116
117 # ---------------------------------------------------------------------
118 # CONSTRUCTION DU JEU DE PARAMETRES
119
120   d = {}
121   d[ 0 ] = ENTETE,
122
123   # FISSURE
124   d[ 1 ]  = defaut,
125   d[ 2 ]  = str(len(dFISSURE['LISTE_COTES_AH'])),
126   d[ 3 ]  = dFISSURE['LISTE_COTES_AH'],
127   d[ 4 ]  = dFISSURE['LISTE_VAL_AH'],
128   d[ 5 ]  = str(len(dFISSURE['LISTE_COTES_BL'])),
129   d[ 6 ]  = dFISSURE['LISTE_COTES_BL'],
130   d[ 7 ]  = dFISSURE['LISTE_VAL_BL'],
131   d[ 8 ]  = dFISSURE['LONGUEUR'],
132   d[ 9 ]  = dFISSURE['ANGLE'],
133   d[ 10 ] = dFISSURE['RUGOSITE'],
134   d[ 11 ] = dFISSURE['ZETA'],
135   if dFISSURE['SECTION'] == 'ELLIPSE':
136     d[ 1 ]  = 1,
137   if dFISSURE['SECTION'] == 'RECTANGLE':
138     d[ 1 ]  = 2,
139
140   # ECOULEMENT
141   d[ 20 ] = dECOULEMENT['PRES_ENTREE'],
142   d[ 21 ] = dECOULEMENT['PRES_SORTIE'],
143   d[ 22 ] = dECOULEMENT['FLUIDE_ENTREE'],
144   d[ 23 ] = defaut,
145   d[ 24 ] = defaut,
146   d[ 25 ] = defaut,
147   if dECOULEMENT['FLUIDE_ENTREE'] in [1, 3, 4, 6]:
148     d[ 23 ] = dECOULEMENT['TEMP_ENTREE'],
149   if dECOULEMENT['FLUIDE_ENTREE'] in [2, 5]:
150     d[ 24 ] = dECOULEMENT['TITR_MASS'],
151   if dECOULEMENT['FLUIDE_ENTREE'] in [4, 5]:
152     d[ 25 ] = dECOULEMENT['PRES_PART'],
153
154   # TEMPERATURE
155   d[ 30 ] = defaut,
156   d[ 31 ] = defaut,
157   d[ 32 ] = defaut,
158   d[ 33 ] = defaut,
159   d[ 34 ] = defaut,
160   d[ 35 ] = defaut,
161   d[ 36 ] = defaut,
162   d[ 37 ] = defaut,
163   d[ 38 ] = defaut,
164   d[ 39 ] = defaut,
165   d[ 40 ] = defaut,
166   if dTEMPERATURE['GRADIENT'] == 'FOURNI':
167     d[ 30 ] = -1
168     d[ 31 ] = len(dTEMPERATURE['LISTE_COTES_TEMP'])
169     d[ 32 ] = dTEMPERATURE['LISTE_COTES_TEMP']
170     d[ 33 ] = dTEMPERATURE['LISTE_VAL_TEMP']
171   if dTEMPERATURE['GRADIENT'] == 'IMPOSE':
172     d[ 30 ] = 0
173     d[ 34 ] = dTEMPERATURE['TEMP1']
174     d[ 35 ] = dTEMPERATURE['TEMP2']
175   if dTEMPERATURE['GRADIENT'] == 'CALCULE':
176     d[ 30 ] = 1
177     d[ 36 ] = dTEMPERATURE['EPAISSEUR_PAROI']
178     d[ 37 ] = dTEMPERATURE['CONVECTION_AMONT']
179     d[ 38 ] = dTEMPERATURE['CONVECTION_AVAL']
180     d[ 39 ] = dTEMPERATURE['LAMBDA']
181     d[ 40 ] = dTEMPERATURE['TEMP_FLUIDE_AVAL']
182
183   # MODELE_ECRE
184   d[ 60 ] = defaut,
185   d[ 61 ] = defaut,
186   if dMODELE_ECRE['ECOULEMENT'] == 'SATURATION':
187     d[ 60 ] = 1,
188   if dMODELE_ECRE['ECOULEMENT'] == 'GELE':
189     d[ 60 ] = 2,
190     d[ 61 ] = dMODELE_ECRE['PRESS_EBULLITION'],
191
192   d[ 70 ] = dMODELE_ECRE['FROTTEMENT'],
193   d[ 71 ] = defaut,
194   d[ 72 ] = defaut,
195   d[ 73 ] = defaut,
196   d[ 74 ] = defaut,
197   d[ 75 ] = defaut,
198   if dMODELE_ECRE['FROTTEMENT'] < 0:
199     d[ 71 ] = dMODELE_ECRE['REYNOLDS_LIM'],
200     d[ 72 ] = dMODELE_ECRE['FROTTEMENT_LIM'],
201
202   d[ 73 ] = dMODELE_ECRE['TRANSFERT_CHAL'],
203
204   if dMODELE_ECRE['TRANSFERT_CHAL'] == 0: pass # Pour memoire 3 cas >0, =0, <0
205   if dMODELE_ECRE['TRANSFERT_CHAL']  > 0: pass # Pour memoire 3 cas >0, =0, <0
206   if dMODELE_ECRE['TRANSFERT_CHAL']  < 0:
207     d[74] = dMODELE_ECRE['XMINCH'],
208     d[75] = dMODELE_ECRE['XMAXCH'],
209
210   d[79] = dMODELE_ECRE['IVENAC'],
211
212   if IMPRESSION == 'OUI':
213     d[ 84 ] = 1,
214   if IMPRESSION == 'NON':
215     d[ 84 ] = 0,
216
217   # CONVERGENCE
218   d[ 88 ] = dCONVERGENCE['KGTEST'],
219   d[ 89 ] = dCONVERGENCE['ITER_GLOB_MAXI'],
220   d[ 90 ] = dCONVERGENCE['CRIT_CONV_DEBI'],
221
222   if debug: print d
223
224
225
226
227 # ---------------------------------------------------------------------
228 # GENERATION DU FICHIER DATA.DAT
229
230   txt = fichier_data_ecrevisse()
231
232   for num_param in d.keys():
233     if type(d[num_param]) in [int, float]:
234       txt0 = str(d[num_param])
235     elif type(d[num_param]) in [tuple, list]:
236       txt0 = str(d[num_param]).replace('(', '')
237       txt0 = txt0.replace(')', '')
238       txt0 = txt0.replace(',', '')
239       txt0 = txt0.replace("'", '')
240       txt0 = txt0.replace("[", '')
241       txt0 = txt0.replace("]", '')
242     else:
243       try:    txt0 = str(d[num_param])
244       except: UTMESS('F','ECREVISSE0_11')
245
246     # On remplace la variable dans le fichier par sa valeur
247     txt = txt.replace( '$V['+str(num_param)+']', txt0 )
248
249   if debug : print txt
250
251
252
253
254 # ---------------------------------------------------------------------
255 # CREATION DE L'ENVIRONNEMENT D'ETUDE POUR ECREVISSE
256
257
258   # Repertoire temporaire d'execution d'Ecrevisse
259   tmp_ecrevisse = os.path.join(os.getcwd(),tmp_ecrevisse)
260
261   if not os.path.isdir(tmp_ecrevisse) :
262     try :
263       os.mkdir(tmp_ecrevisse)
264     except os.error,erreur :
265       if debug :
266         print "Code d'erreur de mkdir : " + str(erreur[0]) + " : " + str(erreur[1])
267       UTMESS('F','ECREVISSE0_12',valk=[tmp_ecrevisse])
268
269   # On recopie eventuellement l'ancien fichier debits
270   src = os.path.join('.', 'REPE_OUT', 'debits_dernier')
271   dst = os.path.join(tmp_ecrevisse, 'debits')
272   if os.path.isfile(src):
273      try:
274         shutil.copyfile(src, dst)
275      except Exception, e:
276         UTMESS('F','ECREVISSE0_24',valk=[src, dst])
277         #print "ERREUR : copyfile %s -> %s" % (src, dst)
278
279   # Executable Ecrevisse
280   if LOGICIEL :
281     if not os.path.isfile(str(LOGICIEL)):
282       UTMESS('F','ECREVISSE0_13')
283     else:
284       chemin_executable = str(LOGICIEL)
285   else :
286     chemin_executable = os.path.join(aster.repout(), 'ecrevisse')
287     #chemin_executable = os.path.join(aster.repout(),version,'ecrevisse') 
288     if debug :
289       print 'chemin_executable:',chemin_executable
290
291   # Soit on fait un lien symbolique (incompatible avec certaines plate-formes) soit on recopie l'executable
292   if not os.path.isfile(os.path.join(tmp_ecrevisse, 'ecrevisse')):
293     try:
294       os.symlink( chemin_executable, os.path.join(tmp_ecrevisse, 'ecrevisse') )
295     except:
296       UTMESS('A','ECREVISSE0_14')
297       cmd = 'cp ' + chemin_executable + ' ' + os.path.join(tmp_ecrevisse, 'ecrevisse')
298       res = os.system(cmd)
299       os.chmod( os.path.join(tmp_ecrevisse, 'ecrevisse') ,0755)
300       if (res!=0): UTMESS('F','ECREVISSE0_15')
301
302   # Ecriture du fichier de donnees pour Ecrevisse
303   fw = open(os.path.join(tmp_ecrevisse, fichier_data),'w')
304   fw.write(txt)
305   fw.close()
306
307   # Sauvegarde dans REPE_OUT du data.dat
308   os.system('cp ' + tmp_ecrevisse + '/data.dat REPE_OUT/')
309
310
311 # ---------------------------------------------------------------------
312 # EXECUTION D'ECREVISSE
313
314   # Choix du shell
315   cmd = '#!sh'
316   for shell in ['/bin/sh', '/bin/bash', '/usr/bin/sh']:
317     if os.path.isfile(shell):
318       cmd = '#!' + shell
319       break
320
321 #   #Ligne suivante a ajouter avec la version LINUX compilee avec GFORTRAN
322 #   cmd = cmd + '\nexport LD_LIBRARY_PATH=/logiciels/aster/Linux/GF4/public/gcc-4.1.1/lib:$LD_LIBRARY_PATH'
323
324   # Creation du contenu du script de lancement ecrevisse.sh
325   cmd = cmd + '\ncd ' + tmp_ecrevisse + '\n' + os.path.join(tmp_ecrevisse, 'ecrevisse') + ' ' + str(VERSION) + '\nset iret=$?\ncd ..\nexit $iret'
326   fw = open(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),'w')
327   fw.write(cmd)
328   fw.close()
329   os.chmod(os.path.join(tmp_ecrevisse, 'ecrevisse.sh') ,0755)
330
331   # Lancement d'Ecrevisse
332   UTMESS('I','ECREVISSE0_16')
333   res = ExecCommand(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),follow_output=True,verbose=True)
334   UTMESS('I','ECREVISSE0_17')
335
336
337   if info2: os.system('ls -al ' + tmp_ecrevisse)
338
339
340
341
342 # ---------------------------------------------------------------------
343 # RECUPERATION DES RESULTATS DEPUIS ECREVISSE
344
345
346   # 1)  5 COLONNES (a partir de ECREVISSE 3.1.e)
347   #       COTE z (m), FLUX THERMIQUE (W/m2), PRESSION TOTALE ABSOLUE (Pa),
348   #       TEMPERATURE FLUIDE (degres C), COEFFICIENT DE CONVECTION (W/m2/K)
349   try:
350       f_ast = open(os.path.join(tmp_ecrevisse, 'pour_aster'),'r')
351       _txt = f_ast.read()
352       f_ast.close()
353       # transforme le texte en liste
354       _lst = _txt.split()
355       # transforme la liste de textes en liste de float
356       _lst = map( float, _lst )
357
358       # ATTENTION : les cotes _ecr_c sont celles des resultats ecrevisse,
359       #              c'est a dire les points de milieu du maillage aster,
360       #              eventuellement multiplies par 1/TORTUOSITE!
361       _ecr_c  = _lst[1:len(_lst):5]
362       _ecr_f  = _lst[2:len(_lst):5]
363       _ecr_p  = _lst[3:len(_lst):5]
364       _ecr_t  = _lst[4:len(_lst):5]
365       _ecr_cc = _lst[5:len(_lst):5]
366
367   except:
368       UTMESS('F','ECREVISSE0_18')
369       _ecr_c  = [-1]
370       _ecr_f  = [-1]
371       _ecr_p  = [-1]
372       _ecr_t  = [-1]
373       _ecr_cc = [-1]
374
375   else:
376       # On elimine les eventuels points en plus
377       #   (cela arrive si la longueur de la fissure est plus grande de la derniere cotes)
378       #   mais on considere quand meme la derniere cote du maillage aster
379       lx_ast = dFISSURE['LISTE_COTES_AH']
380       nbCotesEcre = len(lx_ast)
381       _ecr_c  = _ecr_c[0:nbCotesEcre]
382       _ecr_f  = _ecr_f[0:nbCotesEcre]
383       _ecr_p  = _ecr_p[0:nbCotesEcre]
384       _ecr_t  = _ecr_t[0:nbCotesEcre]
385       _ecr_cc = _ecr_cc[0:nbCotesEcre]
386
387
388
389   # 2)   DEBIT - 5 COLONNES (a partir de ECREVISSE 3.1.e)
390   #          DEBIT TOTAL (kg/s), DEBIT AIR (kg/s), DEBIT VAPEUR (kg/s),
391   #          DEBIT LIQUIDE (kg/s), TYPE ECOULEMENT
392   try:
393       f_deb = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
394       _tex = f_deb.read()
395       f_deb.close()
396       _lis = _tex.split()
397       _lis = map( float, _lis )
398
399       _dtot  = _lis[0:len(_lis):5]
400       _dair  = _lis[1:len(_lis):5]
401       _dvap  = _lis[2:len(_lis):5]
402       _dliq  = _lis[3:len(_lis):5]
403       _ecou  = _lis[4:len(_lis):5]
404
405   except:
406       UTMESS('A','ECREVISSE0_18')
407       _dtot = [-1]
408       _dair = [-1]
409       _dvap = [-1]
410       _dliq = [-1]
411       _ecou = [-1]
412
413
414
415 # ---------------------------------------------------------------------
416 # CREATION DES SD-TABLE DE RESULTATS
417
418   __TAB=CREA_TABLE(LISTE=(_F(LISTE_R=_ecr_c,
419                            PARA='COTES'),
420                         _F(LISTE_R=_ecr_f,
421                            PARA='FLUX'),
422                         _F(LISTE_R=_ecr_p,
423                            PARA='PRESSION'),
424                         _F(LISTE_R=_ecr_t,
425                            PARA='TEMP'),
426                         _F(LISTE_R=_ecr_cc,
427                            PARA='COEF_CONV'),
428                          ))
429
430   __DEB=CREA_TABLE(LISTE=(_F(LISTE_R=_dtot,
431                            PARA='DEBTOT'),
432                         _F(LISTE_R=_dair,
433                            PARA='DEBAIR'),
434                         _F(LISTE_R=_dvap,
435                            PARA='DEBVAP'),
436                         _F(LISTE_R=_dliq,
437                            PARA='DEBLIQ'),
438                         _F(LISTE_I=_ecou,
439                            PARA='ECOULEMENT'),
440                          ))
441
442
443
444
445 # ---------------------------------------------------------------------
446 # DEBUG
447   if debug :
448       print 'DEBUT DEBUG MACR_ECRE_CALC'
449       print 'Chargements donnes par Ecrevisse'
450       print 'cotes aster :', lx_ast
451       print '_ecr_c  : min=', min(_ecr_c), ' / max=', max(_ecr_c), ' / ', _ecr_c
452       print '_ecr_f  : min=', min(_ecr_f), ' / max=', max(_ecr_f), ' / ', _ecr_f
453       print '_ecr_p  : min=', min(_ecr_p), ' / max=', max(_ecr_p), ' / ', _ecr_p
454       print '_ecr_t  : min=', min(_ecr_t), ' / max=', max(_ecr_t), ' / ', _ecr_t
455       print '_ecr_cc : min=', min(_ecr_cc), ' / max=', max(_ecr_cc), ' / ', _ecr_cc
456       print '_dtot=', _dtot
457       print '_dair=', _dair
458       print '_dvap=', _dvap
459       print '_dliq=', _dliq
460       print '_ecou=', _ecou
461       print __DEB.EXTR_TABLE()
462       print __TAB.EXTR_TABLE()
463       print 'FIN DEBUG MACR_ECRE_CALC'
464
465
466
467 # ---------------------------------------------------------------------
468 # RECUPERATION DES RESULTATS OPTIONNELS DEPUIS ECREVISSE
469 # A finir
470 #  lst_fic = os.listdir(tmp_ecrevisse)
471
472
473
474 # ---------------------------------------------------------------------
475 # FIN MACR_ECRE_CALC
476   return ier
477
478
479
480
481 # ---------------------------------------------------------------------
482 def fichier_data_ecrevisse():
483
484   """
485      Modele du fichier data.dat a la syntaxe Ecrevisse 3.0
486      Cette chaine de caractere est l'exacte replique d'un fichier de donnees
487      Ecrevisse 3.0 dans lequel toutes les donnees numeriques ont ete
488      remplacees par $V[x].
489   """
490
491   txt = """$V[0]
492
493
494       DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
495       *******************************************
496
497 $V[1]        is: type de section  (is=1 ellipse is=2 rectangle)
498 $V[2]        nb points decrivant ah: grand axe  (m)
499 $V[3]
500 $V[4]
501 $V[5]        nb points decrivant bl: petit axe (m)
502 $V[6]
503 $V[7]
504 $V[8]        zl: longueur totale de la fissure (m)
505 $V[9]        theta: angle par rapport a la verticale ascendante (en degres)
506 $V[10]       eps: rugosite absolu (m)
507 $V[11]       zeta: coefficient de la perte de charge singuliere a l'entree
508
509       DONNEES RELATIVES A L"ECOULEMENT
510       ********************************
511
512 $V[20]       pe: pression de stagnation a l'entree (Pa)
513 $V[21]       ps: pression de stagnation a la sortie (Pa)
514 $V[22]       iflow : condition du fluide a l'entree
515                iflow=1  : eau sous-refroidie ou saturee
516                iflow=2  : fluide diphasique
517                iflow=3  : vapeur saturee ou surchauffee
518                iflow=4  : air + vapeur surchauffee
519                iflow=5  : air + vapeur saturee
520                iflow=6  : air seul
521 $V[23]       te: temperature a l'entree (deg C) (utilise si iflow=1,3,4,6)
522 $V[24]       xe: titre m. eau vap/eau tot a l'entree (utilise si iflow=2 ou 5)
523 $V[25]       pae : pression partielle air en entree (Pa) (utilise si iflow>3)
524
525       DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
526       *************************************************************
527
528 $V[30]       imograd : modele de calcul du gradient de temperature
529                imograd=-1/ distribution imposee de temperature (max 100pts)
530                imograd=0 : profil impose de la temperature
531                imograd=1 : calcul du profil
532 $V[31]       cas imograd = -1 : ntmat, nb de points donnes ensuite (max=100)
533 $V[32]
534 $V[33]
535 $V[34]       tm1: grad. temp. paroi le lg de l'ecoul.(utilise si imograd=0) (degC/m)
536 $V[35]       tm2: temperature de la paroi a l'entree (utilise si imograd=0) (degC)
537 $V[36]       epp: epaisseur de la paroi (utilise si imograd=1) (m)
538 $V[37]       alphe: coeff. convection face amont (utilise si imograd=1) (W/degC/m2)
539 $V[38]       alphs: coeff. convection face aval  (utilise si imograd=1) (W/degC/m2)
540 $V[39]       lambd: conduct. thermique de la paroi (utilise si imograd=1) (W/degC/m)
541 $V[40]       ts: temperature du fluide cote aval (utilise si imograd=1) (degC)
542
543       CHOIX DES MODELES
544       *****************
545
546 Modeles d'ecoulement diphasique
547 -------------------------------
548 $V[60]       imod : type de modele d'ecoulement diphasique
549                imod=1 : modele d'ecoulement a saturation a l'entree
550                imod=2 : modele d'ecoulement 'gele' a l'entree
551 $V[61]       corrp: press. d'ebullition = corrp*psat(t)
552
553 Choix des correlations de frottement et de transfert de chaleur
554 ---------------------------------------------------------------
555 $V[70]       ifrot : frottement (avec : ifrot=1 ou -1 ; sans :  ifrot=0 )
556 $V[71]       cas ifrot=-1 : relim = Re limite
557 $V[72]       cas ifrot=-1 : frtlim = coeff frottement si Re > relim
558
559 $V[73]       ichal : transfert de chaleur (-2 <= ichal <= 2  ichal=0 ==> Pas d'echange de chaleur)
560 $V[74]       cas ichal < 0 : xminch = titre m. gaz avec corr. Chen ou liq pour x<xminch
561 $V[75]       cas ichal < 0 : xmaxch = titre m. gaz avec corr. melange pour x>xmaxch
562
563 Modelisation de la vena contracta
564 ---------------------------------
565 $V[79]       ivenac : avec = 1, sans = 0
566
567 Procedure d'impression
568 ----------------------
569 $V[84]       iprint : impression profils ecran ( oui:1 non:0 )
570
571       DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
572       ********************************************
573
574 $V[88]       kgtest (0 < kgtest < 1) tel que g=kgtest*gmax+(1-kgtest)*gmin
575 $V[89]       itnmax : nombre maximum iterations methode newton
576 $V[90]       precdb : critere de convergence en debit
577 """
578
579   return txt