Skip to content

Commit c329f6b

Browse files
committed
add option to force mixing sign
1 parent 508424a commit c329f6b

2 files changed

Lines changed: 144 additions & 1 deletion

File tree

applications/write_dynMix_fvModels.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@
3333
help="fvModels folder output",
3434
default=".",
3535
)
36+
parser.add_argument(
37+
"-fs",
38+
"--force_sign",
39+
action="store_true",
40+
help="Force mixing source sign",
41+
)
3642
args = parser.parse_args()
3743
dynMix_dict = parseJsonFile(args.input)
38-
write_fvModel(dynMix_dict, output_folder=args.output_folder)
44+
write_fvModel(
45+
dynMix_dict,
46+
output_folder=args.output_folder,
47+
force_sign=args.force_sign,
48+
)

bird/preprocess/dynamic_mixer/io_fvModels.py

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,139 @@ def write_mixer(mixer, output_folder):
184184
f.write("\t\t}\n")
185185

186186

187+
def write_mixer_force_sign(mixer, output_folder):
188+
with open(os.path.join(output_folder, "fvModels"), "a+") as f:
189+
f.write(f"\t\tsource_pt_x={mixer.x};\n")
190+
f.write(f"\t\tsource_pt_y={mixer.y};\n")
191+
f.write(f"\t\tsource_pt_z={mixer.z};\n")
192+
f.write(f"\t\tdisk_rad={mixer.rad};\n")
193+
f.write("\t\tdisk_area=pi*disk_rad*disk_rad;\n")
194+
f.write(f"\t\tpower={mixer.power};\n")
195+
f.write(f"\t\tsmear_factor={float(mixer.smear)};\n")
196+
f.write(f"\t\tstartTime = {mixer.start_time};\n")
197+
f.write("\t\tif (time.value() > startTime)\n")
198+
f.write("\t\t{\n")
199+
f.write("\t\t\t// Get V1\n")
200+
f.write("\t\t\tdouble source_sign_factor = 1.0;\n")
201+
f.write("\t\t\tdouble V1 = 0;\n")
202+
f.write("\t\t\tdouble V2 = 0;\n")
203+
f.write("\t\t\tdouble rhoV;\n")
204+
f.write("\t\t\tdouble dist_tol = disk_rad*3;\n")
205+
f.write("\n")
206+
f.write("\t\t\tdouble dist_n;\n")
207+
f.write("\t\t\tdouble upV = 0;\n")
208+
f.write("\t\t\tdouble uprhoV = 0;\n")
209+
f.write("\t\t\tdouble upVvol = 0;\n")
210+
f.write("\t\t\tdouble downV = 0;\n")
211+
f.write("\t\t\tdouble downrhoV = 0;\n")
212+
f.write("\t\t\tdouble downVvol = 0;\n")
213+
f.write("\t\t\tdouble dist2;\n")
214+
215+
f.write("\t\t\tforAll(C,i)\n")
216+
f.write("\t\t\t{\n")
217+
f.write(
218+
"\t\t\t\tdist2 = (C[i].x()-source_pt_x)*(C[i].x()-source_pt_x);\n"
219+
)
220+
f.write(
221+
"\t\t\t\tdist2 += (C[i].y()-source_pt_y)*(C[i].y()-source_pt_y);\n"
222+
)
223+
f.write(
224+
"\t\t\t\tdist2 += (C[i].z()-source_pt_z)*(C[i].z()-source_pt_z);\n"
225+
)
226+
f.write("\n")
227+
if mixer.normal_dir == 0:
228+
f.write("\t\t\t\tdist_n = (C[i].x()-source_pt_x);\n")
229+
elif mixer.normal_dir == 1:
230+
f.write("\t\t\t\tdist_n = (C[i].y()-source_pt_y);\n")
231+
elif mixer.normal_dir == 2:
232+
f.write("\t\t\t\tdist_n = (C[i].z()-source_pt_z);\n")
233+
f.write("\n")
234+
235+
f.write(
236+
"\t\t\t\tif (dist2 < dist_tol*dist_tol && dist_n < -dist_tol/2) {\n"
237+
)
238+
f.write("\t\t\t\t\tupVvol += V[i] * alphaL[i];\n")
239+
f.write(
240+
f"\t\t\t\t\tupV += V[i] * alphaL[i] * UL[i][{int(mixer.normal_dir)}];\n"
241+
)
242+
f.write("\t\t\t\t\tuprhoV += V[i] * alphaL[i] * rhoL[i];\n")
243+
f.write("\t\t\t\t}\n")
244+
f.write(
245+
"\t\t\t\tif (dist2 < dist_tol*dist_tol && dist_n > dist_tol/2) {\n"
246+
)
247+
f.write("\t\t\t\t\tdownVvol += V[i] * alphaL[i];\n")
248+
f.write(
249+
f"\t\t\t\t\tdownV += V[i] * alphaL[i] * UL[i][{int(mixer.normal_dir)}];\n"
250+
)
251+
f.write("\t\t\t\t\tdownrhoV += V[i] * alphaL[i] * rhoL[i];\n")
252+
f.write("\t\t\t\t}\n")
253+
f.write("\t\t\t}\n")
254+
f.write("\n")
255+
f.write("\t\t\treduce(uprhoV, sumOp<scalar>());\n")
256+
f.write("\t\t\treduce(downrhoV, sumOp<scalar>());\n")
257+
f.write("\t\t\treduce(upV, sumOp<scalar>());\n")
258+
f.write("\t\t\treduce(downV, sumOp<scalar>());\n")
259+
f.write("\t\t\treduce(downVvol, sumOp<scalar>());\n")
260+
f.write("\t\t\treduce(upVvol, sumOp<scalar>());\n")
261+
f.write("\n")
262+
f.write("\t\t\tdownV /= downVvol;\n")
263+
f.write("\t\t\tupV /= upVvol;\n")
264+
f.write("\t\t\tdownrhoV /= downVvol;\n")
265+
f.write("\t\t\tuprhoV /= upVvol;\n")
266+
f.write("\n")
267+
if mixer.sign == "+":
268+
f.write("\t\t\tsource_sign_factor = -1.0;\n")
269+
f.write("\t\t\tif (upV >= 0){\n")
270+
f.write("\t\t\t\tV1 = 0.0;\n")
271+
f.write("\t\t\t} else {\n")
272+
f.write("\t\t\t\tV1 = std::abs(upV);\n")
273+
f.write("\t\t\t}\n")
274+
f.write("\t\t\trhoV = uprhoV;\n")
275+
elif mixer.sign == "-":
276+
f.write("\t\t\tsource_sign_factor = 1.0;\n")
277+
f.write("\t\t\tif (downV <= 0){\n")
278+
f.write("\t\t\t\tV1 = 0.0;\n")
279+
f.write("\t\t\t} else {\n")
280+
f.write("\t\t\t\tV1 = std::abs(downV);\n")
281+
f.write("\t\t\t}\n")
282+
f.write("\t\t\trhoV = downrhoV;\n")
283+
# f.write("\t\t\t}\n")
284+
f.write(
285+
'\t\t\tFoam::Info << "[BIRD:DYNMIX INFO] V1 = " << V1 << endl;\n'
286+
)
287+
f.write("\t\t\t\n")
288+
f.write("\t\t\t// Get V2\n")
289+
f.write("\t\t\tV2 = findV2(power, rhoV, disk_area, V1);\n")
290+
f.write("\n")
291+
f.write("\t\t\tforAll(C,i)\n")
292+
f.write("\t\t\t{\n")
293+
f.write(
294+
"\t\t\t\tdouble Thrust=0.5*rhoL[i]*(V2*V2 - V1*V1)*disk_area;\n"
295+
)
296+
f.write(
297+
"\t\t\t\tdouble dist2=(C[i].x()-source_pt_x)*(C[i].x()-source_pt_x);\n"
298+
)
299+
f.write(
300+
"\t\t\t\tdist2 += (C[i].y()-source_pt_y)*(C[i].y()-source_pt_y);\n"
301+
)
302+
f.write(
303+
"\t\t\t\tdist2 += (C[i].z()-source_pt_z)*(C[i].z()-source_pt_z);\n"
304+
)
305+
306+
f.write("\t\t\t\tdouble epsilon=pow(V[i],0.33333)*smear_factor;\n")
307+
f.write(
308+
"\t\t\t\tdouble sourceterm=alphaL[i]*(Thrust/pow(pi,1.5)/pow(epsilon,3.0))*\n"
309+
)
310+
f.write("\t\t\t\t\texp(-dist2/(epsilon*epsilon));\n")
311+
312+
f.write(
313+
f"\t\t\t\tUsource[i][{int(mixer.normal_dir)}] -= source_sign_factor*sourceterm*V[i];\n"
314+
)
315+
316+
f.write("\t\t\t}\n")
317+
f.write("\t\t}\n")
318+
319+
187320
def write_end(output_folder):
188321
with open(os.path.join(output_folder, "fvModels"), "a+") as f:
189322
f.write("\t#};\n")

0 commit comments

Comments
 (0)