Salome HOME
dac85be961fb1a17226e8a72973222377b0054d1
[modules/homard.git] / src / tests / Test / tutorial_3.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2011-2023  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """
21 Python script for HOMARD
22 Test tutorial_3 associe au tutorial 3
23 """
24 __revision__ = "V4.07"
25
26 #========================================================================
27 TEST_NAME = "tutorial_3"
28 DEBUG = False
29 N_ITER_TEST_FILE = 2
30 #========================================================================
31 import os
32 import sys
33 #
34 # ==================================
35 PATH_HOMARD = os.getenv('HOMARD_ROOT_DIR')
36 # Repertoire des scripts utilitaires
37 REP_PYTHON = os.path.join(PATH_HOMARD, "bin", "salome", "test", "HOMARD")
38 REP_PYTHON = os.path.normpath(REP_PYTHON)
39 sys.path.append(REP_PYTHON)
40 from test_util import get_dir
41 from test_util import test_results
42 # ==================================
43 # Répertoires pour ce test
44 REP_DATA, DIRCASE = get_dir(PATH_HOMARD, TEST_NAME, DEBUG)
45 # ==================================
46 #
47 import salome
48 salome.salome_init_without_session()
49 import HOMARD
50 #
51 import iparameters
52 IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
53 IPAR.append("AP_MODULES_LIST", "Homard")
54 #
55 #
56 #========================= Debut de la fonction ==================================
57 #
58 def homard_exec(nom, ficmed, verbose=False):
59   """
60 Python script for HOMARD
61   """
62   erreur = 0
63   message = ""
64   #
65   while not erreur :
66     #
67   #  HOMARD.UpdateStudy()
68     #
69     # Hypotheses
70     # ==========
71     if verbose :
72       print(". Hypothèses")
73     # Hypothese "hypo_0vers1"
74     # =======================
75     hypo_0vers1 = HOMARD.CreateHypothesis('hypo_0vers1')
76     # Characterization of the field
77     hypo_0vers1.SetField('SOLU_0__QIRE_ELEM_SIGM__________')
78     hypo_0vers1.SetUseComp(0)
79     hypo_0vers1.AddComp('ERREST          ')
80     hypo_0vers1.SetRefinThr(3, 1.0)
81     hypo_0vers1.SetTypeFieldInterp(2)
82     hypo_0vers1.AddFieldInterp('SOLU_0__DEPL____________________')
83     hypo_0vers1.AddFieldInterp('SOLU_0__ERRE_ELEM_SIGM__________')
84     #
85     # Hypothese "hypo_1vers2"
86     # =======================
87     hypo_1vers2 = HOMARD.CreateHypothesis('hypo_1vers2')
88     # Characterization of the field
89     hypo_1vers2.SetField('SOLU_1__QIRE_ELEM_SIGM__________')
90     hypo_1vers2.SetUseComp(0)
91     hypo_1vers2.AddComp('ERREST          ')
92     hypo_1vers2.SetRefinThr(3, 1.5)
93     hypo_1vers2.SetUnRefThr(3, 6.)
94     hypo_1vers2.SetTypeFieldInterp(2)
95     hypo_1vers2.AddFieldInterp('SOLU_1__DEPL____________________')
96     hypo_1vers2.AddFieldInterp('SOLU_1__QIRE_ELEM_SIGM__________')
97     #
98     # Hypothese "hypo_1vers2_bis"
99     # ===========================
100     hypo_1vers2_bis = HOMARD.CreateHypothesis('hypo_1vers2_bis')
101     # Characterization of the field
102     hypo_1vers2_bis.SetField('SOLU_1__DEPL____________________')
103     hypo_1vers2_bis.SetUseComp(1)
104     hypo_1vers2_bis.AddComp('DX')
105     hypo_1vers2_bis.AddComp('DY')
106     hypo_1vers2_bis.AddComp('DZ')
107     hypo_1vers2_bis.SetRefinThr(1, 0.0001)
108     hypo_1vers2_bis.SetUnRefThr(1, 0.000001)
109     hypo_1vers2_bis.SetTypeFieldInterp(0)
110     #
111     # Cas
112     # ===
113     if verbose :
114       print(". Cas")
115     le_cas = HOMARD.CreateCase('case_3', nom, ficmed)
116     le_cas.SetDirName(DIRCASE)
117     #
118     # Itérations
119     # ==========
120     if verbose :
121       option = 2
122     else :
123       option = 1
124     if verbose :
125       print(". Itérations")
126     # Iteration "iter_3_1"
127     # ====================
128     iter_3_1 = le_cas.NextIteration('iter_3_1')
129     iter_3_1.SetMeshName('H_1')
130     iter_3_1.SetMeshFile(os.path.join(DIRCASE, "maill.01.med"))
131     iter_3_1.SetFieldFile(os.path.join(REP_DATA, "tutorial_3.00.med"))
132     iter_3_1.SetTimeStepRank( 1, 1)
133     iter_3_1.AssociateHypo('hypo_0vers1')
134     erreur = iter_3_1.Compute(1, option)
135     if erreur :
136       break
137     #
138     # Iteration "iter_3_2"
139     # ====================
140     iter_3_2 = iter_3_1.NextIteration('iter_3_2')
141     iter_3_2.SetMeshName('H_2')
142     iter_3_2.SetMeshFile(os.path.join(DIRCASE, "maill.02.med"))
143     iter_3_2.SetFieldFile(os.path.join(REP_DATA, "tutorial_3.01.med"))
144     iter_3_2.SetTimeStepRank(1, 1)
145     iter_3_2.AssociateHypo('hypo_1vers2')
146     erreur = iter_3_2.Compute(1, option)
147     if erreur :
148       break
149     #
150     # Iteration "iter_3_2_bis"
151     # ========================
152     iter_3_2_bis = iter_3_1.NextIteration('iter_3_2_bis')
153     iter_3_2_bis.SetMeshName('H_2_bis')
154     iter_3_2_bis.SetMeshFile(os.path.join(DIRCASE, "maill.02.bis.med"))
155     iter_3_2_bis.SetFieldFile(os.path.join(REP_DATA, "tutorial_3.01.med"))
156     iter_3_2_bis.SetTimeStepRank(1, 1)
157     iter_3_2_bis.AssociateHypo('hypo_1vers2_bis')
158     erreur = iter_3_2_bis.Compute(1, option)
159     if erreur :
160       break
161   #
162     break
163   #
164   if erreur :
165     message += "Erreur au calcul de l'itération %d" % erreur
166   #
167   return erreur, message
168 #
169 #==========================  Fin de la fonction ==================================
170 #
171 ERREUR = 0
172 MESSAGE = ""
173 while not ERREUR :
174   #
175   # A. Exec of HOMARD-SALOME
176   #
177   HOMARD = salome.lcc.FindOrLoadComponent('FactoryServer', 'HOMARD')
178   assert HOMARD is not None, "Impossible to load homard engine"
179   HOMARD.SetLanguageShort("fr")
180 #
181   FICMED = os.path.join(REP_DATA, TEST_NAME+".00.med")
182   try:
183     ERREUR, MESSAGE = homard_exec("G_0", FICMED, DEBUG)
184   except RuntimeError as eee:
185     ERREUR = 2
186     MESSAGE = str(eee.message)
187   #
188   if ERREUR :
189     MESSAGE += "Pb in homard_exec"
190     break
191   #
192   # B. Test of the results
193   #
194   N_REP_TEST_FILE = 3
195   DESTROY_DIR = not DEBUG
196   test_results(REP_DATA, TEST_NAME, DIRCASE, N_ITER_TEST_FILE, N_REP_TEST_FILE, DESTROY_DIR)
197   #
198   break
199 #
200 if ERREUR:
201   raise Exception(MESSAGE)
202 #
203 if salome.sg.hasDesktop():
204   salome.sg.updateObjBrowser()
205   iparameters.getSession().restoreVisualState(1)
206