1 """
2 Application-class that implements pyFoamChangeGGIBoundary.py
3
4 Modification of GGI and cyclicGGI interface parameters in
5 constant/polymesh/boundary file.
6
7 Author:
8 Martin Beaudoin, Hydro-Quebec, 2009. All rights reserved
9
10 """
11
12 from PyFoam.Applications.PyFoamApplication import PyFoamApplication
13 from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile
14 from PyFoam.ThirdParty.six import print_
15 from os import path
16 import sys
17 import re
18
31
33 self.parser.add_option("--shadowPatch",
34 action="store",
35 dest="shadowPatch",
36 default=None,
37 help='Name of the shadowPatch')
38 self.parser.add_option("--shadowName",
39 action="store",
40 dest="shadowName",
41 default=None,
42 help='Name of the shadowPatch. Deprecated. Use --shadowPatch instead')
43 self.parser.add_option("--zone",
44 action="store",
45 dest="zone",
46 default=None,
47 help='Name of the zone for the GGI patch')
48 self.parser.add_option("--patchZoneName",
49 action="store",
50 dest="patchZoneName",
51 default=None,
52 help='Name of the zone for the GGI patch. Deprecated. Use --zone instead')
53 self.parser.add_option("--bridgeOverlap",
54 action="store",
55 dest="bridgeOverlap",
56 default=None,
57 help='bridgeOverlap flag (on/off)')
58 self.parser.add_option("--bridgeOverlapFlag",
59 action="store",
60 dest="bridgeOverlapFlag",
61 default=None,
62 help='bridgeOverlap flag (on/off). Deprecated. Use --bridgeOverlap instead')
63 self.parser.add_option("--rotationAxis",
64 action="store",
65 dest="rotationAxis",
66 default=None,
67 help='rotation axis for cyclicGgi')
68 self.parser.add_option("--rotationAngle",
69 action="store",
70 dest="rotationAngle",
71 default=None,
72 help='rotation axis angle for cyclicGgi')
73 self.parser.add_option("--separationOffset",
74 action="store",
75 dest="separationOffset",
76 default=None,
77 help='separation offset for cyclicGgi')
78
79 self.parser.add_option("--test",
80 action="store_true",
81 default=False,
82 dest="test",
83 help="Only print the new boundary file")
84
86 fName=self.parser.getArgs()[0]
87 bName=self.parser.getArgs()[1]
88
89 boundary=ParsedParameterFile(path.join(".",fName,"constant","polyMesh","boundary"),debug=False,boundaryDict=True)
90
91 bnd=boundary.content
92
93 if type(bnd)!=list:
94 self.error("Problem with boundary file (not a list)")
95
96 found=False
97
98 for val in bnd:
99 if val==bName:
100 found=True
101 elif found:
102 bcType=val["type"]
103 if re.match("cyclicGgi", bcType)!= None or re.match("ggi", bcType)!= None:
104 if self.parser.getOptions().shadowPatch!=None:
105 shadowPatch=self.parser.getOptions().shadowPatch
106 val["shadowPatch"]=shadowPatch
107 if shadowPatch not in bnd:
108 self.error("\n Option --shadowPatch for patch:",bName,": there is no patch called",shadowPatch,"\n")
109
110 if self.parser.getOptions().zone!=None:
111 val["zone"]=self.parser.getOptions().zone
112
113 if self.parser.getOptions().bridgeOverlap!=None:
114 val["bridgeOverlap"]=self.parser.getOptions().bridgeOverlap
115
116 if val["type"]=="cyclicGgi":
117 if self.parser.getOptions().rotationAxis!=None:
118 val["rotationAxis"]=self.parser.getOptions().rotationAxis
119
120 if self.parser.getOptions().rotationAngle!=None:
121 val["rotationAngle"]=self.parser.getOptions().rotationAngle
122
123 if self.parser.getOptions().separationOffset!=None:
124 val["separationOffset"]=self.parser.getOptions().separationOffset
125
126
127
128 if self.parser.getOptions().shadowName!=None:
129 self.warning("\n PatchName:",bName,": Option --shadowName is deprecated. Use --shadowPatch instead\n")
130 shadowName=self.parser.getOptions().shadowName
131 val["shadowPatch"]=shadowName
132 if shadowName not in bnd:
133 self.error("\n Option --shadowName for patch:",bName,": there is no patch called",shadowName,"\n")
134
135
136 if self.parser.getOptions().patchZoneName!=None:
137 self.warning("\n PatchName:",bName,": Option --patchZoneName is deprecated. Use --zone instead\n")
138 val["zone"]=self.parser.getOptions().patchZoneName
139
140
141 if self.parser.getOptions().bridgeOverlapFlag!=None:
142 self.warning("\n PatchName:",bName,": Option --bridgeOverlapFlag is deprecated. Use --bridgeOverlap instead\n")
143 val["bridgeOverlap"]=self.parser.getOptions().bridgeOverlapFlag
144
145
146 else:
147 print_("Unsupported GGI type '",bcType,"' for patch",bName)
148 break
149
150 if not found:
151 self.error("Boundary",bName,"not found in",bnd[::2])
152
153 if self.parser.getOptions().test:
154 print_(boundary)
155 else:
156 boundary.writeFile()
157