Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / Tools / ZCracksPlug / Zset.py
1 # Copyright (C) 2016-2022  EDF R&D
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 import os, tempfile, shutil
21 from . import utilityFunctions as uF
22 from .output import message
23
24 def medToGeo(medFile, geoFile, tmpdir, opt=[], verbose=0):
25   medLoc=os.path.dirname(medFile)
26   medName=os.path.basename(medFile)
27   inpFile=os.path.join(tmpdir,'import.inp')
28   zfile = open(inpFile,'w')
29   zfile.write('****mesher\n')
30   zfile.write(' ***mesh %s\n' %(geoFile.replace('.geo','')+'.geo'))
31   zfile.write('  **import med %s\n' %medName)
32   for x in opt:
33     zfile.write(x+'\n')
34   zfile.write('****return\n')
35   zfile.close()
36   commande='cd %s; Zrun -m %s' %(medLoc,inpFile)
37   if verbose!=0: commande+=' >> %s' %os.path.join(tmpdir,'log.msg')
38   res=os.system(commande)
39
40   return(res)
41
42   #os.remove(inpFile)
43
44
45 def geoToMed(medFile, geoFile, tmpdir, opt=[], verbose=0):
46   medLoc=os.path.dirname(medFile)
47   medName=os.path.basename(medFile)
48   inpFile=os.path.join(tmpdir,'export.inp')
49   zfile = open(inpFile,'w')
50   zfile.write('****mesher\n')
51   zfile.write(' ***mesh\n')
52   zfile.write('  **open %s\n' %geoFile)
53   for x in opt:
54     zfile.write(x+'\n')
55   zfile.write('  **export med %s\n' %medName)
56   zfile.write('****return\n')
57   zfile.close()
58   commande='cd %s; Zrun -m %s' %(medLoc,inpFile)
59   if verbose!=0: commande+=' >> %s' %os.path.join(tmpdir,'log.msg')
60   res=os.system(commande)
61   #print ' -------- '
62   #print res
63   #print ' -------- '
64   return(res)
65
66
67 def launchZcrack(minS, maxS,
68                 saneN, crackN, crackedN,
69                 grad, quad, extrL,
70                 nbLay, nbIter,
71                 Gvol, Gfac, Gedg, Gnod,
72                 surfOpt, tmpdir, cas2D, refine, verbose=0, ):
73
74   zfile = open(os.path.join(tmpdir,'insert.z7p'),'w')
75   zfile.write('   #include <Zcracks_base.z7p> \n')
76   zfile.write(' int main()\n{\n')
77   zfile.write('   init_var();\n')
78
79   if cas2D==True:
80     zfile.write('   if_2D=1;\n')
81     zfile.write('   thickness.resize(1);\n')
82     zfile.write('   thickness[0]=-1.;\n')
83
84   zfile.write('   format="geo";\n')
85   zfile.write('   gradation=%e;\n' %grad)
86   zfile.write('   min_size= %e;\n' %minS)
87   zfile.write('   max_size=%e;\n' %maxS)
88   zfile.write('   nb_velem=%d;\n' %(nbLay*2))
89   zfile.write('   nb_iter=%d;\n' %nbIter)
90   zfile.write('   sane_name="%s";\n' %saneN.replace('.geo',''))
91   #zfile.write('   crack_name="%s";\n' %crackN.replace('.geo',''))
92   zfile.write('   convert_surface("%s");\n' %crackN.replace('.geo',''))
93   zfile.write('   cracked_name="%s";\n' %crackedN.replace('.geo',''))
94
95   if Gfac!='': zfile.write('   faset_names="%s";\n' %(Gfac[0] if isinstance(Gfac, list) else Gfac))
96   if Gnod!='': zfile.write('   nset_names="%s";\n' %(Gnod[0] if isinstance(Gnod, list) else Gnod))
97   if Gvol!='': zfile.write('   elset_names="%s";\n' %(Gvol[0] if isinstance(Gvol, list) else Gvol))
98   if Gedg!='': zfile.write('   liset_names="%s";\n' %(Gedg[0] if isinstance(Gedg, list) else Gedg))
99   if surfOpt!='':
100     zfile.write('   yams_options="%s";\n' %surfOpt)
101
102   if refine: zfile.write('   if_must_refine=1;\n')
103
104   if extrL<=1.E-12:
105     zfile.write('   if_must_define_elset=0;\n')
106   else:
107     zfile.write('   if_must_define_elset=1;\n')
108     if extrL==[]:
109       zfile.write('   elset_radius=%e;\n' %maxS)
110     else:
111       zfile.write('   elset_radius=%e;\n' %extrL)
112
113   zfile.write('   nice_cut(20.0);\n}\n\n')
114   zfile.close()
115   commande='Zrun -zp %s' %(os.path.join(tmpdir,'insert.z7p'))
116   if verbose!=0: commande+=' >> %s' %os.path.join(tmpdir,'log.msg')
117   res=os.system(commande)
118   #print ' -------- '
119   #print res
120   #print ' -------- '
121   return(res)
122
123
124
125 def insertCrack(data, names, tmpdir='./zcracks_temp', verbose=0):
126
127   saneN=names['saneGeoName']
128   crackN=names['crackGeoName']
129   crackedN=names['crackedGeoName']
130
131   minS=data['minSize'][0]
132   maxS=data['maxSize'][0]
133   extrL=data['extractLength'][0]
134
135   grad = data['gradation'][0] if 'gradation' in list(data.keys()) else 1.3
136   quad = data['quad'] if 'quad' in list(data.keys()) else False
137   cas2D = data['is2D'] if 'is2D' in list(data.keys()) else False
138   refine = data['refine'] if 'refine' in list(data.keys()) else False
139   nbLay = data['layers'][0] if 'layers' in list(data.keys()) else 5
140   nbIter = data['iterations'][0] if 'iterations' in list(data.keys()) else 2
141
142   Gvol = data['grVol'] if 'grVol' in list(data.keys()) else ''
143   Gfac = data['grFace'] if 'grFace' in list(data.keys()) else ''
144   Gedg = data['grEdge'] if 'grEdge' in list(data.keys()) else ''
145   Gnod = data['grNodes'] if 'grNodes' in list(data.keys()) else ''
146   surfOpt = data['surfopt'] if 'surfopt' in list(data.keys()) else ''
147
148
149   if not os.path.isdir(tmpdir): os.mkdir(tmpdir)
150   curDir=os.getcwd()
151   os.chdir(tmpdir)
152   res=launchZcrack(minS, maxS, saneN, crackN, crackedN,grad, quad, extrL,
153                 nbLay, nbIter,Gvol, Gfac, Gedg, Gnod,surfOpt, tmpdir, cas2D, refine, verbose)
154   os.chdir(curDir)
155   return(res)
156
157
158 #def TUI(data, names, tmpdir='./zcracks_temp', verbose=0)