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