1 # Copyright (C) 2016-2022 EDF R&D
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.
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.
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
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 import os, tempfile, shutil
21 from . import utilityFunctions as uF
22 from .output import message
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)
34 zfile.write('****return\n')
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)
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)
55 zfile.write(' **export med %s\n' %medName)
56 zfile.write('****return\n')
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)
67 def launchZcrack(minS, maxS,
68 saneN, crackN, crackedN,
71 Gvol, Gfac, Gedg, Gnod,
72 surfOpt, tmpdir, cas2D, refine, verbose=0, ):
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')
80 zfile.write(' if_2D=1;\n')
81 zfile.write(' thickness.resize(1);\n')
82 zfile.write(' thickness[0]=-1.;\n')
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',''))
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))
100 zfile.write(' yams_options="%s";\n' %surfOpt)
102 if refine: zfile.write(' if_must_refine=1;\n')
105 zfile.write(' if_must_define_elset=0;\n')
107 zfile.write(' if_must_define_elset=1;\n')
109 zfile.write(' elset_radius=%e;\n' %maxS)
111 zfile.write(' elset_radius=%e;\n' %extrL)
113 zfile.write(' nice_cut(20.0);\n}\n\n')
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)
125 def insertCrack(data, names, tmpdir='./zcracks_temp', verbose=0):
127 saneN=names['saneGeoName']
128 crackN=names['crackGeoName']
129 crackedN=names['crackedGeoName']
131 minS=data['minSize'][0]
132 maxS=data['maxSize'][0]
133 extrL=data['extractLength'][0]
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
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 ''
149 if not os.path.isdir(tmpdir): os.mkdir(tmpdir)
152 res=launchZcrack(minS, maxS, saneN, crackN, crackedN,grad, quad, extrL,
153 nbLay, nbIter,Gvol, Gfac, Gedg, Gnod,surfOpt, tmpdir, cas2D, refine, verbose)
158 #def TUI(data, names, tmpdir='./zcracks_temp', verbose=0)