1 #@ MODIF macr_ecrevisse_ops Macro DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
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.
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.
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 # ======================================================================
21 def macr_ecrevisse_ops(self,reuse,
32 CONVERGENCE_ECREVISSE,
49 Procedure de couplage Aster-Ecrevisse
50 Execution pour tous les pas de temps des calculs thermiques, mecaniques puis hydraulique
51 DecoupageGeneration par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
55 from Utilitai.Utmess import UTMESS
56 from Utilitai.Table import Table, merge
58 import os, aster, copy
62 # La macro compte pour 1 dans la numerotation des commandes
74 # IMPORTATION DE COMMANDES ASTER
75 DEFI_LIST_REEL = self.get_cmd("DEFI_LIST_REEL")
76 THER_LINEAIRE = self.get_cmd("THER_LINEAIRE")
77 PROJ_CHAMP = self.get_cmd("PROJ_CHAMP")
78 DETRUIRE = self.get_cmd("DETRUIRE")
79 AFFE_MATERIAU = self.get_cmd("AFFE_MATERIAU")
80 STAT_NON_LINE = self.get_cmd("STAT_NON_LINE")
81 POST_RELEVE_T = self.get_cmd("POST_RELEVE_T")
82 CALC_ECREVISSE = self.get_cmd("CALC_ECREVISSE")
83 CO = self.get_cmd("CO")
84 CREA_TABLE = self.get_cmd("CREA_TABLE")
85 CREA_RESU = self.get_cmd("CREA_RESU")
86 CREA_CHAMP = self.get_cmd("CREA_CHAMP")
89 # TABLE creees par concatenation des tables sorties par CALC_ECREVISSE a chaque iteration
90 self.DeclareOut('TABL_RES',TABLE)
91 self.DeclareOut('DEB_RES',DEBIT)
92 # Concepts sortant: les resultats de STAT_NON_LINE et de THER_LINEAIRE valides vis-a-vis du calcul ecrevisse
93 self.DeclareOut('RTHERM',TEMPER)
94 self.DeclareOut('MECANIC', self.sd)
98 # Traitement de l'etat initial en cas de poursuite
100 dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
101 for i in dEtatInit.keys():
102 if dEtatInit[i]==None : del dEtatInit[i]
103 __EVINIT = dEtatInit['EVOL_NOLI']
104 __THINIT = dEtatInit['EVOL_THER']
105 _nume_ordre = dEtatInit['NUME_ORDRE']
110 ## Valeur par defaut du mot cle LOGICIEL
111 #if not LOGICIEL: LOGICIEL = os.path.join(aster.repout(), 'ecrevisse')
113 # RECUPERATION DES MOTS-CLES FACTEURS
116 for fissure in FISSURE:
117 dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
118 for i in dFISSURE.keys():
119 if dFISSURE[i]==None : del dFISSURE[i]
120 l_dFISSURE.append(dFISSURE)
122 dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
123 for i in dECOULEMENT.keys():
124 if dECOULEMENT[i]==None : del dECOULEMENT[i]
126 dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
127 for i in dMODELE_ECRE.keys():
128 if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
130 dCONVERGENCE_ECREVISSE=CONVERGENCE_ECREVISSE[0].cree_dict_valeurs(CONVERGENCE_ECREVISSE[0].mc_liste)
131 for i in dCONVERGENCE_ECREVISSE.keys():
132 if dCONVERGENCE_ECREVISSE[i]==None : del dCONVERGENCE_ECREVISSE[i]
134 dCOMP_INCR=COMP_INCR[0].cree_dict_valeurs(COMP_INCR[0].mc_liste)
135 for i in dCOMP_INCR.keys():
136 if dCOMP_INCR[i]==None : del dCOMP_INCR[i]
138 dNEWTON=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
139 for i in dNEWTON.keys():
140 if dNEWTON[i]==None : del dNEWTON[i]
142 dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
143 for i in dCONVERGENCE.keys():
144 if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
146 # Recuperation des infos pour la convergence de la macro
147 dMacr_Conv = CONV_CRITERE[0].cree_dict_valeurs(CONV_CRITERE[0].mc_liste)
148 for i in dMacr_Conv.keys():
149 if dMacr_Conv[i]==None : del dMacr_Conv[i]
151 motclefsCALC_ECREVISSE = {}
152 motclefsCALC_ECREVISSE['COURBES'] = COURBES,
158 # -----------------------------------------------------------------------------------------------------
161 # Si LIST_INST est un DEFI_LIST_REEL :
162 _liste_inst = LIST_INST.Valeurs()
164 print 'liste des instants liste_inst = ', _liste_inst
166 # Drapeaux pour les 1ers calculs et les 1eres definitions
167 IsDefineMaterMeca = False
168 EcrevisseExe = False # si l'execution d'Ecrevisse n'a pas plantee ou a ete realisee
170 # Table python devant contenir toutes les tables Ecrevisse
173 # Precision demandee pour converger sur le critere de la macro
174 # Nombre de decoupages succesifs d'un pas de temps
175 # Pas de temps en dessous duquel on ne decoupe plus
176 if dMacr_Conv.has_key('SUBD_NIVEAU'):
177 MacrNbDecoupage = dMacr_Conv['SUBD_NIVEAU']
178 if dMacr_Conv.has_key('SUBD_PAS_MINI'):
179 MacrPasMini = dMacr_Conv['SUBD_PAS_MINI']
180 MacrTempRef = dMacr_Conv['TEMP_REF']
181 MacrPresRef = dMacr_Conv['PRES_REF']
182 MacrCritere = dMacr_Conv['CRITERE']
183 if dMacr_Conv.has_key('PREC_CRIT'):
184 MacrPrecisCritere = dMacr_Conv['PREC_CRIT']
186 MacrPrecisCritere = None
187 if dMacr_Conv.has_key('NUME_ORDRE_MIN'):
188 MacrNumeOrdre = dMacr_Conv['NUME_ORDRE_MIN']
191 # il faut 2 pas au minimum dans la liste
192 if (len(_liste_inst) < 2 ):
193 UTMESS('F','ECREVISSE0_20', vali=[2])
195 if (not IsPoursuite) :
198 # Dans le cas d'une poursuite :
199 # n reconstruit une nouvelle liste d'instant composee de l'ancienne liste jusqu'a l'instant recherche,
200 # puis de la nouvelle a partir de cet instant
201 # ainsi le _nume_ordre de la nouvelle liste correspond au nume_ordre de l'ancienne
202 __dico1 = __THINIT.LIST_VARI_ACCES()
203 _list_precedente = __dico1['INST']
204 _inst_init = _list_precedente[_nume_ordre-1]
206 # si l'instant est dans la liste, on recupere l'index
207 _idx = _liste_inst.index(_inst_init)
209 # on cherche le plus proche
212 for t in _liste_inst:
218 new_list = _list_precedente[0:_nume_ordre] # liste precedent jusqu'a l'instant a recalculer (inclu, ca permet de gerer le cas ou l'instant a recalculer n'est pas dans la nouvelle liste : il sera ajoute)
219 new_list.extend( _liste_inst[_idx+1:] ) # on lui ajoute la nouvelle liste a partir du l'instant a recalculer
220 _liste_inst = copy.copy(new_list)
222 ########################################################################################
223 # Debut boucle sur la liste d'instant
224 ########################################################################################
226 while ( not FinBoucle ):
227 _inst = _liste_inst[_nume_ordre]
229 print 'Instant debut boucle', _inst
230 # On boucle jusqu'a convergence
235 if ( (not IsPoursuite) or EcrevisseExe) :
236 # Le temps que l'on traite
237 _inst_p_un = _liste_inst[_nume_ordre+1]
239 # Construction de la liste des pas
240 LES_PAS = DEFI_LIST_REEL( VALE=_liste_inst, )
242 print '=====> ===== ===== ===== <===='
243 print 'Iteration numero : ', NbIter
244 print 'Instant : ', _inst
245 print 'Instant+1 : ', _inst_p_un
246 print 'nume_ordre : ', _nume_ordre+1
247 print 'Donnee Ecrevisse : ', EcrevisseExe
249 # ---------------------
251 # ---------------------
252 # Recuperation des chargements thermiques
255 for excit_i in EXCIT_THER:
256 dEXCIT_THER_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
257 for j in dEXCIT_THER_i.keys():
258 if dEXCIT_THER_i[j]==None : del dEXCIT_THER_i[j]
259 _dEXCIT_THER.append(dEXCIT_THER_i)
262 # Definition des chargements thermiques venant d Ecrevisse
264 _dEXCIT_THER.append( _F(CHARGE=FLU1ECR0) )
265 _dEXCIT_THER.append( _F(CHARGE=FLU2ECR0) )
267 # Definition de l'etat initial
269 if (_nume_ordre == 0) :
270 # On verifie que temp_ref est bien renseigne dans AFFE_MATERIAU
272 tref = CHAM_MATER['AFFE_VARC']['VALE_REF']
274 UTMESS('F','ECREVISSE0_22',)
276 motclefs['ETAT_INIT']=[_F(VALE=tref, NUME_ORDRE=_nume_ordre)]
278 print 'thermique initialise avec tref'
281 motclefs['reuse']=__THINIT
282 motclefs['ETAT_INIT']=[_F(EVOL_THER=__THINIT, NUME_ORDRE=_nume_ordre)]
284 print 'thermique initialise avec etat_initial'
286 motclefs['reuse']=RTHERM
287 motclefs['ETAT_INIT']=[_F(EVOL_THER=RTHERM, NUME_ORDRE=_nume_ordre)]
289 print 'thermique initialise avec instant precedent'
292 print '====> THER_LINEAIRE <===='
293 print ' Les charges thermiques'
297 __THINIT = THER_LINEAIRE(
298 MODELE = MODELE_THER,
299 CHAM_MATER = CHAM_MATER,
300 EXCIT = _dEXCIT_THER,
301 INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
302 ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
306 RTHERMPJ=PROJ_CHAMP(RESULTAT=__THINIT, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
307 VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
312 RTHERM=THER_LINEAIRE(
313 MODELE = MODELE_THER,
314 CHAM_MATER = CHAM_MATER,
315 EXCIT = _dEXCIT_THER,
316 INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
317 ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
322 # Projection du champ thermique, a tous les instants sinon pas de deformations thermiques
323 RTHERMPJ=PROJ_CHAMP(RESULTAT=RTHERM, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
324 VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
328 # Definition du materiau pour la mecanique : a faire une seule fois
329 if ( not IsDefineMaterMeca ):
331 motclefmater['AFFE'] = []
332 motclefmater['AFFE_VARC'] = []
334 for j in CHAM_MATER['AFFE_VARC'] :
335 dvarc = j.cree_dict_valeurs(j.mc_liste)
336 for mc, val in dvarc.items():
339 motclefmater['AFFE_VARC'].append(dvarc)
341 for j in CHAM_MATER['AFFE'] :
342 daffe = j.cree_dict_valeurs(j.mc_liste)
343 for mc, val in daffe.items():
346 motclefmater['AFFE'].append(daffe)
349 dvarc['EVOL'] = RTHERMPJ
350 motclefmater['MAILLAGE'] = CHAM_MATER['MAILLAGE']
351 __MATMEC=AFFE_MATERIAU(
354 IsDefineMaterMeca = True
356 # ---------------------
358 # ---------------------
360 # Recuperation des chargements mecaniques
362 for excit_i in EXCIT_MECA:
363 dEXCIT_MECA_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
364 for j in dEXCIT_MECA_i.keys():
365 if dEXCIT_MECA_i[j]==None : del dEXCIT_MECA_i[j]
366 _dEXCIT_MECA.append(dEXCIT_MECA_i)
369 # Definition des chargements venant d'Ecrevisse
371 _dEXCIT_MECA.append( _F(CHARGE=MECAECR0) )
375 if (not IsPoursuite) :
376 if (_nume_ordre != 0):
377 motclefs['reuse'] = MECANIC
378 motclefs['ETAT_INIT']=[_F(EVOL_NOLI=MECANIC, NUME_ORDRE=_nume_ordre)]
380 print 'etat meca initial = pas precedent'
383 print 'etat meca initial : vierge'
385 motclefs['reuse']=__EVINIT
386 motclefs['ETAT_INIT']=[_F(EVOL_NOLI=__EVINIT, NUME_ORDRE=_nume_ordre)]
388 print 'etat meca initial dReuseM', motclefs
391 print '====> STAT_NON_LINE <===='
393 print ' Les charges mecaniques'
397 MECANIC=STAT_NON_LINE(
398 MODELE = MODELE_MECA,
399 CHAM_MATER = __MATMEC,
400 CARA_ELEM = CARA_ELEM,
401 EXCIT = _dEXCIT_MECA,
402 COMP_INCR = _F(**dCOMP_INCR),
403 INCREMENT = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
404 NEWTON = _F(**dNEWTON),
405 CONVERGENCE = _F(**dCONVERGENCE),
406 SOLVEUR = _F(SYME='OUI'),
407 ARCHIVAGE = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
411 # Destruction des concepts
414 DETRUIRE( CONCEPT=(_F(NOM=RTHERMPJ),_F(NOM=LES_PAS),),INFO=1,ALARME='NON',)
417 # CAS OU LA MACRO EST REENTRANTE : ON RELANCE ECREVISSE POUR CONNAITRE
418 # LES CHARGEMENT A UTILISER POUR LES PROBLEMES THERMIQUES ET MECANIQUES
422 # -----------------------------------------------------------------------
423 # ECREVISSE : ATTENTION SI REPRISE CALCUL, ON RECALCULE LE DERNIER INSTANT
424 # -------------------------------------------------------------------------
425 # Si Ecrevisse a deja ete fait une fois.
426 # ==> Efface les concepts qui sont en sortie
435 ),INFO=1,ALARME='NON',
438 # On remplace FONC_XXX par la valeur XXX correspondante a l'instant _inst_p_un
439 dECOULEMENT_ecrevisse = copy.copy(dECOULEMENT)
440 for fonc_name in ["PRES_ENTREE_FO", "PRES_SORTIE_FO", "PRES_PART_FO", "TITR_MASS_FO", "TEMP_ENTREE_FO"]:
441 if dECOULEMENT.has_key(fonc_name):
442 fonc = dECOULEMENT_ecrevisse.pop(fonc_name)
443 vale_name = fonc_name.replace('_FO', '')
444 dECOULEMENT_ecrevisse[vale_name] = fonc(_inst_p_un)
447 # Initialisation des concepts en sortie
448 MECAECR1=CO('MECAECR1')
449 FLU1ECR1=CO('FLU1ECR1')
450 FLU2ECR1=CO('FLU2ECR1')
451 TABLECR1=CO('TABLECR1')
452 DEBIECR1=CO('DEBIECR1')
455 print '====> ECREVISSE entree dans CALC_ECREVISSE <===='
457 if (not IsPoursuite) :
460 CHARGE_MECA = MECAECR1,
461 CHARGE_THER1 = FLU1ECR1,
462 CHARGE_THER2 = FLU2ECR1,
465 MODELE_MECA = MODELE_MECA,
466 MODELE_THER = MODELE_THER,
468 IMPRESSION = IMPRESSION,
470 RESULTAT=_F(THERMIQUE = RTHERM,
472 INST = _inst_p_un, ),
473 # chemin d acces a Ecrevisse
476 # donnees necessaire pour ecrevisse
477 # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
478 # activation eventuelle de TITR_VA et P_AIR
481 ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
482 MODELE_ECRE=_F( **dMODELE_ECRE),
484 CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
485 **motclefsCALC_ECREVISSE
489 CHARGE_MECA = MECAECR1,
490 CHARGE_THER1 = FLU1ECR1,
491 CHARGE_THER2 = FLU2ECR1,
494 MODELE_MECA = MODELE_MECA,
495 MODELE_THER = MODELE_THER,
497 IMPRESSION = IMPRESSION,
499 RESULTAT=_F(THERMIQUE = __THINIT,
500 MECANIQUE = __EVINIT,
501 INST = _inst_p_un, ),
502 # chemin d acces a Ecrevisse
505 # donnees necessaire pour ecrevisse
506 # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
507 # activation eventuelle de TITR_VA et P_AIR
510 ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
511 MODELE_ECRE=_F( **dMODELE_ECRE),
513 CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
514 **motclefsCALC_ECREVISSE
518 print '====> ECREVISSE sortie de CALC_ECREVISSE <===='
521 # Recuperation des infos de la table resultat Ecrevisse
522 T_TABL_TMP1 = TABLECR1.EXTR_TABLE()
523 T_DEB_TMP1 = DEBIECR1.EXTR_TABLE()
524 # # On ajoute deux colonnes supplementaires
525 # _nb_ligne = len(T_DEB_TMP1["DEBTOT"])
526 # T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*_nb_ligne
527 # T_DEB_TMP1["INST"] = [_inst_p_un]*_nb_ligne
529 # Le calcul Ecrevisse c'est bien passe ?
530 EcrevisseExe = ( T_TABL_TMP1.values()['COTES'][0] != -1 )
532 if ( not EcrevisseExe ):
533 # Destruction des concepts de sortie, et on arrete tout
535 CONCEPT=( _F(NOM=MECAECR1),
545 CONCEPT=( _F(NOM=MECAECR0),
556 # A t'on atteint la convergence
557 # TABLECR0 table Ecrevisse a _inst
558 # TABLECR1 table Ecrevisse a _inst_p_un
559 # --------------------
562 # On recupere la liste des temperatures a t et t+1
563 lst_T_0 = T_TABL_TMP0.values()['TEMP']
564 lst_T_1 = T_TABL_TMP1.values()['TEMP']
565 # Le maximum des ecarts
567 for v1, v2 in zip(lst_T_0,lst_T_1):
568 lst_T_diff_01.append(abs(v1-v2))
569 max_T_diff_01 = max(lst_T_diff_01)
571 # On recupere la liste des pressions a t et t+1
572 lst_P_0 = T_TABL_TMP0.values()['PRESSION']
573 lst_P_1 = T_TABL_TMP1.values()['PRESSION']
574 # Le maximum des ecarts
576 for v1, v2 in zip(lst_P_0,lst_P_1):
577 lst_P_diff_01.append(abs(v1-v2))
578 max_P_diff_01 = max(lst_P_diff_01)
580 # "TEMP_PRESS","EXPLICITE","TEMP","PRESS"
581 ErreurT = (max_T_diff_01/MacrTempRef)
582 ErreurP = (max_P_diff_01/MacrPresRef)
583 ErreurG = (ErreurT**2+ErreurP**2)**0.5
584 if ( MacrCritere == 'TEMP' ):
586 elif ( MacrCritere == 'PRESS' ):
591 if ( MacrCritere != 'EXPLICITE' ):
592 Convergence = ( Erreur <= MacrPrecisCritere )
596 UTMESS('I', 'ECREVISSE0_35', valr=[_inst_p_un], valk=[MacrCritere,MacrPrecisCritere,Convergence])
598 UTMESS('I', 'ECREVISSE0_34', valr=[_inst_p_un,ErreurT,max_T_diff_01,ErreurP,max_P_diff_01,ErreurG])
603 UTMESS('I', 'ECREVISSE0_36', valr=[_inst_p_un])
604 # --------------------
608 if ( MacrCritere == 'EXPLICITE' ):
611 if ( (_nume_ordre != 0) and (_nume_ordre+1 <= MacrNumeOrdre) ):
612 UTMESS('A','ECREVISSE0_33', vali=[_nume_ordre+1,MacrNumeOrdre],valr=[_inst_p_un])
616 nb_lignes_t1 = len(T_TABL_TMP1["COTES"])
617 # Ajout de deux colonnes supplementaires
618 # POUR LA TABLE ECREVISSE
619 T_TABL_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_lignes_t1
620 T_TABL_TMP1["INST"] = [_inst_p_un]*nb_lignes_t1
622 # POUR LA TABLE DES DEBITS
623 nb_ligne_t2 = len(T_DEB_TMP1["DEBTOT"])
624 T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_ligne_t2
625 T_DEB_TMP1["INST"] = [_inst_p_un]*nb_ligne_t2
628 # Ajout des infos dans la table finale
630 T_TABL_RES = T_TABL_TMP1
631 T_DEB_RES = T_DEB_TMP1
633 T_TABL_RES = merge(T_TABL_RES, T_TABL_TMP1)
634 T_DEB_RES = merge(T_DEB_RES, T_DEB_TMP1)
635 T_TABL_RES.titr = 'TABLE_SDASTER CHARGEMENT ECREVISSE'
636 T_DEB_RES.titr = 'TABLE_SDASTER DEBIT ECREVISSE'
638 # RAZ des compteurs de division
640 # On memorise les concepts valides
647 T_TABL_TMP0 = T_TABL_TMP1
648 if (not IsInitEcre) :
651 UTMESS('I','ECREVISSE0_37', valr=[_inst_p_un])
656 # A t'on le droit de decouper, par rapport au nombre de division
657 if ( NbIter > MacrNbDecoupage ):
659 UTMESS('A','ECREVISSE0_30', valr=[_inst,_inst_p_un],vali=[MacrNbDecoupage])
662 # on divise le pas de temps par 2
663 tmp = (_inst + _inst_p_un )*0.5
664 # A t'on le droit de continuer, par rapport au pas de temps minimum
665 if ( (tmp - _inst) <= MacrPasMini ):
667 UTMESS('A','ECREVISSE0_31', valr=[_inst,_inst_p_un,tmp,MacrPasMini])
671 UTMESS('A','ECREVISSE0_32', valr=[_inst,_inst_p_un,tmp],vali=[NbIter])
672 # on insere le nouveau temps dans la liste des instants avant "_inst_p_un"
673 _liste_inst.insert(_nume_ordre+1,tmp)
676 # Convergence atteinte, on passe au pas de temps suivant, s'il en reste
679 elif (_nume_ordre + 2 < len(_liste_inst)):
682 # On a fait tous les pas de temps
684 #######################################################################################
685 # Fin boucle sur les pas de temps
686 #######################################################################################
688 # Creation du concept de la table en sortie
689 if ( T_TABL_RES != None ):
690 dprod = T_TABL_RES.dict_CREA_TABLE()
691 TABL_RES = CREA_TABLE(**dprod)
692 if ( T_DEB_RES != None ):
693 debprod = T_DEB_RES.dict_CREA_TABLE()
694 DEB_RES = CREA_TABLE(**debprod)
696 # Destruction des concepts temporaires
698 CONCEPT=( _F(NOM=MECAECR1),
707 if (_nume_ordre != 0 ):
709 CONCEPT=( _F(NOM=MECAECR0),