From 9a0ac605d837eb382734f9404f879eb0555cef1b Mon Sep 17 00:00:00 2001 From: hechao <490956681@qq.com> Date: Mon, 19 Jun 2023 10:10:42 +0800 Subject: [PATCH] =?UTF-8?q?X=E7=B3=BB=E5=88=97=EF=BC=8CZ=E7=B3=BB=E5=88=97?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8F=8A=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=9B=E6=9B=BF=E6=8D=A2=E5=92=8C=E6=96=B0=E5=A2=9E=E5=85=B1?= =?UTF-8?q?13=E4=B8=AA=E4=B8=8D=E5=8F=AF=E5=8E=8B=E7=AE=97=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bin/boundary_condition_ref.hypara | 52 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + .../bin/key.hypara | 55 + .../bin/partition.hypara | 24 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 51 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + .../bin/key.hypara | 53 + .../bin/partition.hypara | 21 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 76 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 36 + .../bin/key.hypara | 55 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 48 + .../bin/cfd_para.hypara | 1452 ++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + H04_TwoD_NACA0012_PISO_SA_4CPU/bin/key.hypara | 53 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 48 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/key.hypara | 55 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 65 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + .../bin/key.hypara | 52 + .../bin/partition.hypara | 23 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 68 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + H07_TwoD_Plate_Turb_QUICK_4CPU/bin/key.hypara | 55 + .../bin/partition.hypara | 23 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 86 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + .../bin/key.hypara | 55 + .../bin/partition.hypara | 21 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 71 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 36 + H09_ThreeD_Car_Turb_QUICK_4CPU/bin/key.hypara | 53 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 62 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 35 + .../bin/key.hypara | 53 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 76 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 36 + .../bin/key.hypara | 53 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 88 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 36 + .../bin/key.hypara | 53 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/boundary_condition_ref.hypara | 71 + .../bin/cfd_para.hypara | 1467 +++++++++++++++++ .../bin/cfd_para_incompressible.hypara | 211 +++ .../bin/grid_para.hypara | 36 + H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/key.hypara | 53 + .../bin/partition.hypara | 22 + .../grid/网格地址.txt | 5 + .../bin/cfd_para.hypara | 1055 ++++++------ .../bin/grid_para.hypara | 13 +- .../bin/key.hypara | 6 - .../bin/cfd_para.hypara | 1055 ++++++------ .../bin/grid_para.hypara | 13 +- .../二维结构30P30N点监控算例测试说明.pdf | Bin 675708 -> 784092 bytes .../bin/cfd_para.hypara | 1055 ++++++------ .../bin/grid_para.hypara | 13 +- ...维非结构圆柱低速绕流线监控算例测试说明.pdf | Bin 601039 -> 710974 bytes 100 files changed, 25888 insertions(+), 1494 deletions(-) create mode 100644 H01_TwoD_BackStep_KE_QUICK_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para.hypara create mode 100644 H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H01_TwoD_BackStep_KE_QUICK_4CPU/bin/grid_para.hypara create mode 100644 H01_TwoD_BackStep_KE_QUICK_4CPU/bin/key.hypara create mode 100644 H01_TwoD_BackStep_KE_QUICK_4CPU/bin/partition.hypara create mode 100644 H01_TwoD_BackStep_KE_QUICK_4CPU/grid/网格地址.txt create mode 100644 H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para.hypara create mode 100644 H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/grid_para.hypara create mode 100644 H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/key.hypara create mode 100644 H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/partition.hypara create mode 100644 H02_TwoD_Cavitity_Re100_SUDS_4CPU/grid/网格地址.txt create mode 100644 H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para.hypara create mode 100644 H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/grid_para.hypara create mode 100644 H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/key.hypara create mode 100644 H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/partition.hypara create mode 100644 H03_TwoD_GasLeakage_Steady_QUICK_4CPU/grid/网格地址.txt create mode 100644 H04_TwoD_NACA0012_PISO_SA_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para.hypara create mode 100644 H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H04_TwoD_NACA0012_PISO_SA_4CPU/bin/grid_para.hypara create mode 100644 H04_TwoD_NACA0012_PISO_SA_4CPU/bin/key.hypara create mode 100644 H04_TwoD_NACA0012_PISO_SA_4CPU/bin/partition.hypara create mode 100644 H04_TwoD_NACA0012_PISO_SA_4CPU/grid/网格地址.txt create mode 100644 H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para.hypara create mode 100644 H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/grid_para.hypara create mode 100644 H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/key.hypara create mode 100644 H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/partition.hypara create mode 100644 H05_TwoD_NACA0012_SIMPLEC_4CPU/grid/网格地址.txt create mode 100644 H06_TwoD_NaturalConvection_CDS_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para.hypara create mode 100644 H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H06_TwoD_NaturalConvection_CDS_4CPU/bin/grid_para.hypara create mode 100644 H06_TwoD_NaturalConvection_CDS_4CPU/bin/key.hypara create mode 100644 H06_TwoD_NaturalConvection_CDS_4CPU/bin/partition.hypara create mode 100644 H06_TwoD_NaturalConvection_CDS_4CPU/grid/网格地址.txt create mode 100644 H07_TwoD_Plate_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para.hypara create mode 100644 H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H07_TwoD_Plate_Turb_QUICK_4CPU/bin/grid_para.hypara create mode 100644 H07_TwoD_Plate_Turb_QUICK_4CPU/bin/key.hypara create mode 100644 H07_TwoD_Plate_Turb_QUICK_4CPU/bin/partition.hypara create mode 100644 H07_TwoD_Plate_Turb_QUICK_4CPU/grid/网格地址.txt create mode 100644 H08_TwoD_Species_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para.hypara create mode 100644 H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H08_TwoD_Species_Turb_QUICK_4CPU/bin/grid_para.hypara create mode 100644 H08_TwoD_Species_Turb_QUICK_4CPU/bin/key.hypara create mode 100644 H08_TwoD_Species_Turb_QUICK_4CPU/bin/partition.hypara create mode 100644 H08_TwoD_Species_Turb_QUICK_4CPU/grid/网格地址.txt create mode 100644 H09_ThreeD_Car_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para.hypara create mode 100644 H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H09_ThreeD_Car_Turb_QUICK_4CPU/bin/grid_para.hypara create mode 100644 H09_ThreeD_Car_Turb_QUICK_4CPU/bin/key.hypara create mode 100644 H09_ThreeD_Car_Turb_QUICK_4CPU/bin/partition.hypara create mode 100644 H09_ThreeD_Car_Turb_QUICK_4CPU/grid/网格地址.txt create mode 100644 H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para.hypara create mode 100644 H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/grid_para.hypara create mode 100644 H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/key.hypara create mode 100644 H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/partition.hypara create mode 100644 H10_ThreeD_Chnt_Lam_UPWIND_4CPU/grid/网格地址.txt create mode 100644 H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para.hypara create mode 100644 H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/grid_para.hypara create mode 100644 H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/key.hypara create mode 100644 H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/partition.hypara create mode 100644 H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/grid/网格地址.txt create mode 100644 H12_ThreeD_Species_Transient_QUICK_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para.hypara create mode 100644 H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H12_ThreeD_Species_Transient_QUICK_4CPU/bin/grid_para.hypara create mode 100644 H12_ThreeD_Species_Transient_QUICK_4CPU/bin/key.hypara create mode 100644 H12_ThreeD_Species_Transient_QUICK_4CPU/bin/partition.hypara create mode 100644 H12_ThreeD_Species_Transient_QUICK_4CPU/grid/网格地址.txt create mode 100644 H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/boundary_condition_ref.hypara create mode 100644 H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para.hypara create mode 100644 H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para_incompressible.hypara create mode 100644 H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/grid_para.hypara create mode 100644 H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/key.hypara create mode 100644 H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/partition.hypara create mode 100644 H13_ThreeD_SUBOFF_UPWIND_4CPU/grid/网格地址.txt diff --git a/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/boundary_condition_ref.hypara b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..a64b84c --- /dev/null +++ b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,52 @@ +# nBoundaryConditons : number of global boundary conditions. +# bcName : Boundary Condition Name. +# bcType(in PHengLEI): Boundary Condition Type. + +# Account of how to set boundaryconditon. +# string bcName = "Farfield"; +# { +# int bcType = 4; +# int inflowParaType = 1; +# double attackd = 0; +# double refReNumber = 6.5e6; +# double refMachNumber = 3.5; +# double angleSlide = 0; +# } + +int nBoundaryConditions = 3; +string bcName = "wall_1"; +{ + int bcType = 2; +} + +string bcName = "inlet_1"; +{ + int bcType = 52; + double totalPressure = 200; + double initKinetic = 1.5; + double initEpsilon = 2025; +} + +string bcName = "outlet_1"; +{ + int bcType = 6; + double initP =0; + double initKinetic = 1.5; + double initEpsilon = 2025; +} + +# 'bcType' is defined as following: +# 99: PERIODIC +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para.hypara b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para_incompressible.hypara b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..250c8ee --- /dev/null +++ b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 2000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/back__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "SIMPLE"; + +// Initial value of flow variables +double initRho = 1.0; +double initU = 20; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 0.00001; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 1.5; +double initEpsilon = 2025; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 0; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 300; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 7; +int visualVariables[] = [22, 23, 24, 25, 29, 31, 32]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/grid_para.hypara b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..3be02df --- /dev/null +++ b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/back.cas"; +string out_gfile = "./grid/back.fts"; diff --git a/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/key.hypara b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/key.hypara new file mode 100644 index 0000000..fdf7cad --- /dev/null +++ b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/key.hypara @@ -0,0 +1,55 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; \ No newline at end of file diff --git a/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/partition.hypara b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/partition.hypara new file mode 100644 index 0000000..e521e4a --- /dev/null +++ b/H01_TwoD_BackStep_KE_QUICK_4CPU/bin/partition.hypara @@ -0,0 +1,24 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +// numberOfMultifile: The number of partition grid files that want to be dumped out. + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/back.fts"; +string partition_grid_file = "./grid/back__4.fts"; + +int numberOfMultifile = 1; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; diff --git a/H01_TwoD_BackStep_KE_QUICK_4CPU/grid/网格地址.txt b/H01_TwoD_BackStep_KE_QUICK_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H01_TwoD_BackStep_KE_QUICK_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/boundary_condition_ref.hypara b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..edcc301 --- /dev/null +++ b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,51 @@ +# nBoundaryConditons : number of global boundary conditions. +# bcName : Boundary Condition Name. +# bcType(in PHengLEI): Boundary Condition Type. + +# Account of how to set boundaryconditon. +# string bcName = "Farfield"; +# { +# int bcType = 4; +# int inflowParaType = 1; +# double attackd = 0; +# double refReNumber = 6.5e6; +# double refMachNumber = 3.5; +# double angleSlide = 0; +# } + +int nBoundaryConditions = 4; +string bcName = "bottom"; +{ + int bcType = 2; +} +string bcName = "left"; +{ + int bcType = 2; + double initT=300; +} +string bcName = "right"; +{ + int bcType = 2; + double initT=500; +} +string bcName = "top"; +{ + int bcType = 2; + double initU=1.0; +} + +# 'bcType' is defined as following: +# 99: PERIODIC +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para.hypara b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para_incompressible.hypara b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..5b5f992 --- /dev/null +++ b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 2000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/cavity__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "SIMPLE"; + +// Initial value of flow variables +double initRho = 1; +double initU = 0; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu =0.01; +double initRg =287.0425; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 0; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.64; +double initEpsilon = 5771; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 1; + +// Initial value of Energy variables +double initT = 400; +double initCPg = 1006; +double initK = 0.0242; +double initkappa = 1.4; +double refT = 300; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 6; +int visualVariables[] = [22, 23, 24, 25, 27, 70]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/grid_para.hypara b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..f55d3c0 --- /dev/null +++ b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/cavity.cas"; +string out_gfile = "./grid/cavity.fts"; diff --git a/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/key.hypara b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/key.hypara new file mode 100644 index 0000000..2ce4108 --- /dev/null +++ b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/key.hypara @@ -0,0 +1,53 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +// 4 -- Knowledge repository / examples of PHengLEI-API. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 4; +//string parafilename = "./bin/repository.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/partition.hypara b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/partition.hypara new file mode 100644 index 0000000..db4d91a --- /dev/null +++ b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/bin/partition.hypara @@ -0,0 +1,21 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/cavity.fts"; +string partition_grid_file = "./grid/cavity__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; diff --git a/H02_TwoD_Cavitity_Re100_SUDS_4CPU/grid/网格地址.txt b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H02_TwoD_Cavitity_Re100_SUDS_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/boundary_condition_ref.hypara b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..b7f5b59 --- /dev/null +++ b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,76 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 4; +string bcName = "wall"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 294; +} +string bcName = "farinlet"; +{ + int bcType = 5; + double initU= 1.0; + double initT = 294; + double initMassFractionIncom[] = [1.0, 0.0, 0.0]; + double initKinetic = 18.375; + double initEpsilon = 322881.7; +} +string bcName = "ycinlet"; +{ + int bcType = 52; + double totalPressure = 1000; + double initT = 294; + double initMassFractionIncom[] = [0.0, 0.9, 0.1]; + double initKinetic = 0.3243375; + double initEpsilon = 66; +} +string bcName = "outlet"; +{ + int bcType = 6; + double initP = 0; + double initT = 294; + double initMassFractionIncom[] = [1.0, 0.0, 0.0]; + double initKinetic = 0.3243375; + double initEpsilon = 66; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para.hypara b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para_incompressible.hypara b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..07367f4 --- /dev/null +++ b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 2000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/yanchongCase14__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "CompressibleSIMPLE"; + +// Initial value of flow variables +double initRho = 1.225; +double initU = 0; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.7894e-05; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.64; +double initEpsilon = 5771; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 1; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1006.43; +double initK = 0.0242; +double initkappa = 1.4; +double refT = 300; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 1; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 3; +string speciesNameIncom[] = [AIR, CH4, H2S]; +double initMassFractionIncom[] = [1.0, 0.0, 0.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 2; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 13; +int visualVariables[] = [22, 23, 24, 25, 27, 28, 29, 31, 32, 70, 71, 72, 73]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/grid_para.hypara b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..eb8b953 --- /dev/null +++ b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/grid_para.hypara @@ -0,0 +1,36 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfMultifile = 1; +string from_gfile = "./grid/yanchongCase14.cas"; +string out_gfile = "./grid/yanchongCase14.fts"; diff --git a/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/key.hypara b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/key.hypara new file mode 100644 index 0000000..fdf7cad --- /dev/null +++ b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/key.hypara @@ -0,0 +1,55 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; \ No newline at end of file diff --git a/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/partition.hypara b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/partition.hypara new file mode 100644 index 0000000..5f56d22 --- /dev/null +++ b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/yanchongCase14.fts"; +string partition_grid_file = "./grid/yanchongCase14__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/grid/网格地址.txt b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H03_TwoD_GasLeakage_Steady_QUICK_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/boundary_condition_ref.hypara b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..218dfdd --- /dev/null +++ b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,48 @@ +# nBoundaryConditons : number of global boundary conditions. +# bcName : Boundary Condition Name. +# bcType(in PHengLEI): Boundary Condition Type. + +# Account of how to set boundaryconditon. +# string bcName = "Farfield"; +# { +# int bcType = 4; +# int inflowParaType = 1; +# double attackd = 0; +# double refReNumber = 6.5e6; +# double refMachNumber = 3.5; +# double angleSlide = 0; +# } + +int nBoundaryConditions = 3; +string bcName = "airfoil_lower"; +{ + int bcType = 2; +} +string bcName = "airfoil_upper"; +{ + int bcType = 2; +} + +string bcName = "farfield"; +{ + int bcType = 5; + double initU = 1; + double initV = 0; + double initKinetic =0.0001460735; +} + +# 'bcType' is defined as following: +# 99: PERIODIC +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para.hypara b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..131a497 --- /dev/null +++ b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1452 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 10; +int max_sub_iter = 10; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; + +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 7; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// isAdaptiveSolver > 0 indicates the HyFlow self-adaptive solver. +// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. +// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two speciesSpeciesA, SpeciesB. +// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// useHyflowSetting: Setting for HyFLOW GUI. +// 0 -- PHengLEI. +// 1 -- HyFLOW. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int useHyflowSetting = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; + +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para_incompressible.hypara b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..2a4ab7c --- /dev/null +++ b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 2000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/NACA0012__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "PISO"; + +// Initial value of flow variables +double initRho = 1.225; +double initU = 1; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.7894e-05; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.7; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "SA"; + +// Initial value of Turbulence variables +double initKinetic = 0.0001460735; +double initEpsilon = 2025; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 0; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 6; +int visualVariables[] = [22, 23, 24, 25, 29, 31]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/grid_para.hypara b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..b71758e --- /dev/null +++ b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/NACA0012.cas"; +string out_gfile = "./grid/NACA0012.fts"; diff --git a/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/key.hypara b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/key.hypara new file mode 100644 index 0000000..2ce4108 --- /dev/null +++ b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/key.hypara @@ -0,0 +1,53 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +// 4 -- Knowledge repository / examples of PHengLEI-API. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 4; +//string parafilename = "./bin/repository.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/partition.hypara b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/partition.hypara new file mode 100644 index 0000000..f9f45a1 --- /dev/null +++ b/H04_TwoD_NACA0012_PISO_SA_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/NACA0012.fts"; +string partition_grid_file = "./grid/NACA0012_4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H04_TwoD_NACA0012_PISO_SA_4CPU/grid/网格地址.txt b/H04_TwoD_NACA0012_PISO_SA_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H04_TwoD_NACA0012_PISO_SA_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/boundary_condition_ref.hypara b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..a8d5907 --- /dev/null +++ b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,48 @@ +# nBoundaryConditons : number of global boundary conditions. +# bcName : Boundary Condition Name. +# bcType(in PHengLEI): Boundary Condition Type. + +# Account of how to set boundaryconditon. +# string bcName = "Farfield"; +# { +# int bcType = 4; +# int inflowParaType = 1; +# double attackd = 0; +# double refReNumber = 6.5e6; +# double refMachNumber = 3.5; +# double angleSlide = 0; +# } + +int nBoundaryConditions = 3; +string bcName = "airfoil_lower"; +{ + int bcType = 2; +} +string bcName = "airfoil_upper"; +{ + int bcType = 2; +} + +string bcName = "farfield"; +{ + int bcType = 5; + double initU = 100; + double initKinetic = 0.0001460735; + double initEpsilon = 2025; +} + +# 'bcType' is defined as following: +# 99: PERIODIC +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para.hypara b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para_incompressible.hypara b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..2a1eab3 --- /dev/null +++ b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 2000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/NACA0012__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "SIMPLE"; + +// Initial value of flow variables +double initRho = 1.0; +double initU = 100; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 0.00001; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.0001460735; +double initEpsilon = 2025; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 0; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 7; +int visualVariables[] = [22, 23, 24, 25, 29, 31,32]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/grid_para.hypara b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..b71758e --- /dev/null +++ b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/NACA0012.cas"; +string out_gfile = "./grid/NACA0012.fts"; diff --git a/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/key.hypara b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/key.hypara new file mode 100644 index 0000000..fdf7cad --- /dev/null +++ b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/key.hypara @@ -0,0 +1,55 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; \ No newline at end of file diff --git a/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/partition.hypara b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/partition.hypara new file mode 100644 index 0000000..f9f45a1 --- /dev/null +++ b/H05_TwoD_NACA0012_SIMPLEC_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/NACA0012.fts"; +string partition_grid_file = "./grid/NACA0012_4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H05_TwoD_NACA0012_SIMPLEC_4CPU/grid/网格地址.txt b/H05_TwoD_NACA0012_SIMPLEC_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H05_TwoD_NACA0012_SIMPLEC_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H06_TwoD_NaturalConvection_CDS_4CPU/bin/boundary_condition_ref.hypara b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..bf72a26 --- /dev/null +++ b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,65 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 4; +string bcName = "bottomwall"; +{ + string bodyName = "body"; + int bcType = 2; +} +string bcName = "coldwall"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 290.0; +} +string bcName = "hotwall"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 305.0; +} +string bcName = "topwall"; +{ + string bodyName = "body"; + int bcType = 2; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para.hypara b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para_incompressible.hypara b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..868047c --- /dev/null +++ b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 2000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/run__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "SIMPLE"; + +// Initial value of flow variables +double initRho = 1.1405; +double initU = 0; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.7894e-05; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 1; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 1; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 0; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.64; +double initEpsilon = 5771; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 1; + +// Initial value of Energy variables +double initT = 295; +double initCPg = 1006.43; +double initK = 0.0242; +double initkappa = 1.4; +double refT = 290; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "CDS" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 6; +int visualVariables[] = [22, 23, 24, 25, 27, 70]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H06_TwoD_NaturalConvection_CDS_4CPU/bin/grid_para.hypara b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..33ef8e1 --- /dev/null +++ b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/run.cas"; +string out_gfile = "./grid/run.fts"; diff --git a/H06_TwoD_NaturalConvection_CDS_4CPU/bin/key.hypara b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/key.hypara new file mode 100644 index 0000000..9c32184 --- /dev/null +++ b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/key.hypara @@ -0,0 +1,52 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +string parafilename = "./bin/cfd_para_incompressible.hypara" +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/H06_TwoD_NaturalConvection_CDS_4CPU/bin/partition.hypara b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/partition.hypara new file mode 100644 index 0000000..753e3df --- /dev/null +++ b/H06_TwoD_NaturalConvection_CDS_4CPU/bin/partition.hypara @@ -0,0 +1,23 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +int numberOfMultifile = 1; +int isWennScheme = 0; +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/run.fts"; +string partition_grid_file = "./grid/run__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H06_TwoD_NaturalConvection_CDS_4CPU/grid/网格地址.txt b/H06_TwoD_NaturalConvection_CDS_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H06_TwoD_NaturalConvection_CDS_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..b29c04b --- /dev/null +++ b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,68 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 4; +string bcName = "in"; +{ + string bodyName = "body"; + int bcType = 5; + double initU = 20; + double initKinetic = 0.135; + double initEpsilon = 1.64025; +} +string bcName = "out"; +{ + string bodyName = "body"; + int bcType = 6; + double initP =0; + double initKinetic = 0.135; + double initEpsilon = 1.64025; +} +string bcName = "wall"; +{ + string bodyName = "body"; + int bcType = 2; +} +string bcName = "symmetry"; +{ + int bcType = 3; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para.hypara b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..46441d2 --- /dev/null +++ b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 2000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/TurbPlate__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "CompressibleSIMPLE"; + +// Initial value of flow variables +double initRho = 1.0; +double initU = 0; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 0.00001; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.135; +double initEpsilon = 1.64025; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 0; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 7; +int visualVariables[] = [22, 23, 24, 25, 29, 31, 32]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/grid_para.hypara b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..10315bd --- /dev/null +++ b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/TurbPlate.cas"; +string out_gfile = "./grid/TurbPlate.fts"; diff --git a/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/key.hypara b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/key.hypara new file mode 100644 index 0000000..fdf7cad --- /dev/null +++ b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/key.hypara @@ -0,0 +1,55 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; \ No newline at end of file diff --git a/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/partition.hypara b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/partition.hypara new file mode 100644 index 0000000..ee52748 --- /dev/null +++ b/H07_TwoD_Plate_Turb_QUICK_4CPU/bin/partition.hypara @@ -0,0 +1,23 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +int numberOfMultifile = 1; +int isWennScheme = 0; +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/TurbPlate.fts"; +string partition_grid_file = "./grid/TurbPlate__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H07_TwoD_Plate_Turb_QUICK_4CPU/grid/网格地址.txt b/H07_TwoD_Plate_Turb_QUICK_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H07_TwoD_Plate_Turb_QUICK_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H08_TwoD_Species_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..8d57f2c --- /dev/null +++ b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,86 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 6; +string bcName = "in1"; +{ + int bcType = 5; + double initU= 53; + double initT = 300; + double initMassFractionIncom[] = [1.0, 0.0]; + double initKinetic = 18.375; + double initEpsilon = 322881.7; +} +string bcName = "in2"; +{ + int bcType = 5; + double initU= 9.3; + double initT = 294; + double initMassFractionIncom[] = [0.03, 0.97]; + double initKinetic = 0.3243375; + double initEpsilon = 66; +} +string bcName = "out"; +{ + int bcType = 6; + double initP = 0; + double initT = 294; + double initMassFractionIncom[] = [1.0, 0.0]; + double initKinetic = 0.3243375; + double initEpsilon = 66; +} +string bcName = "wall1"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 294; +} +string bcName = "wall2"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 294; +} +string bcName = "sym"; +{ + int bcType = 3; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para.hypara b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..9379fd8 --- /dev/null +++ b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 4000; +int intervalStepFlow = 2000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/airmixture__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "CompressibleSIMPLE"; + +// Initial value of flow variables +double initRho = 1.225; +double initU = 0; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.7894e-05; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.7; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.64; +double initEpsilon = 5771; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 1; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 1; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 2; +string speciesNameIncom[] = [C3H8, AIR]; +double initMassFractionIncom[] = [1.0, 0.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 2; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 12; +int visualVariables[] = [22, 23, 24, 25, 27, 28, 29, 31, 32, 70, 71, 72]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H08_TwoD_Species_Turb_QUICK_4CPU/bin/grid_para.hypara b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..3e24373 --- /dev/null +++ b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/airmixture.cas"; +string out_gfile = "./grid/airmixture.fts"; diff --git a/H08_TwoD_Species_Turb_QUICK_4CPU/bin/key.hypara b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/key.hypara new file mode 100644 index 0000000..fdf7cad --- /dev/null +++ b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/key.hypara @@ -0,0 +1,55 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +int ndim = 2; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_deform_para.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_refine_para.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; \ No newline at end of file diff --git a/H08_TwoD_Species_Turb_QUICK_4CPU/bin/partition.hypara b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/partition.hypara new file mode 100644 index 0000000..3e3b4be --- /dev/null +++ b/H08_TwoD_Species_Turb_QUICK_4CPU/bin/partition.hypara @@ -0,0 +1,21 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/airmixture.fts"; +string partition_grid_file = "./grid/airmixture__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; diff --git a/H08_TwoD_Species_Turb_QUICK_4CPU/grid/网格地址.txt b/H08_TwoD_Species_Turb_QUICK_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H08_TwoD_Species_Turb_QUICK_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..d310286 --- /dev/null +++ b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,71 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 5; +string bcName = "car_1"; +{ + string bodyName = "body"; + int bcType = 2; +} +string bcName = "wall_1"; +{ + string bodyName = "body"; + int bcType = 2; +} +string bcName = "sym_1"; +{ + int bcType = 3; +} +string bcName = "inlet_1"; +{ + int bcType = 5; + double initU =10; + double initKinetic = 0.375; + double initEpsilon =86.64304; +} +string bcName = "outlet_1"; +{ + int bcType = 6; + double flowP =0; + double initKinetic =0.375; + double initEpsilon =86.64304; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para.hypara b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..b830b81 --- /dev/null +++ b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 1000; +int intervalStepFlow = 1000; +int intervalStepPlot = 100; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/car__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "SIMPLE"; + +// Initial value of flow variables +double initRho = 1.225; +double initU = 10; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.7894e-05; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.375; +double initEpsilon = 86.643; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 0; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 7; +int visualVariables[] = [22, 23, 24, 25, 29, 31, 32]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/grid_para.hypara b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..e7ac6bb --- /dev/null +++ b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/grid_para.hypara @@ -0,0 +1,36 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfMultifile = 1; +string from_gfile = "./grid/car.cas"; +string out_gfile = "./grid/car.fts"; diff --git a/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/key.hypara b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/key.hypara new file mode 100644 index 0000000..2efb135 --- /dev/null +++ b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/key.hypara @@ -0,0 +1,53 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +// 4 -- Knowledge repository / examples of PHengLEI-API. +int ndim = 3; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 4; +//string parafilename = "./bin/repository.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/partition.hypara b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/partition.hypara new file mode 100644 index 0000000..1db1b52 --- /dev/null +++ b/H09_ThreeD_Car_Turb_QUICK_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/car.fts"; +string partition_grid_file = "./grid/car__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H09_ThreeD_Car_Turb_QUICK_4CPU/grid/网格地址.txt b/H09_ThreeD_Car_Turb_QUICK_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H09_ThreeD_Car_Turb_QUICK_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/boundary_condition_ref.hypara b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..24a3b48 --- /dev/null +++ b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,62 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 4; +string bcName = "wall"; +{ + string bodyName = "body"; + int bcType = 2; +} +string bcName = "symmetry"; +{ + int bcType = 3; +} +string bcName = "pressure_inlet"; +{ + int bcType = 5; + double initU = 10; +} +string bcName = "pressure_outlet"; +{ + int bcType = 6; + double initP = 0; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para.hypara b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para_incompressible.hypara b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..7600c56 --- /dev/null +++ b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 1000; +int intervalStepFlow = 1000; +int intervalStepPlot = 500; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/chnt_InOutBC_test1__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "SIMPLE"; + +// Initial value of flow variables +double initRho = 1.225; +double initU = 10; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.7894e-05; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.1; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 0; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.375; +double initEpsilon = 86.643; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 0; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 4; +int visualVariables[] = [22, 23, 24, 25]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/grid_para.hypara b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..67ed103 --- /dev/null +++ b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/grid_para.hypara @@ -0,0 +1,35 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +string from_gfile = "./grid/chnt_InOutBC_test1.cas"; +string out_gfile = "./grid/chnt_InOutBC_test1.fts"; diff --git a/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/key.hypara b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/key.hypara new file mode 100644 index 0000000..2efb135 --- /dev/null +++ b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/key.hypara @@ -0,0 +1,53 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +// 4 -- Knowledge repository / examples of PHengLEI-API. +int ndim = 3; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 4; +//string parafilename = "./bin/repository.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/partition.hypara b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/partition.hypara new file mode 100644 index 0000000..465aa66 --- /dev/null +++ b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/chnt_InOutBC_test1.fts"; +string partition_grid_file = "./grid/chnt_InOutBC_test1__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/grid/网格地址.txt b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H10_ThreeD_Chnt_Lam_UPWIND_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/boundary_condition_ref.hypara b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..e0a37fa --- /dev/null +++ b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,76 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 4; +string bcName = "wall"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 300; +} +string bcName = "inlet1"; +{ + int bcType = 5; + double totalVelocity = 1.0; + double initT = 300.0; + double initMassFractionIncom[] = [0.21, 0.008, 0.002, 0.78, 0.0]; + double initKinetic = 0.00375; + double initEpsilon = 8.61435e-6; +} +string bcName = "inlet2"; +{ + int bcType = 5; + double initV = 5; + double initT = 300.0; + double initMassFractionIncom[] = [0.0, 0.0, 0.0, 0.0, 1.0]; + double initKinetic = 0.09375; + double initEpsilon = 0.02411757; +} +string bcName = "outlet"; +{ + int bcType = 6; + double initP = 0; + double initT = 300.0; + double initMassFractionIncom[] = [0.21, 0.008, 0.002, 0.78, 0.0]; + double initKinetic = 0.09375; + double initEpsilon = 0.02411757; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para.hypara b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para_incompressible.hypara b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..0ddd023 --- /dev/null +++ b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 1000; +int intervalStepFlow = 1000; +int intervalStepPlot = 100; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/gasleak__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "CompressibleSIMPLE"; + +// Initial value of flow variables +double initRho = 1.225; +double initU = 0; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.7894e-05; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 0; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.64; +double initEpsilon = 5771; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 1; + +// Initial value of Energy variables +double initT = 273.0; +double initCPg = 1006.0; +double initK = 0.0242; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 1; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 5; +string speciesNameIncom[] = [C2H4, H2_l, LNG, H2S, NH3]; +double initMassFractionIncom[] = [0.164, 0.008, 0.624, 0.2, 0.004]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 1; +double startTime = 0.0; +double endTime = 200; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 1; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 2; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 13; +int visualVariables[] = [22, 23, 24, 25, 27, 28, 70, 71, 72, 73, 74, 75, 76]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/grid_para.hypara b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..9e40f91 --- /dev/null +++ b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/grid_para.hypara @@ -0,0 +1,36 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfMultifile = 1; +string from_gfile = "./grid/gasleak.cas"; +string out_gfile = "./grid/gasleak.fts"; diff --git a/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/key.hypara b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/key.hypara new file mode 100644 index 0000000..2efb135 --- /dev/null +++ b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/key.hypara @@ -0,0 +1,53 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +// 4 -- Knowledge repository / examples of PHengLEI-API. +int ndim = 3; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 4; +//string parafilename = "./bin/repository.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/partition.hypara b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/partition.hypara new file mode 100644 index 0000000..3b1bdef --- /dev/null +++ b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/gasleak.fts"; +string partition_grid_file = "./grid/gasleak__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/grid/网格地址.txt b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H11_ThreeD_GasLeakage_Unsteady_SUDS_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/boundary_condition_ref.hypara b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..76915cc --- /dev/null +++ b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,88 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 7; +string bcName = "wall_down";//壁面的边界条件 +{ + string bodyName = "body"; + int bcType = 2; + double initT = 500.0; +} +string bcName = "wall_fb";//边界类型为壁面 +{ + string bodyName = "body"; + int bcType = 2; + double initT = 500.0; +} +string bcName = "wall_in"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 500.0; +} +string bcName = "wall_up"; +{ + string bodyName = "body"; + int bcType = 2; + double initT = 500.0; +} +string bcName = "inlet_down"; +{ + int bcType = 5; + double initU = 0.05; + double initT = 300.0; + double initMassFractionIncom[] = [0.0, 0.0, 0.0, 0.97, 0.03, 0.0]; +} +string bcName = "inlet_up"; +{ + int bcType = 5; + double initU = 0.5; + double initT = 600.0; + double initMassFractionIncom[] = [0.21, 0.78, 0.009, 0.0, 0.0, 0.001]; +} +string bcName = "outlet"; +{ + int bcType = 6; + double initP = 0; + double initT = 300.0; + double initMassFractionIncom[] = [0.1, 0.1, 0.1, 0.1, 0.5, 0.1]; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para.hypara b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para_incompressible.hypara b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..47d12ac --- /dev/null +++ b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 1000; +int intervalStepFlow = 1000; +int intervalStepPlot = 100; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/methaneair__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "CompressibleSIMPLE"; + +// Initial value of flow variables +double initRho = 1.225; +double initU = 0; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu = 1.72e-5; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 0; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "KE"; + +// Initial value of Turbulence variables +double initKinetic = 0.64; +double initEpsilon = 5771; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 1; + +// Initial value of Energy variables +double initT = 273.0; +double initCPg = 1006.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 1; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 6; +string speciesNameIncom[] = [C2H4, H2_l, C3H8, NG, H2S, Cl2]; +double initMassFractionIncom[] = [0.21, 0.78, 0.009, 0.0, 0.001, 0.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 1; +double startTime = 0.0; +double endTime = 200; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 1; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 2; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 13; +int visualVariables[] = [22, 23, 24, 25, 27, 28, 70, 71, 72, 73, 74, 75, 76]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/grid_para.hypara b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..e71fdbf --- /dev/null +++ b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/grid_para.hypara @@ -0,0 +1,36 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfMultifile = 1; +string from_gfile = "./grid/methaneair.cas"; +string out_gfile = "./grid/methaneair.fts"; diff --git a/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/key.hypara b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/key.hypara new file mode 100644 index 0000000..7136bec --- /dev/null +++ b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/key.hypara @@ -0,0 +1,53 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +// 4 -- Knowledge repository / examples of PHengLEI-API. +int ndim = 3; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 4; +//string parafilename = "./bin/repository.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; \ No newline at end of file diff --git a/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/partition.hypara b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/partition.hypara new file mode 100644 index 0000000..87e2e13 --- /dev/null +++ b/H12_ThreeD_Species_Transient_QUICK_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/methaneair.fts"; +string partition_grid_file = "./grid/methaneair__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H12_ThreeD_Species_Transient_QUICK_4CPU/grid/网格地址.txt b/H12_ThreeD_Species_Transient_QUICK_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H12_ThreeD_Species_Transient_QUICK_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/boundary_condition_ref.hypara b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/boundary_condition_ref.hypara new file mode 100644 index 0000000..7c398fd --- /dev/null +++ b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/boundary_condition_ref.hypara @@ -0,0 +1,71 @@ +# nBoundaryConditions: Number of global boundary conditions. +# bcName : Boundary condition name. +# bcType(in PHengLEI): Boundary condition type. + +# How to set boundary condition, for example: +# string bcName = "Wall"; +# { +# int bcType = 2; +# int viscousType = 1; +# double wallTemperature = -1.0; +# double uWall = 0.0; +# double vWall = 0.0; +# double wWall = 0.0; +# } +# string bcName = "Inflow"; +# { +# int bcType = 5; +# int inflowParaType = 0; +# double refMachNumber = 0.73; +# double attackd = 2.79; +# double angleSlide = 0.0; +# double refReNumber = 6.5e6; +# double refDimensionalTemperature = 288.15; +# } + +# For more information, see examples/bin/boundary_condition.hypara file!!! + +int nBoundaryConditions = 5; +string bcName = "in_1"; +{ + string bodyName = "body"; + int bcType = 5; + double initU =3.05; + double initKinetic = 0.375; + double initEpsilon =86.64304; +} +string bcName = "out_1"; +{ + string bodyName = "body"; + int bcType = 6; + double initP =0; + double initKinetic = 0.3756; + double initEpsilon = 86.64304; +} +string bcName = "wall_1"; +{ + int bcType = 2; +} +string bcName = "sym_1"; +{ + int bcType = 3; +} +string bcName = "symf_1"; +{ + int bcType = 3; +} + +# 'bcType' is defined as following: +# -2: WAKE +# -1: INTERFACE +# 0 : NO_BOUNDARY_CONDITION +# 1 : EXTRAPOLATION +# 2 : SOLID_SURFACE +# 3 : SYMMETRY +# 4 : FARFIELD +# 5 : INFLOW +# 6 : OUTFLOW +# 52: PRESSURE_INLET +# 62: PRESSURE_OUTLET +# 61: OUTFLOW_CONFINED +# 7 : POLE diff --git a/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para.hypara b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para.hypara new file mode 100644 index 0000000..f903a5a --- /dev/null +++ b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para.hypara @@ -0,0 +1,1467 @@ +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// PPPPP H H EEEEE N N GGGGG L EEEEE III + +// P P H H E NN N G L E I + +// PPPPP HHHHH EEEEE N N N G GG L EEEEE I + +// P H H E N N N G G L E I + +// P H H EEEEE N N GGGGG LLLLL EEEEE III + +//------------------------------------------------------------------------+ +// Platform for Hybrid Engineering Simulation of Flows + +// China Aerodynamics Research and Development Center + +// (C) Copyright, Since 2010 + +// PHengLEI 2212 + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +########################################################################### +# Default parameters for Grid conversion # +########################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. +// multiblock: Multi-block grid or not, only for structured grid conversion. +// 0 -- Not. +// 1 -- Yes. +// iadapt: Adaptation number for unstructure grid. +// SymmetryFaceVector: The vector of symmetry face. +// 0 -- X axis. +// 1 -- Y axis. +// 2 -- Z axis. +// gridReorder: Reorder cell and face of grid or not, only for 3D unstructured grid conversion, +// which is CGNS type. +// 0 -- Not. +// 1 -- Yes. +// faceReorderMethod: the reorder method face of unstructured grid. +// 0 -- BSFCELLFACEORG. +// 1 -- BSFCELLFACELEFT. +// 2 -- BSFCELLFACERIGHT. +int gridtype = 0; +int gridobj = 1; +int multiblock = 0; +int iadapt = 0; +int SymmetryFaceVector = 1; +int gridReorder = 0; +int faceReorderMethod = 0; + +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; + +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; + +//----------------------------------------------------------------------- +# Grid data type # +//----------------------------------------------------------------------- +// from_gtype/to_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +// 9 -- Gridgen type of structured grid, *.dat/*.grd. +// dumpOldGrid: If dump out the old grid file. +// 0 -- Not. (default) +// 1 -- Yes. +int from_gtype = 2; +int to_gtype = 1; +int dumpOldGrid = 0; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfGridFile = 1; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; + +// ----------------- some advanced choices ------------------------------ +// iunsteady: The Grid is for unsteady simulation or not. +int iunsteady = 0; + +// fileformat: Ustar Grid file format. +// 0 -- BINARY. +// 1 -- ASCII. +int fileformat = 0; + +// Parameters for hybrid solver. +// mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; + +// Some parameters for structured overlapping grid. +int codeOfDigHoles = 1; +string holeBasicFileName = "./oversetGridView/holeBasicFile.inp"; +string holeFullFileName = "./oversetGridView/holeFullFile.dat"; +string linkFileName = "./oversetGridView/topology.dat"; +string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; + +// ----------------- Grid Refine Parameters ----------------------------- +// anisoRefine: If refine grid by anisoRefine type. +// 0 -- Not. (default) +// 1 -- Yes. +// geometryUnit: Geometry unit. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. +// exclusiveCase: Parallel projection exclusive case. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. +// projectOrgPoint: If the original wall points need to be projected or not. +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; +int exclusiveCase = 0; +int projectOrgPoint = 0; +string geometryFileName = "./grid/jsm.igs"; + +// ----------------- Grid Deform Parameters ----------------------------- +// deformationMethod: Grid Deform. +// 1 -- SPRING. +// 2 -- RBF. +// stationalGridFile: Original grid file. +// visualFileName : The visualization file path of deform grid. +// nDeformStep : The max deform step. +// flapAngle : The max flap angle. +// rotatePostionZ : Rotate postion. +// rotatePostionY : Rotate postion. +// gridSlice : If dump slice grid. +// sliceAxis : Grid slice axis. +// slicePosition : Grid slice position. +int nDeformStep = 40; +double flapAngle = 10.0; +double rotatePostionZ = 4.00003; +double rotatePostionY = 3.05; + +int deformationMethod = 2; +string stationalGridFile = "./grid/Segment2Brid.fts"; +string visualFileName = "./results/deformedGrid.dat" + +int gridSlice = 1; +int sliceAxis = 1; +double slicePosition = 13; + +// ----------------- RBF Parameters ------------------------------------- +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. +int numberOfReferenceCP = 40; +double influencePara = 25.0; + +// ----------------- Periodic Parameters -------------------------------- +// Notice: Rotational periodicity only support rotation along the X axis! +// periodicType: Which periodic boundary is used. +// 0 -- without Periodic Boundary. +// 1 -- Translational periodicity. +// 2 -- Rotational periodicity. +// translationLength[]: The relative distance between two periodic face + which only support one direction. +// rotationAngle: The relative angle between two periodic face. + which is recorded in degrees. +int periodicType = 0; +double translationLength[] = [0.0, 0.0, 0.0]; +double rotationAngle = 0.0; + +######################################################################### +# Default parameters for Partition # +######################################################################### +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// 2 -- refine structured grid. +// maxproc: The number of partition zones that want to be divided into. +// numberOfMultifile: The number of partition grid files that want to be dumped out. +int pgridtype = 0; +int maxproc = 4; +int numberOfMultifile = 1; + +// traceMark: Trace mark or not, only for structured grid partition. +// 0 -- Not. +// 1 -- Yes. +// blockIndexOfMark: the block index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. +int traceMark = 0; +int blockIndexOfMark = 0; +int cellIndexOfMark[] = [185, 30, 1]; + +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; + +//----------------------------------------------------------------------- +# File path # +//----------------------------------------------------------------------- +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). +string original_grid_file = "./grid/sphere_mixed.fts"; +string partition_grid_file = "./grid/sphere_mixed__4.fts"; + +// ------------------ Sompe advanced parameters ------------------------- +// omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". +// 0 -- Interface. (default) +// 1 -- Physical boundary condition, used in Hybrid solver. +// npartmethod: Method of interface reconstruction, default is 1. +// parallelPartitionMethod: Method of parallel partition, this is set only when execute parallel partition. It would be skipped when serial partition. +// 1 -- Using ParMetis for homogeneous MPI. +// 2 -- Using Metis for homogeneous MPI. +// 3 -- using METIS partition for homogeneous OpenMP. +// parmetisBalance: Used to specify the imbalance tolerance. +// 1 -- perfect balance. +// maxproc -- perfect imbalance. +// 1.05 -- recommended. +int omit_no_bound_bc = 0; +int npartmethod = 1; +int parallelPartitionMethod = 2; +double parmetisBalance = 1.05; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level, ..., et al. +int numberOfMultigrid = 1; + +######################################################################### +# Default parameters for CFD simulation # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; +int intervalStepSample = 1000; +int intervalStepForce = 100; +int intervalStepRes = 10; + +// compressible: +// 0 -- incompressible flow. +// 1 -- compressible flow. (default) +int compressible = 1; + +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + +//----------------------------------------------------------------------- +# CFD Control Parameter # +//----------------------------------------------------------------------- +// refMachNumber: Mach number. +// attackd: Angle of attack. +// angleSlide: Angle of sideslip. +// inflowParaType: The type of inflow parameters. +// 0 -- the nondimensional conditions. +// 1 -- the flight conditions. +// 2 -- the experiment conditions. +// 3 -- the subsonic boundary conditions. (Useless!) +// 4 -- the condition that the velocity, temperature and density are given. +// 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. +// refReNumber: Reynolds number, which is based unit length, unit of 1/m. +// refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. +// freestream_vibration_temperature: Dimensional freestream vibration temperature. +// refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. +// height: Fly height, unit of km. +// wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. +// forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. +// TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. +// radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary +// condition is radiation equilibrium temperature, and 0.8 is the default value. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. +int directionMethod = 0; +double refMachNumber = 0.73; +double attackd = 2.79; +double angleSlide = 0.00; +int flowInitMethod = 0; + +int inflowParaType = 0; +double refReNumber = 6.5e6; +double refDimensionalTemperature = 288.15; +double freestream_vibration_temperature = 300.00; + +//int inflowParaType = 1; +//double height = 0.001; + +//int inflowParaType = 2; +//double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). +//double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). + +// The velocity, temperature and density are fixed. +//int inflowParaType = 4; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalDensity = 1.0e3; + +// The velocity, temperature and pressure are fixed. +//int inflowParaType = 5; +//double refDimensionalVelocity = 1000.0; +//double refDimensionalPressure = 1.0e5; + +// The MachNumber, temperature and pressure are fixed. +//int inflowParaType = 6; +//double refDimensionalTemperature = 293.0; +//double refDimensionalPressure = 8886.06; + +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + +double wallTemperature = -1.0; + +double radiationCoef = 0.8; +double gridScaleFactor = 1.0; +double gridTranslationVector[] = [0.0, 0.0, 0.0]; + +int numberOfAerodynamicForceComponents = 1; +double forceReferenceLengthSpanWise = 1.0; // unit of meter. +double forceReferenceLength = 1.0; // unit of meter. +double forceReferenceArea = 1.0; // unit of meter^2. +double TorqueRefX = 0.0; // unit of meter. +double TorqueRefY = 0.0; // unit of meter. +double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. +double refMolecularWeight = 28.9644; // unit of g/mol. + +//----------------------------------------------------------------------- +# Spatial Discretisation # +//----------------------------------------------------------------------- +#************************************************************************ +# Struct Solver * +#************************************************************************ +// inviscidSchemeName: Spatial discretisation scheme of struct grid. +// Using this when solve structered grid or hybrid. +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", +// -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". +// isWennScheme: If using WENN Scheme of struct grid. +// 0 -- NO. (default) +// 1 -- Yes. +// str_limiter_name: Limiter of struct grid. +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". +string inviscidSchemeName = "roe"; +int isWennScheme = 0; +string str_limiter_name = "vanalbada"; + +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ +// viscousType: Viscous model. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. +// viscousName: Laminar or tubulent model. +// -- "0eq-bl". +// -- "1eq-sa". +// -- "2eq-kw-menter-sst". +// -- "2eq-kw-menter-bsl". +// -- "2eq-kw-wilcox-1988". +// -- "2eq-kw-wilcox-1998". +// -- "2eq-kw-kok-tnt". +// -- "2eq-kw-wilcox-2006". +// -- "easm-kw-2003". +// -- "easm-kw-2005". +// DESType: Type of DES. +// 0 -- RANS. (default) +// 1 -- DES. +// 2 -- DDES. +// 3 -- IDDES. +// uns_scheme_name: Spatial discretisation scheme of Unstruct grid. +// Using this when solve Unstructered grid or hybrid. +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", +// -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". +// uns_limiter_name: Limiter of Unstruct grid. +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", +// -- "nolim", no limiter. +// uns_vis_name: Discretisation method of viscous term. +// -- "std", "test", "aver", "new1", "new2". +// gradientName: Gradient reconstruction method. +// -- "default", "ggcell", "ggnode", "lsq". +// ivencat: Variation of vencat limiter. +// 0 -- org method, it is independent of grid scale. +// 1 -- new method, it is dependent of grid scale. +// 4 -- Ustar limiter model, without grid size unitary. +// 7 -- default used. +// venkatCoeff: Cofficient of vencat, when using vencat limter. +// limitVariables: Limit model (It is useful only if limitVector is 0). +// 0 -- limit only for pressure and denstiny, then get the min value. +// 1 -- limit for every variables, then get the min value. +// limitVector: +// 0 -- Each variable use the same limiter coefficient. +// 1 -- Each variable use the respective limiter coefficients. +// reconmeth: +// 0 -- When reconstruct face value, Q+, Q- use respective limiter coefficients. +// 1 -- Q+, Q- use the min limiter coefficients of left and right cell. +// skewnessAngle: The skewness angle of grid cells. +// roeEntropyFixMethod: Entropy fix (correction) method. +// 1 -- direct fix, which limits the minimum eigenvalue directly. +// 2 -- multi-dimensional fix, which is derived from structured solver and now is only valid for struct solver. +// 3 -- Harten type, which is default used. +// roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. +// It is used to scale the default Roe entropy fix coefficients. +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. + +//int viscousType = 0; +//string viscousName = "Euler"; + +//int viscousType = 1; +//string viscousName = "laminar"; + +int viscousType = 3; +string viscousName = "1eq-sa"; + +//int viscousType = 4; +//string viscousName = "2eq-kw-menter-sst"; + +int DESType = 0; + +string uns_scheme_name = "roe"; +string uns_limiter_name = "vencat"; +string uns_vis_name = "test"; +string gradientName = "ggnode"; + +int ivencat = 7; +double venkatCoeff = 5.0; +int reconmeth = 1; +int limitVariables = 0; +int limitVector = 0; +double skewnessAngle = 60.0; + +int roeEntropyFixMethod = 3; +double roeEntropyScale = 1.0; + +double AusmpwPlusLimiter = 1.0; + +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ +// iunsteady: Steady or unsteady. +// 0 -- steady. +// 1 -- unsteay. +// physicalTimeStep: The nondimensional physical time step. +// ifStartFromSteadyResults: The unsteady simulation is start from steady flowfield or not, 0 is for no and else is for yes. +// ifStaticsFlowField: Statistical variables for unsteady simulation. +// ifStaticsReynoldsStress: Statistical Reynolds stress for unsteady simulation. +// startStatisticStep: Outer step when start statistics. +// when the value is larger than "maxSimuStep", it is useless. +// statisticalTimePeriod: Used as time period of statistic analysis. +// when the value is negative, time period is treated as infinite. +// statisticMethod: Statistic reynolds stress method. +// 0 -- tau = - ^2 +// 1 -- tau = +// min_sub_iter: The min sub iteration of unsteady simulation. +// max_sub_iter: The max sub iteration of unsteady simulation. +// tol_sub_iter: The tolerance of sub iteration of unsteady simulation. +// tscheme: Temporal Discretisation method. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. +// iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. +// Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. +// CFLStart: Started cfl number. +// CFLEnd: End cfl number. +// CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. +// ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) +// swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. +// nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. +// LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. +// ifLocalTimeStep: Time step method. +// 0 --Local. +// 1 --Global. +// isUseLocalCFL: use variable number of CFL or not. +// 0 -- global unified CFL number. +// 1 -- local CFL number. +// isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. +// visl_min: Minimum value of laminar viscosity coefficient. +// turbCFLScale: Turbulence model cfl number factor. +// codeOfAleModel: Arbitrary Lagrangian-Eulerian method. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. +// wallFunctionType: The type of wall function to implement. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. +// RKStage: The number of Runge-Kutta step. +// lamda: Cofficient of Runge-Kutta step. +int iunsteady = 0; +double physicalTimeStep = 0.01; +double physicalTimeStepDimensional = -0.001; +int ifStartFromSteadyResults = 0; +int ifStaticsFlowField = 0; +int ifStaticsReynoldsStress = 0; +int startStatisticStep = 800000; +double statisticalTimePeriod = -1.0; +int statisticMethod = 0; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. + +int methodOfDualTime = 3; +int min_sub_iter = 50; +int max_sub_iter = 50; +double tol_sub_iter = 0.01; + +int tscheme = 4; +int iSimplifyViscousTerm = 1; +int ifLocalTimeStep = 0; +int isUseLocalCFL = 0; +int isUsePreTwall = 0; +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; +double pMaxForCFL = 0.2; +double pMinForCFL = 0.1; +double deltaMaxForCFL = 0.2; +double magnifyFactorForCFL = 1.1; +double reduceFactorForCFL = 0.5; + +double ktmax = 1.0e10; + +int swapDq = 1; + +int nLUSGSSweeps = 1; +double LUSGSTolerance = 0.01; +int order = 2; + +double visl_min = 0.01; +double turbCFLScale = 1.0; +double csrv = 1.0; +double timemax = 1.0e10; +double dtsave = -1.0; +int maxale = 10; +double dtau = 0.001; + +int wallFunctionType = 0; + +int RKStage = 2; +double lamda[] = [0.5, 1.0]; + +//int RKStage = 1; +//double lamda[] = 1.0; + +//int RKStage = 4; +//double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; +#************************************************************************ +# File In or Out * +#************************************************************************ +// numberOfGridGroups: The number of grid groups. +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +// IMPORTANT WARNING: The file index should be ignored, +// e.g. if the partitioned grid is rae2822_hybrid2d__4_0.fts, +// please use 'rae2822_hybrid2d__4.fts' here! +// plotFieldType: If dump out the field results to visulization. +// walldistMethod: The method to compute wall distance. +// 0 -- accurate but not fast enough. +// 1 -- fast but not accurate enough. +// 2 -- super fast but more non-accurate! +// resSaveFile: The file path to save the residual convergence process, write data for every default (intervalStepRes) steps. +// turbresfile: The file path to save the residual convergence process of turbulence, write data for every default (intervalStepRes) steps. +// aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. +// restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. +// turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. +// wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. +// nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. +// nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. +// nIsComputeWallDist: Whether to compute the wall distance. +// 0 -- Compute wall distance. +// 1 -- Not compute. +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; + +int nIsComputeWallDist = 0; +int walldistMethod = 1; +int cellMethodOrNodeMethod = 0; + +string resSaveFile = "results/res.dat"; +string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; +string aircoeffile = "results/aircoef.dat"; + +string restartNSFile = "results/flow.dat"; +string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; + +string visualfile = "results/tecflow.plt"; +string wall_aircoefile = "results/wall_aircoef.dat"; +string samplefile = "results/sample.dat"; + +string protectionFile0 = "results/flow0.dat"; +string protectionFile1 = "results/flow1.dat"; +string wall_heatfluxfile = "results/wall_heatflux.dat"; + +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; + +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; + +string sixDofFileName = "results/sixDofInfo.dat"; +string derivativeFileName = "results/identify.dat"; +string hysteresisFileName = "results/force_beta.plt"; + +int plotFieldType = 0; + +// visualfileType: The file type of visualfile. +// 0 -- Tecplot binary. +// 1 -- Tecplot ASCII. +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. +int visualfileType = 1; + +// samplefileMode: The dump mode of sample file. +// 0 -- dump out every probe/line/surface data for all step intervals. +// 1 -- dump out all probe/line/surface data for every step intervals. +int samplefileMode = 0; + +// visualSlice: The slice of tecflow. +// 0 -- Do not save slice data. +// 1 -- comput and save it to sliceFile. +// sliceAxis: Normal vector of slice. +// 1 -- X_DIR. +// 2 -- Y_DIR. +// 3 -- Z_DIR. +// slicePostion: Coordinate of slice. + +int visualSlice = 0; +int sliceAxis = 1; +double slicePostion = -0.5; +string sliceFile = "results/Slice.plt"; +int dumpWallFaceCenter = 0; + +// min-max box of the visual block. +double lowerPlotFieldBox[] = [0.0 0.0 0.0]; +double upperPlotFieldBox[] = [1.0 1.0 1.0]; + +//-----------the optional parameters list for the flow field output---------------- +// nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- viscosityLaminar(7), viscosityTurbulent(8), +// -- vorticity_x(9), vorticity_y(10), vorticity_z(11), vorticityMagnitude(12), +// -- strain_rate(13), Q_criteria(14), Cp(15), timeStep(16), volume(17), +// -- modeledTKE(18), modeleddissipationrate(19), SSTF1(20), SSTF2(21), +// -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), +// -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), +// -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. +//-----------the optional parameters list for the wall boundary condition---------------- +// nVisualWallVariables: The number of visual variables on wall. +// visualWallVariables : dumped variable types, listed as following: +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). +int nVisualVariables = 8; +int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; + +int nVisualWallVariables = 9; +int visualWallVariables[] = [0, 1, 2, 3, 4, 5, 9, 10, 11]; + +// dumpStandardModel: Dump many standard model data. +// 1 -- Turbulent flat plate. +int dumpStandardModel = 0; + +// ifSetDataMonitor: Whether to set the data monitor. +// 0 -- No. +// 1 -- Yes. +// dataMonitorType: The type of data Monitor. +// 0 -- Probes data monitor. +// 1 -- Lines data monitor. +// 2 -- Surfaces data monitor. +// probesDefineFile: Probes location information file. +// nLines: The number of lines need to be monitored. +// linesDefineFile: Lines location information file. +// nSurfaces: The number of surfaces need to be monitored. +// surfacesDefineFile: Surfaces location information file. +// searchCellsMethod: method to search the cell of each probe. +// 0 -- Nearest cell to the probe. +// 1 -- Real cell where the probe is located. +// nProbeVariables: Number of variables want to be dumped for probes monitered. +// probeVariables : Variable types dumped, listed as following: +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). +// Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! +// probeVariables order must from small to big. +// probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. +int ifSetDataMonitor = 0; + +int dataMonitorType = 0; +string probesDefineFile = "bin/probes_XYZ.dat"; + +//int dataMonitorType = 1; +//int nLines = 1; +//string linesDefineFile = "bin/lines_XYZ.dat"; + +//int dataMonitorType = 2; +//int nSurfaces = 4; +//string surfacesDefineFile = "bin/surfaces_XYZ.dat"; + +int searchCellsMethod = 0; + +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ +// turbInterval: Iteration number of turbulence. +// kindOfTurbSource: Kinds of turbulent source. +// 0 -- Original. +// mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. +// transitionType: transition model type +// 0 -- none. +// 2 -- gama-re-theta. +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. +int turbInterval = 1; +int turbOrderStruct = 2; +int kindOfTurbSource = 0; +int mod_turb_res = 0; +double freeStreamViscosity = 1.0e-3; +double muoo = 3.0; +double kwoo = 5.0; +int transitionType = 0; +double turbIntensity = -1.0; +int freeturbIntensitySRModify = 0; +double freeDecayXLocation = 0.0; +int compressibleCorrection = 0; +int transitionMaFix = 1; + +// maximum eddy viscosity (myt/my) max. +double eddyViscosityLimit = 1.0e10; +int monitor_vistmax = 0; + +#************************************************************************ +# LES Parameter * +#************************************************************************ +// iLES: Create LESSolver or not. +// = 1 -- Create LESSolver; +// != 1 -- not. +// amplitudeofDisturb: Amplitude of adding disturb. +// disturbstep: Unsteady time step or steady iteration of adding random disturb. +// iterdisturb: Add random disturb in every sub-iter or only first sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. +// ipraddisturb: Add density and pressure disturb or not. +// ibodyforce: Add body force in source flux of NS equations or not. +// = 0 -- not; +// != 0 -- Add body force. +// bodyforce: Body force in source flux of NS equations or not. +// utau: friction velocity, using in DNSDisturb. +// sgsmodel: subgrid scale model. +// = "smagorinsky"; +// = "dsmCom"; +// = "wale"; +// = "sigma". +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. +// turbViscousCutType: turbulent viscosity cut type. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. +// smagConstant: constant of smagorinsky model. +// waleConstant: constant of wale model. +// filterDirection [3]: filter variables in i, j, k direction or not. +// averageDirection[3]: average variables in i, j, k direction or not. +// isotropicConstant: constant of isotropic part of SGS stress. +int iLES = 0; +string sgsmodel = "smagorinsky"; +int deltaFunctionType = 2; +int wallDampingFunctionType = 1; +int turbViscousCutType = 2; +double smagConstant = 0.1; +double isotropicConstant = 0.0; +double waleConstant = 0.6; +double sigmaConstant = 1.35; +int filterDirection[] = [1, 1, 0]; +int averageDirection[] = [0, 0, 0]; +double testFilterScale = 2.0; +int averageWidth = 1; +int monitorNegativeConstant = 0; + +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ +// dg_high_order: +// 0 -- generic order accuracy. +// 1 -- high order accuracy. +// iapplication: +// 0 -- gas model is fixed in the codes. +// 1 -- gas model is imported from library files. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, +// nm: Equation number of the physics, but is out of commision now. +// 4 -- for 2D. +// 5 -- for 3D. +// nGasModel: The type of gas. less than and equal to 1 represents the mixture gas. +// Otherwise, the pure gas with one component is used for perfect gas. +// 0 -- Earth gas. +// 1 -- Mars gas. +// 2 -- Argon. +// 3 -- Nitrogen. +// nEnergyRecycle: The type of EnergyModel Recycle. +// 0 -- not used. +// 1 -- used. +// nDensityModify: The type of densitymodify. +// 0 -- not used. +// 1 -- used. +// nchem: +// 0 -- without chemical reaction flow. +// 1 -- the chemical reaction flow is considered. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. +// 0 -- perfect gas. +// 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nchemsrc: +// 0 -- the source terms are not computed. +// 1 -- the source terms are computed. +// nchemrad: +// 0 -- compute the spectrum radius without considering chemical reaction flow. +// 1 -- compute the spectrum radius that need to count the contribution from chemical reaction flow. +// ntmodel: The thermodynamic temperature model. +// 1 -- One-temperature model. +// 2 -- Two-temperature model. +// 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. +// nIdealState: whether take all gas species as ideal gas for gas-mixture process. +// 0 -- No. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. +// 0 -- the energy term is computed using the conventional method. +// 1 -- the energy term is computed using the polynomial fitting method. +// 2 -- the energy term is computed using the piecewise polynomial fitting method. +// parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. +// The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. +// catalyticCoef: +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. +// sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. +// sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. +// velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. +// nSpeciesLimit: limitter of gas species +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). +// nMaxStepTemperature: the iterative steps of temperature. +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. +// nAblation: +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. +// isInjection: +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. +// nViscosityModel: +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). +// nContinueModel: The new continue model can switch different computation model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. +// nSutherland: +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. +// gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. +// initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. +// ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. +// nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. +// firstStepError : the residual error of the first step iteration for the self-adaptive calculation. +// secondStepError : the residual error of the second step iteration for the self-adaptive calculation. +// thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. +int dg_high_order = 0; +int iapplication = 0; +int isAdaptiveSolver = 0; +int nm = 5; +int nEquilibriumGas = 0; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; +int nIterFirstStep = 1000; +int nIterSecondStep= 2000; +int nIterThirdStep = 2000; +int nEnergyAssembly = 0; +int nControlVariable = 1; +double firstStepError = 0.01; +double secondStepError = 0.001; +double thirdStepError = 0.001; +double predictCFLError = 0.1; + +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; + +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; + +int nIdealState = 0; +int nEnergyRecycle = 1; +int nSlipBCModel = 0; +int nDensityModify = 1; +int nTEnergyModel = 0; +int nMeanFreePathType = 0; +int nIsChemicalFreeze = 0; +int nIsSuperCatalytic = 1; +int nTemperatureJump = 0; +int nSurfGradMethod = 0; +int nRapidFlowfield = 0; +int nSurfHeatMonitor = 0; +int nInitPressureStep = 100; +int nDumpCFLNumber = 0; + +double parkVDPower = 0.6; +double catalyticCoef = 0.0; +double sigmaVelocity = 1.0; +double sigmaTemperature = 1.0; +double sigmaMassFraction = 1.0; +double velocitySlipCorrectConstant = 1.0; + +double chemicalRelaxCorf = 1.0; +double chemicalSpectrumRadiusCoef = 1.0; +double viscousSpectrumRadiusCoef = 1.5; +double inviscidSpectrumRadiusCoef = 1.5; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; + +double maxViscous = 10000.0; +double trTemperatureMin = 10.0; +double veTemperatureMin = 30.0; +double maxTemperature = 50000.0; +double densityMin = 1.0e-8; +double densityMinFactor = 0.1; +double tAdjustmentFactor = 10.0; +double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; + +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; + +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +string speciesName = "O, O2, NO, N, N2"; +string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; + +//string speciesName = "O, O2, NO, N, NO+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string speciesName = "O, O2, NO, N, O+, O2+, NO+, N+, N2+, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Mars-Pa8"; +//string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; +//string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; + +//string gasfile = "Pa"; +//string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; + +//string gasfile = "Combustion-12"; +//string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; +//string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "SpeciesA, SpeciesB"; +//string initMassFraction = "1.0, 0.0"; +int nSutherland = 0; +double gamaSpeciesA = 1.4; +double gamaSpeciesB = 1.3; +double molecularWeightSpeciesA = 29.0; +double molecularWeightSpeciesB = 30.0; + +//string gasfile = "Gas-Mixture"; +//string speciesName = "O2, N2"; +//string initMassFraction = "1.0, 0.0"; + +int nFraction = 0; +int nContinueModel = 0; +int nChemicalFlowStep = 0; +int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; + +######################################################################### +// Multi-Grid parameters. +// nMGLevel: The number of level of Multi-Grid. +// <= 1 -- Single-level. +// > 1 -- multi-level. +// MGPreIteration: For each grid, the number of pre-smoothing steps. +// n_post: For each grid, the number of post-smoothing steps. +// MGCoarsestIteration: For the coarest grid the number of smoothing steps. +// MGFasType: V-multi cycle or W-multi cycle. +// 1 -- V-multi cycle. +// 2 -- W-multi cycle. +// flowInitStep: Flow initialization step, 0 - 500 is suggested. +// Multi-Grid : Number of steps computing on coarse grid, during flow initialization. +// Single-Grid: Number of steps computing using first-order with vanleer, during flow initialization. +// mgCFLScale: CFL number enlarge times for coarse grid. +// mprol: Multi-grid interpolation method, interpolation from coarse cell to fine grid. +// 1 -- zero order. +// 2 -- first-order. (default) +// mgCorrectionLimit: Multi-grid correction limit. +int nMGLevel = 1; +int MGCoarsestIteration = 1; +int MGPreIteration = 1; +int MGFasType = 1; +int n_post = 0; +int flowInitStep = 100; +int mprol = 2; +double mgCFLScale = 1.0; +double mgCorrectionLimit = 0.01; + +//--------------- Some parameter for turbulent model -------------------- +// neasm: The variation of kw turbulent model. +// ismooth_turb: Residual smooth for turb or not. +// SSTProductType: The type of product term based on vorticity for SST. +// SAProductType: The type of product term based on vorticity for SA. +int neasm = -3; +int SSTProductType = 0; +int ismooth_turb = 0; +int SAProductType = 2; + +// ----------------- Overset Grid parameter ----------------------------- +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; + +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ +// isFVMOrFDM: +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. +// SolverStructOrder: Spatial discretisation order of NS equations with struct grid. +// <= 2 -- finite volume method. +// >= 3 -- finite difference order. (to be completed) +// 0 -- default. +// str_highorder_interpolation_epsilon: Epsilon in weighted interpolation, bigger epsilon, better convergence, +// smaller epsilon, robuster for shock-detecting. +// str_highorder_interpolation_type: +// -- "classical", "test". +// str_highorder_flux_name: +// -- "roe", "steger". +// structhighordergradient: +// -- "conservation", "chain_rule". +int isFVMOrFDM = 0; +string str_highorder_solver = "WCNS"; +int SolverStructOrder = 0; +double str_highorder_interpolation_epsilon = 1.0e-6; +string str_highorder_interpolation_type = "test"; +string str_highorder_flux_name = "steger"; +string structhighordergradient = "conservation"; +double coefofstrflux = 0.5; +double limitcoefofinterface = 0.0; + +// ----------------- Advanced choices ----------------------------------- +// outtimesc: Time stepping scheme for the outer loop. +// MUSCLCoefXk: The parameter of MUSCL interpolations, belongs to [-1, 1]. +// -1 -- seconde-order fully-upwind differencing. +// 0 -- seconde-order upwind-biased differencing. +// 0.333333 -- third-order upwind-biased differencing. +// 1 -- seconde-order central differencing. +// MUSCLCoefXb: The limiter parameter. +// 0 -- the effect of the limiter is cancelled, means the first-order interpolations. +// allReduceStep: Iteration intervals for MPI AllReduce operation, default is 1. +string outtimesc = "impbd2"; +double MUSCLCoefXk = -1; +double MUSCLCoefXb = 1.0; +int allReduceStep = 1; + +// ----------------- overlap configuration ------------------------------ +// codeOfOversetGrid: Overlapping(overset) grid or not. +// 0 -- NON-overlapping grid. +// 1 -- Overlapping grid. +// oversetInterpolationMethod: the method of overset interpolation while field simulation. +// 0 -- set the acceptor cell value by donor cell value. +// 1 -- set the acceptor cell value by distance weight of donor cell value. +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; + +// ----------------- ALE configuration ------------------------------ +int codeOfAleModel = 0; +int aleStartStrategy = -1; + +double referenceLength = 1.0; +double referenceVelocity = 1.0; +double referenceDensity = 1.0; + +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. + +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. +int methodForKineticEquation = 0; +double relaxParameterOfKinetic = 1.0; + +#************************************************************************ +# motive information * +#************************************************************************ +int numberOfMovingBodies = 1; + +############################## body0 ############################## +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. +// -1 given motion partten. +// 0 still. +// 1 six DOF motion. +// 2 three DOF motion. +// 11 X-axis forced motion. +// 12 Y-axis forced motion. +// 13 Z-axis forced motion. +// 14 forced pitch motion. +// 15 forced yaw motion. +// 16 forced roll motion. +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. +// 1 -- clockwise from the point of view along the positive x axis. +// -1 -- anticlockwise from the point of view along the positive x axis. +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; + +// post indentify. +int integralOrder = 4; + +// ---------------- ATP read -------------------------------------------- +//@int inflowParaType = 0; +//@double refReNumber = 6.5e6; +//@double refDimensionalTemperature = 288.15; +//@double freestream_vibration_temperature = 300.00; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalVelocity = 0; +//@double refDimensionalDensity = 0; +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ +int isPlotVolumeField = 0; + +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; + +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; + +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ +int isSolveEnergyEquation = 0; +int isSolveTurbEquation = 0; +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para_incompressible.hypara b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para_incompressible.hypara new file mode 100644 index 0000000..11bbad5 --- /dev/null +++ b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/cfd_para_incompressible.hypara @@ -0,0 +1,211 @@ +######################################################################### +# General Control Parameter # +######################################################################### +// maxSimuStep: The max simulation step, don't care simulation is restart or not. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepRes: The step intervals for residual 'res.dat' saved. +int maxSimuStep = 1000; +int intervalStepFlow = 1000; +int intervalStepPlot = 100; +int intervalStepForce = 1; +int intervalStepRes = 1; + +// gridfile: The partitioned Grid file path, using relative path, +// which is relative to the working directory. +string gridfile = "./grid/sub__4.fts"; + +######################################################################### +# Flow Parameter # +######################################################################### + +//flowSolverName : SIMPLE/CompressibleSIMPLE/PISO +string flowSolverName = "SIMPLE"; + +// Initial value of flow variables +double initRho = 998.2; +double initU = 3.05; +double initV = 0; +double initW = 0; +double initP = 0; +double initMu =0.001003; +double initRg = 296.928571; +double refP = 101325; +int refPLocate = 0; + +//Parameters For Solving the Momentum Equation +// MomEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int MomEqSolMethod = 2; +// MomEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int MomEqPrecondMethod = 1; +int MomEqMaxSweep = 30; +double MomEqIterSolvTol = 1e-8; +double MomEqRelaxCoeff = 0.5; + +//Parameters For Solving the Pressure Possion Equation +// PPEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int PPEqSolMethod= 3; +// PPEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int PPEqPrecondMethod= 1; +int PPEqMaxSweep = 30; +double PPEqIterSolvTol = 1e-8; +double PPEqRelaxCoeff = 0.3; + +//Relaxation factor of surface flux +double FaceFluxRelaxCoeff = 0.5; + +int isCalGravityVisSource = 0; +int bodyForceFlag = 0; +double gravityX = 0.0; +double gravityY = -9.81; +double gravityZ = 0.0; + +int isBoussinesqApproximation = 0; +double thermalExpansionCoeff = 3.44827e-3; + +######################################################################### +# Turbulence Equation Parameter # +######################################################################### +// isSolveTurb : is(1)/not(0); +int isSolveTurb = 1; +// TurbEqSolverName : k-epsilon(KE)/Spalart-Allmaras(SA) +string TurbEqSolverName = "SA"; + +// Initial value of Turbulence variables +double initKinetic = 0.0348844; +double initEpsilon = 10.89987; + +//Parameters For Solving the Turbulence Equation +// TurbEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int TurbEqSolMethod = 2; +// TurbEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int TurbEqPrecondMethod = 1; +int TurbEqMaxSweep = 30; +double TurbEqIterSolvTol = 1e-8; +double TurbEqRelaxCoeff = 0.5; + +######################################################################### +# Energy Equation Parameter # +######################################################################### +// isSolveEnergy : is(1)/not(0); +int isSolveEnergy = 0; + +// Initial value of Energy variables +double initT = 273.15; +double initCPg = 1007.0; +double initK = 0.0454; +double initkappa = 1.4; +double refT = 273; + +//Parameters For Solving the Energy Equation +// EnergyEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int EnergyEqSolMethod = 2; +// EnergyEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int EnergyEqPrecondMethod = 1; +int EnergyEqMaxSweep = 30; +double EnergyEqIterSolvTol = 1e-8; +double EnergyEqRelaxCoeff = 0.5; + +######################################################################### +# Species Equation Parameter # +######################################################################### +// isSolveSpecies : is(1)/not(0); +int isSolveSpecies = 0; + +//Parameters For Solving the Species Equation +int numberOfSpeciesIncom = 1; +string speciesNameIncom[] = [AIR]; +double initMassFractionIncom[] = [1.0]; + +//Parameters For Solving the Species Equation +// SpeciesEqSolMethod : GaussSeidel(0)/GMRES(1)/Bicgstab(2)/AMG(3)/PCG(4)/FlexGMRES(5)/ILU(10)/AMGDD(11)/Hybrid(12) +int SpeciesEqSolMethod = 2; +// SpeciesEqPrecondMethod : None(0)/ILU(1)/AMG(2)/Euclid(3)/LduDiag(8) /LduDIC(9) /LduDILU(10) +int SpeciesEqPrecondMethod = 1; +int SpeciesEqMaxSweep = 30; +double SpeciesEqIterSolvTol = 1e-8; +double SpeciesEqRelaxCoeff = 0.5; + +######################################################################### +# Unsteady Parameter # +######################################################################### +// iunsteady : is(1)/not(0); +int iunsteady = 0; +double startTime = 0.0; +double endTime = 20; +double dt = 0.1; +int min_sub_iter = 50; +int max_sub_iter = 50; + +// isStableUnsteadyMethod : is(1)/not(0); +int isStableUnsteadyMethod = 0; + +######################################################################### +# Solution Method # +######################################################################### +// ConvCalcMethod : UPWIND/CDS/QUICK/SUDS +string ConvCalcMethod = "UPWIND" + +// DiffCalcMethod : NON_ORTHOGONAL(default) +string DiffCalcMethod = "NON_ORTHOGONAL"; + +//TranCalcMethod : IMPLICIT_EULER(1st)/IMPLICIT_2ND_ORDER(2st) +string TranCalcMethod = "IMPLICIT_EULER"; + +// GradCalcMethod : GAUSS/LSQ +string GradCalcMethod = "GAUSS"; + +// mathLibType : hypre(0)/unap(1)/yhamg(2) +int mathLibType = 0; + +// compressible : is(0, default)/not(1) +int compressible = 0; + +// SIMPLEC : SIMPLE(0)/SIMPLEC(1) +int SIMPLEC = 1; + +// isSkewness : stable gradient method: is(1)/not(0) +int isSkewness = 0; + +//rhoType : Constant(0)/IncompressibleIdealGas(1)/IdealGas(2) +int rhoType = 0; + +//muType: Constant(0)/SutherLand(1)/IdealGasMixingLaw(2), +int muType = 0; + +//kType : Constant(0)/MassWeightedMixingLaw(1)/IdealGasMixingLaw(2) +int kType = 0; + +//cpType : Constant(0)/Mixing(1) +int cpType = 0; + +//massdiffType : ConstantDiluteApprox(1)/DiluteApprox(2) +int massdiffType = 0; + +######################################################################### +# Post-Processing # +######################################################################### +/ nVisualVariables: Number of variables want to be dumped for tecplot visualization. +// visualVariables : Variable types dumped, listed as following: +// -- U(22), V(23), W(24), P(25), CP(26), T(27), DEN(28), VIS(29), TE(31), ED(32), enthalpy(70), species(from 71 ~ 70 + numberOfSpecies) +// Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! +// Variables order must from small to big. + +int nVisualVariables = 6; +int visualVariables[] = [22, 23, 24, 25, 29, 31]; +int plotFieldType = 1; + +string resSaveFile = "results/res.dat"; +string aircoeffile = "results/aircoef.dat"; + + + + + + + + + + + + diff --git a/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/grid_para.hypara b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/grid_para.hypara new file mode 100644 index 0000000..7eb3978 --- /dev/null +++ b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/grid_para.hypara @@ -0,0 +1,36 @@ +######################################################################### +# Grid data type # +######################################################################### +// gridtype: Grid type for generation, conversion, reconstruction, merging. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +// from_gtype: Type of grid data type in grid conversion process. +// -1 -- MULTI_TYPE. +// 1 -- PHengLEI, *.fts. +// 2 -- CGNS, *.cgns. +// 3 -- Plot3D type of structured grid, *.dat/*.grd. +// 4 -- Fieldview type of unstructured grid, *.dat/*.inp. +// 5 -- Fluent, *.cas/*.msh. +// 6 -- Ustar, mgrid.in. +// 7 -- Hybrid, include both of unstructured and structured grid, *.fts. +// 8 -- GMSH, *.msh. +int gridtype = 0; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; +int from_gtype = 5; + +######################################################################### +# File path # +######################################################################### +// from_gfile: path of original data file for unstructure grid convert from. +// out_gfile: path of target file for grid convert to, *.fts type of file usually. +int numberOfMultifile = 1; +string from_gfile = "./grid/sub.cas"; +string out_gfile = "./grid/sub.fts"; diff --git a/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/key.hypara b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/key.hypara new file mode 100644 index 0000000..2efb135 --- /dev/null +++ b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/key.hypara @@ -0,0 +1,53 @@ +string title = "PHengLEI Main Parameter Control File"; + +// IMPORTANT NOTICE: DON NOT MODIFY THE FOWLLOWING LINE. +string defaultParaFile = "./bin/cfd_para.hypara"; + +// ndim: Dimensional of the grid, 2 or 3. +// nparafile: the number of parameter files. +// nsimutask: simulation task type. +// 0 -- CFD Solver of NS or Turbulation. +// 1 -- Grid generation: for special typical cases, such as cylinder, flat plate, etc. +// Grid conversion: from other format to PHengLEI format (.fts). +// Grid reconstruction: such as grid adaptation. +// Grid merging: merge two blocks into one block. +// Grid repairing: repair the original grid in order to remove the negative volume cells. +// 2 -- Wall distance computation for turb-solver. +// 3 -- Grid partition. +// 4 -- Knowledge repository / examples of PHengLEI-API. +int ndim = 3; +int nparafile = 1; + +int nsimutask = 0; +//string parafilename = "./bin/cfd_para_subsonic.hypara"; +//string parafilename = "./bin/cfd_para_transonic.hypara"; +//string parafilename = "./bin/cfd_para_supersonic.hypara"; +//string parafilename = "./bin/cfd_para_hypersonic.hypara"; +string parafilename = "./bin/cfd_para_incompressible.hypara"; + +//int nsimutask = 1; +//string parafilename = "./bin/grid_para.hypara"; + +//int nsimutask = 2; +//string parafilename = "./bin/cfd_para.hypara"; + +//int nsimutask = 3; +//string parafilename = "./bin/partition.hypara"; + +//int nsimutask = 4; +//string parafilename = "./bin/repository.hypara"; + +//int nsimutask = 5; +//string parafilename = "./bin/overset_grid_view.hypara"; + +//int nsimutask = 14; +//string parafilename = "./bin/integrative_solver.hypara"; + +//int nsimutask = 99; +//string parafilename = "./bin/post_processing.hypara"; + +// ---------------- Advanced Parameters, DO NOT care it ---------------- +int numberOfGridProcessor = 0; +// ATP read +//@string parafilename1 = "" +//@string parafilename2 = ""; diff --git a/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/partition.hypara b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/partition.hypara new file mode 100644 index 0000000..34215b8 --- /dev/null +++ b/H13_ThreeD_SUBOFF_UPWIND_4CPU/bin/partition.hypara @@ -0,0 +1,22 @@ +// pgridtype: The grid type. +// 0 -- unstruct grid. +// 1 -- struct grid. +// maxproc: The number of partition zones that want to be divided into, +// which is equal to the number of CPU processors you want. +// Usually, 50~100 thousands structured cells per CPU-Core is suggested. +// 30~70 thousands unstructured cells per CPU-Core is suggested. +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// partition_grid_file: Target partition grid file(PHengLEI type, *.fts). + +int pgridtype = 0; +int maxproc = 4; + +string original_grid_file = "./grid/sub.fts"; +string partition_grid_file = "./grid/sub__4.fts"; + +// numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. +// 1 -- single level. +// 2 -- 2 level. +// N -- N level,..., et al. +int numberOfMultigrid = 1; + diff --git a/H13_ThreeD_SUBOFF_UPWIND_4CPU/grid/网格地址.txt b/H13_ThreeD_SUBOFF_UPWIND_4CPU/grid/网格地址.txt new file mode 100644 index 0000000..899f977 --- /dev/null +++ b/H13_ThreeD_SUBOFF_UPWIND_4CPU/grid/网格地址.txt @@ -0,0 +1,5 @@ +红山开源风雷算例库原始网格获取百度网盘链接: +链接:http://pan.baidu.com/s/1aZ9cdkp6CkT9il4fEpnTcA +提取码:w47m + +注:plot3D格式网格需同时下载.grd和.inp文件 \ No newline at end of file diff --git a/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/cfd_para.hypara b/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/cfd_para.hypara index c344658..f903a5a 100644 --- a/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/cfd_para.hypara +++ b/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/cfd_para.hypara @@ -8,23 +8,24 @@ // Platform for Hybrid Engineering Simulation of Flows + // China Aerodynamics Research and Development Center + // (C) Copyright, Since 2010 + +// PHengLEI 2212 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ########################################################################### # Default parameters for Grid conversion # ########################################################################### // gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// 7 -- Grid type change, convert structured grid to unstructured grid. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. // multiblock: Multi-block grid or not, only for structured grid conversion. // 0 -- Not. // 1 -- Yes. @@ -46,19 +47,24 @@ int gridobj = 1; int multiblock = 0; int iadapt = 0; int SymmetryFaceVector = 1; - int gridReorder = 0; int faceReorderMethod = 0; -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; // omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". // 0 -- Interface. (default) // 1 -- Physical boundary condition, used in Hybrid solver. int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; //----------------------------------------------------------------------- # Grid data type # @@ -87,10 +93,9 @@ int dumpOldGrid = 0; // from_gfile: path of original data file for unstructure grid convert from. // out_gfile: path of target file for grid convert to, *.fts type of file usually. int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; // ----------------- some advanced choices ------------------------------ // iunsteady: The Grid is for unsteady simulation or not. @@ -103,9 +108,9 @@ int fileformat = 0; // Parameters for hybrid solver. // mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; // Some parameters for structured overlapping grid. int codeOfDigHoles = 1; @@ -119,31 +124,31 @@ string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; // 0 -- Not. (default) // 1 -- Yes. // geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. // exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. // projectOrgPoint: If the original wall points need to be projected or not. -int anisoRefine = 0; -int geometryUnit = 1; -int isProject = 0; -int readDist = 0; -int isDeform = 0; +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; int exclusiveCase = 0; int projectOrgPoint = 0; string geometryFileName = "./grid/jsm.igs"; // ----------------- Grid Deform Parameters ----------------------------- // deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. +// 1 -- SPRING. +// 2 -- RBF. // stationalGridFile: Original grid file. // visualFileName : The visualization file path of deform grid. // nDeformStep : The max deform step. -// flapAngle : The max flap angle. +// flapAngle : The max flap angle. // rotatePostionZ : Rotate postion. // rotatePostionY : Rotate postion. // gridSlice : If dump slice grid. @@ -163,10 +168,10 @@ int sliceAxis = 1; double slicePosition = 13; // ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. int numberOfReferenceCP = 40; -double influencePara = 25.0; +double influencePara = 25.0; // ----------------- Periodic Parameters -------------------------------- // Notice: Rotational periodicity only support rotation along the X axis! @@ -178,9 +183,8 @@ double influencePara = 25.0; which only support one direction. // rotationAngle: The relative angle between two periodic face. which is recorded in degrees. - int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; +double translationLength[] = [0.0, 0.0, 0.0]; double rotationAngle = 0.0; ######################################################################### @@ -192,7 +196,6 @@ double rotationAngle = 0.0; // 2 -- refine structured grid. // maxproc: The number of partition zones that want to be divided into. // numberOfMultifile: The number of partition grid files that want to be dumped out. - int pgridtype = 0; int maxproc = 4; int numberOfMultifile = 1; @@ -201,20 +204,20 @@ int numberOfMultifile = 1; // 0 -- Not. // 1 -- Yes. // blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. int traceMark = 0; int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; +int cellIndexOfMark[] = [185, 30, 1]; -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; //----------------------------------------------------------------------- # File path # //----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). // partition_grid_file: Target partition grid file(PHengLEI type, *.fts). string original_grid_file = "./grid/sphere_mixed.fts"; string partition_grid_file = "./grid/sphere_mixed__4.fts"; @@ -232,11 +235,10 @@ string partition_grid_file = "./grid/sphere_mixed__4.fts"; // 1 -- perfect balance. // maxproc -- perfect imbalance. // 1.05 -- recommended. - int omit_no_bound_bc = 0; int npartmethod = 1; int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; +double parmetisBalance = 1.05; // numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. // 1 -- single level. @@ -248,29 +250,35 @@ int numberOfMultigrid = 1; # Default parameters for CFD simulation # ######################################################################### // maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. // intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; +int intervalStepForce = 100; +int intervalStepRes = 10; // compressible: // 0 -- incompressible flow. // 1 -- compressible flow. (default) int compressible = 1; +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + //----------------------------------------------------------------------- # CFD Control Parameter # //----------------------------------------------------------------------- @@ -281,33 +289,36 @@ int compressible = 1; // 0 -- the nondimensional conditions. // 1 -- the flight conditions. // 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. +// 3 -- the subsonic boundary conditions. (Useless!) // 4 -- the condition that the velocity, temperature and density are given. // 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. // refReNumber: Reynolds number, which is based unit length, unit of 1/m. // refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. // freestream_vibration_temperature: Dimensional freestream vibration temperature. // refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. // height: Fly height, unit of km. // wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. // forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. // TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. // radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary // condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. // Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -int directionMethod = 0; +int directionMethod = 0; double refMachNumber = 0.73; double attackd = 2.79; double angleSlide = 0.00; +int flowInitMethod = 0; int inflowParaType = 0; double refReNumber = 6.5e6; @@ -321,29 +332,27 @@ double freestream_vibration_temperature = 300.00; //double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). //double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. +// The velocity, temperature and density are fixed. //int inflowParaType = 4; //double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; +//double refDimensionalDensity = 1.0e3; -//The velocity, temperature and pressure are fixed. +// The velocity, temperature and pressure are fixed. //int inflowParaType = 5; //double refDimensionalVelocity = 1000.0; //double refDimensionalPressure = 1.0e5; -//The MachNumber, temperature and pressure are fixed. +// The MachNumber, temperature and pressure are fixed. //int inflowParaType = 6; -//double refDimensionalTemperature = 293; +//double refDimensionalTemperature = 293.0; //double refDimensionalPressure = 8886.06; +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + double wallTemperature = -1.0; double radiationCoef = 0.8; @@ -357,41 +366,41 @@ double forceReferenceArea = 1.0; // unit of meter^2. double TorqueRefX = 0.0; // unit of meter. double TorqueRefY = 0.0; // unit of meter. double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. double refMolecularWeight = 28.9644; // unit of g/mol. //----------------------------------------------------------------------- # Spatial Discretisation # //----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* +#************************************************************************ +# Struct Solver * +#************************************************************************ // inviscidSchemeName: Spatial discretisation scheme of struct grid. // Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", // -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". // isWennScheme: If using WENN Scheme of struct grid. -// 0 -- NO. (default) -// 1 -- Yes. +// 0 -- NO. (default) +// 1 -- Yes. // str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3" - +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". string inviscidSchemeName = "roe"; int isWennScheme = 0; -string str_limiter_name = "vanalbada"; +string str_limiter_name = "vanalbada"; -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ // viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. // viscousName: Laminar or tubulent model. // -- "0eq-bl". // -- "1eq-sa". @@ -410,16 +419,16 @@ string str_limiter_name = "vanalbada"; // 3 -- IDDES. // uns_scheme_name: Spatial discretisation scheme of Unstruct grid. // Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", // -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". // uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", // -- "nolim", no limiter. // uns_vis_name: Discretisation method of viscous term. // -- "std", "test", "aver", "new1", "new2". // gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". +// -- "default", "ggcell", "ggnode", "lsq". // ivencat: Variation of vencat limiter. // 0 -- org method, it is independent of grid scale. // 1 -- new method, it is dependent of grid scale. @@ -442,18 +451,18 @@ string str_limiter_name = "vanalbada"; // 3 -- Harten type, which is default used. // roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. // It is used to scale the default Roe entropy fix coefficients. -// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0 +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. -//int viscousType = 0; +//int viscousType = 0; //string viscousName = "Euler"; -//int viscousType = 1; +//int viscousType = 1; //string viscousName = "laminar"; -int viscousType = 3; +int viscousType = 3; string viscousName = "1eq-sa"; -//int viscousType = 4; +//int viscousType = 4; //string viscousName = "2eq-kw-menter-sst"; int DESType = 0; @@ -463,7 +472,7 @@ string uns_limiter_name = "vencat"; string uns_vis_name = "test"; string gradientName = "ggnode"; -int ivencat = 7; +int ivencat = 7; double venkatCoeff = 5.0; int reconmeth = 1; int limitVariables = 0; @@ -475,9 +484,9 @@ double roeEntropyScale = 1.0; double AusmpwPlusLimiter = 1.0; -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ // iunsteady: Steady or unsteady. // 0 -- steady. // 1 -- unsteay. @@ -490,51 +499,57 @@ double AusmpwPlusLimiter = 1.0; // statisticalTimePeriod: Used as time period of statistic analysis. // when the value is negative, time period is treated as infinite. // statisticMethod: Statistic reynolds stress method. -// 0 -- tau = - ^2 -// 1 -- tau = +// 0 -- tau = - ^2 +// 1 -- tau = // min_sub_iter: The min sub iteration of unsteady simulation. // max_sub_iter: The max sub iteration of unsteady simulation. // tol_sub_iter: The tolerance of sub iteration of unsteady simulation. // tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Line LU-SGS. -// 8 -- Matrix LU-SGS. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. // iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. // Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. // CFLStart: Started cfl number. // CFLEnd: End cfl number. // CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. // ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) // swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. // nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. // LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. // ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. +// 0 --Local. +// 1 --Global. // isUseLocalCFL: use variable number of CFL or not. -// 0 -- global unified CFL number. -// 1 -- local CFL number. +// 0 -- global unified CFL number. +// 1 -- local CFL number. // isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. // visl_min: Minimum value of laminar viscosity coefficient. // turbCFLScale: Turbulence model cfl number factor. // codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. // wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. // RKStage: The number of Runge-Kutta step. // lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; +int iunsteady = 0; double physicalTimeStep = 0.01; double physicalTimeStepDimensional = -0.001; int ifStartFromSteadyResults = 0; @@ -543,39 +558,42 @@ int ifStaticsReynoldsStress = 0; int startStatisticStep = 800000; double statisticalTimePeriod = -1.0; int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. int methodOfDualTime = 3; int min_sub_iter = 50; int max_sub_iter = 50; double tol_sub_iter = 0.01; -int tscheme = 4; +int tscheme = 4; int iSimplifyViscousTerm = 1; int ifLocalTimeStep = 0; int isUseLocalCFL = 0; int isUsePreTwall = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; double pMaxForCFL = 0.2; double pMinForCFL = 0.1; double deltaMaxForCFL = 0.2; double magnifyFactorForCFL = 1.1; double reduceFactorForCFL = 0.5; -double ktmax = 1.0e10; +double ktmax = 1.0e10; -int swapDq = 1; +int swapDq = 1; int nLUSGSSweeps = 1; double LUSGSTolerance = 0.01; -int order = 2; +int order = 2; double visl_min = 0.01; double turbCFLScale = 1.0; -double csrv = 2.0; +double csrv = 1.0; double timemax = 1.0e10; double dtsave = -1.0; int maxale = 10; @@ -591,10 +609,9 @@ double lamda[] = [0.5, 1.0]; //int RKStage = 4; //double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- +#************************************************************************ +# File In or Out * +#************************************************************************ // numberOfGridGroups: The number of grid groups. // gridfile: The partitioned Grid file path, using relative path, // which is relative to the working directory. @@ -611,20 +628,18 @@ double lamda[] = [0.5, 1.0]; // aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. // restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. // turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. // wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. // nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. // nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. // nIsComputeWallDist: Whether to compute the wall distance. // 0 -- Compute wall distance. // 1 -- Not compute. -// -// protectionFile0 and protectionFile1 : Two continuation file of the data protection mechanism. -// wall_heatfluxfile : The file to output the MaxHeatFlux of wall. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; int nIsComputeWallDist = 0; int walldistMethod = 1; @@ -632,10 +647,12 @@ int cellMethodOrNodeMethod = 0; string resSaveFile = "results/res.dat"; string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; string aircoeffile = "results/aircoef.dat"; string restartNSFile = "results/flow.dat"; string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; string visualfile = "results/tecflow.plt"; string wall_aircoefile = "results/wall_aircoef.dat"; @@ -645,10 +662,14 @@ string protectionFile0 = "results/flow0.dat"; string protectionFile1 = "results/flow1.dat"; string wall_heatfluxfile = "results/wall_heatflux.dat"; -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; -string jetDefineFile = "bin/jet.hypara"; +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; string sixDofFileName = "results/sixDofInfo.dat"; string derivativeFileName = "results/identify.dat"; @@ -659,7 +680,8 @@ int plotFieldType = 0; // visualfileType: The file type of visualfile. // 0 -- Tecplot binary. // 1 -- Tecplot ASCII. - +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. int visualfileType = 1; // samplefileMode: The dump mode of sample file. @@ -697,21 +719,21 @@ double upperPlotFieldBox[] = [1.0 1.0 1.0]; // -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), // -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), // -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), -// -- transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -- overlap iblank(iblank, 81) - -// -- specific heat ratio(gama, 56) +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). // Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! // Variables order must from small to big. //-----------the optional parameters list for the wall boundary condition---------------- // nVisualWallVariables: The number of visual variables on wall. // visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -Grid Reynolds number on wall(Re_w, 23) +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). int nVisualVariables = 8; int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; @@ -739,16 +761,18 @@ int dumpStandardModel = 0; // 1 -- Real cell where the probe is located. // nProbeVariables: Number of variables want to be dumped for probes monitered. // probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6). +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). // Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! // probeVariables order must from small to big. // probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. int ifSetDataMonitor = 0; -int dataMonitorType = 0; +int dataMonitorType = 0; string probesDefineFile = "bin/probes_XYZ.dat"; //int dataMonitorType = 1; @@ -761,28 +785,26 @@ string probesDefineFile = "bin/probes_XYZ.dat"; int searchCellsMethod = 0; -int nProbeVariables = 7; -int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ // turbInterval: Iteration number of turbulence. // kindOfTurbSource: Kinds of turbulent source. // 0 -- Original. // mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. -// transitionType: transition model type +// transitionType: transition model type // 0 -- none. // 2 -- gama-re-theta. -// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition -// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not - - +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. int turbInterval = 1; int turbOrderStruct = 2; int kindOfTurbSource = 0; int mod_turb_res = 0; -double turb_relax = 1.0; double freeStreamViscosity = 1.0e-3; double muoo = 3.0; double kwoo = 5.0; @@ -790,29 +812,28 @@ int transitionType = 0; double turbIntensity = -1.0; int freeturbIntensitySRModify = 0; double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int prandtlNumberCorrection = 0; +int compressibleCorrection = 0; int transitionMaFix = 1; -# maximum eddy viscosity (myt/my) max. +// maximum eddy viscosity (myt/my) max. double eddyViscosityLimit = 1.0e10; int monitor_vistmax = 0; -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- +#************************************************************************ +# LES Parameter * +#************************************************************************ // iLES: Create LESSolver or not. -// = 1 - Create LESSolver; -// != 1 - not. +// = 1 -- Create LESSolver; +// != 1 -- not. // amplitudeofDisturb: Amplitude of adding disturb. // disturbstep: Unsteady time step or steady iteration of adding random disturb. // iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. // ipraddisturb: Add density and pressure disturb or not. // ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. +// = 0 -- not; +// != 0 -- Add body force. // bodyforce: Body force in source flux of NS equations or not. // utau: friction velocity, using in DNSDisturb. // sgsmodel: subgrid scale model. @@ -820,23 +841,22 @@ int monitor_vistmax = 0; // = "dsmCom"; // = "wale"; // = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. // turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. // smagConstant: constant of smagorinsky model. // waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. +// filterDirection [3]: filter variables in i, j, k direction or not. // averageDirection[3]: average variables in i, j, k direction or not. // isotropicConstant: constant of isotropic part of SGS stress. - int iLES = 0; string sgsmodel = "smagorinsky"; int deltaFunctionType = 2; @@ -852,19 +872,16 @@ double testFilterScale = 2.0; int averageWidth = 1; int monitorNegativeConstant = 0; -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ // dg_high_order: // 0 -- generic order accuracy. // 1 -- high order accuracy. // iapplication: // 0 -- gas model is fixed in the codes. // 1 -- gas model is imported from library files. -// isAdaptiveSolver: isAdaptiveSolver=0 indicates the generic Navier-Stokes solver, -// isAdaptiveSolver>0 indicates the HyFlow self-adaptive solver. -// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. -// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, // nm: Equation number of the physics, but is out of commision now. // 4 -- for 2D. // 5 -- for 3D. @@ -875,7 +892,7 @@ int monitorNegativeConstant = 0; // 2 -- Argon. // 3 -- Nitrogen. // nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . +// 0 -- not used. // 1 -- used. // nDensityModify: The type of densitymodify. // 0 -- not used. @@ -883,26 +900,25 @@ int monitorNegativeConstant = 0; // nchem: // 0 -- without chemical reaction flow. // 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. // 0 -- perfect gas. // 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). // nchemsrc: // 0 -- the source terms are not computed. // 1 -- the source terms are computed. @@ -913,148 +929,151 @@ int monitorNegativeConstant = 0; // 1 -- One-temperature model. // 2 -- Two-temperature model. // 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. // nIdealState: whether take all gas species as ideal gas for gas-mixture process. // 0 -- No. -// 1 -- Yes. -// nTEnergyModel: the method to computing temperature energy model. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. // 0 -- the energy term is computed using the conventional method. // 1 -- the energy term is computed using the polynomial fitting method. // 2 -- the energy term is computed using the piecewise polynomial fitting method. // parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. // The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. // catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// nSurfGradMethod : the method to compute the surface heating ratio. -// 0 -- the gradient of variable is computed with the first-order difference method. -// 1 -- the gradient of variable is computed with the Green-Guass integral method. -// nRapidFlowfield : initialize the flowfield using the rapid engineering method when it is greater than zero. -// nSurfHeatMonitor : To exam the surface heating change or not. 0 is no, 1 is yes. -// nInitPressureStep : the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. -// nDumpCFLNumber : 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. // sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. // sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. // sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. // velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te - -//maxViscous: the maximum of Viscous. -//trTemperatureMin: the minimum value of trTemperature. -//veTemperatureMin: the minimum value of veTemperature. -//densityMin: the minimum value of density. -//tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. // nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nViscosityPeModified: Pe Modified for ViscosityCoef -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nChemcalSourceEsMethod: Modified on ChemcalSource -// 0 -- approximation algorithm 1 (Ori.) -// 1 -- approximation algorithm 2 (New) - +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). // nMaxStepTemperature: the iterative steps of temperature. - -// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs -// 0 -- not used -// 1 -- used - -// nDiagonalModified: Modified on Diagonal -// 0 -- not used -// 1 -- Ori. -// 2 -- new - -//nGradPrimtiveMethod: -// 0 -- Ori. -// 1 -- new +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. // nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. // isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. // nViscosityModel: -// 0 -- Blottner fitting method(N89). -// 1 -- Gupta fitting method(N90). +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). // nContinueModel: The new continue model can switch different computation model. -// 0 -- Not use the new continue model. -// 1 -- use the new continue model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. // nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. // gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing gas without reacting. -// for struct solver mixing two speciesSpeciesA, SpeciesB. -// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. // speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. // initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. // ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. -// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. -// nIterSecondStep : the maximum number of iteration in the second step for the self-adaptive calculation. -// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. -// nEnergyAssembly : the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. -// 0 -- no, -// 1 -- yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. // nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. -// 0 -- the density. -// 1 -- the translation temperature. -// 2 -- the vibration temperature. -// 3 -- the electron temperature. -// 4 -- the pressure. -// 5 -- the mass fraction of oxygen. -// 6 -- the mass fraction of nitrogen. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. // firstStepError : the residual error of the first step iteration for the self-adaptive calculation. // secondStepError : the residual error of the second step iteration for the self-adaptive calculation. // thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. -// useHyflowSetting : Setting for HyFLOW GUI. -// 0 -- PHengLEI -// 1 -- HyFLOW -// nProtectData : Use the continuation file data protection mechanism. -// 0 -- no -// 1 -- yes - +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. int dg_high_order = 0; int iapplication = 0; int isAdaptiveSolver = 0; -int nm = 5; +int nm = 5; int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; int nIterFirstStep = 1000; int nIterSecondStep= 2000; int nIterThirdStep = 2000; @@ -1065,17 +1084,17 @@ double secondStepError = 0.001; double thirdStepError = 0.001; double predictCFLError = 0.1; -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; int nIdealState = 0; int nEnergyRecycle = 1; @@ -1099,12 +1118,12 @@ double sigmaTemperature = 1.0; double sigmaMassFraction = 1.0; double velocitySlipCorrectConstant = 1.0; -double chemicalRelaxCorf = 1.0; +double chemicalRelaxCorf = 1.0; double chemicalSpectrumRadiusCoef = 1.0; double viscousSpectrumRadiusCoef = 1.5; double inviscidSpectrumRadiusCoef = 1.5; -double spectrumRadiusCoef = 0.5; -double staticPressureRelaxCorf = 0.2; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; double maxViscous = 10000.0; double trTemperatureMin = 10.0; @@ -1114,31 +1133,35 @@ double densityMin = 1.0e-8; double densityMinFactor = 0.1; double tAdjustmentFactor = 10.0; double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; -int nDebug = 0; -int nSpeciesLimit = 1; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 1; -int nViscosityPeModified = 0; -int nChemcalSourceModified = 2; -int nChemcalSourceEsMethod = 1; -int nMaxStepTemperature = 5; -int veTemperatureMinModified = 1; -int nDiagonalModified = 0; -int nGradPrimtiveMethod = 1; -int nInviscidFluxModify = 1; -int nQlLimitMethod = 2; -int nSpeciesForWallMethod = 1; -int nDensityForWallMethod = 0; +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; -int nProtectData = 0; -int useHyflowSetting = 0; -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; string speciesName = "O, O2, NO, N, N2"; string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; @@ -1152,16 +1175,16 @@ string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; //string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; //string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; -//string gasfile = "Pa"; +//string gasfile = "Pa"; //string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; -//string gasfile = "Combustion-12"; +//string gasfile = "Combustion-12"; //string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; //string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; +//string speciesName = "SpeciesA, SpeciesB"; //string initMassFraction = "1.0, 0.0"; int nSutherland = 0; double gamaSpeciesA = 1.4; @@ -1173,9 +1196,17 @@ double molecularWeightSpeciesB = 30.0; //string speciesName = "O2, N2"; //string initMassFraction = "1.0, 0.0"; +int nFraction = 0; int nContinueModel = 0; int nChemicalFlowStep = 0; int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; ######################################################################### // Multi-Grid parameters. @@ -1196,7 +1227,6 @@ int ifStartFromPerfectGasResults = 0; // 1 -- zero order. // 2 -- first-order. (default) // mgCorrectionLimit: Multi-grid correction limit. - int nMGLevel = 1; int MGCoarsestIteration = 1; int MGPreIteration = 1; @@ -1218,20 +1248,20 @@ int ismooth_turb = 0; int SAProductType = 2; // ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; -######################################################################### -# High Order Struct Solver # -######################################################################### +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ // isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. // SolverStructOrder: Spatial discretisation order of NS equations with struct grid. // <= 2 -- finite volume method. // >= 3 -- finite difference order. (to be completed) @@ -1273,30 +1303,48 @@ int allReduceStep = 1; // codeOfOversetGrid: Overlapping(overset) grid or not. // 0 -- NON-overlapping grid. // 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation +// oversetInterpolationMethod: the method of overset interpolation while field simulation. // 0 -- set the acceptor cell value by donor cell value. // 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 0; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; -int outPutOversetVisualization = 0; - -int numberOfMovingBodies = 2; +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; // ----------------- ALE configuration ------------------------------ int codeOfAleModel = 0; @@ -1306,36 +1354,42 @@ double referenceLength = 1.0; double referenceVelocity = 1.0; double referenceDensity = 1.0; -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. int methodForKineticEquation = 0; double relaxParameterOfKinetic = 1.0; -######################################################################### -# motive information # -######################################################################### +#************************************************************************ +# motive information * +#************************************************************************ int numberOfMovingBodies = 1; ############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. // -1 given motion partten. // 0 still. // 1 six DOF motion. @@ -1346,51 +1400,68 @@ double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 // 14 forced pitch motion. // 15 forced yaw motion. // 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//direction of rotation +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. // 1 -- clockwise from the point of view along the positive x axis. // -1 -- anticlockwise from the point of view along the positive x axis. -int direction_0 = -1; -double rotateFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; +// post indentify. +int integralOrder = 4; // ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; +//@int inflowParaType = 0; //@double refReNumber = 6.5e6; //@double refDimensionalTemperature = 288.15; //@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; //@double refDimensionalVelocity = 0; //@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ int isPlotVolumeField = 0; +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; -######################################################################### -# Incompressible Parameter # -######################################################################### +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ int isSolveEnergyEquation = 0; int isSolveTurbEquation = 0; -int isSolveSpeciesEquation = 0; - +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/grid_para.hypara b/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/grid_para.hypara index 10ea050..64f2ea1 100644 --- a/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/grid_para.hypara +++ b/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/grid_para.hypara @@ -4,9 +4,12 @@ // gridtype: Grid type for generation, conversion, reconstruction, merging. // 0 -- Unstructured grid. // 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. // from_gtype: Type of grid data type in grid conversion process. // -1 -- MULTI_TYPE. // 1 -- PHengLEI, *.fts. @@ -18,7 +21,9 @@ // 7 -- Hybrid, include both of unstructured and structured grid, *.fts. // 8 -- GMSH, *.msh. int gridtype = 1; -int axisup = 1; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; int from_gtype = 2; ######################################################################### diff --git a/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/key.hypara b/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/key.hypara index 06a8b01..82ad0a8 100644 --- a/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/key.hypara +++ b/X01_ThreeD_SEEBALR_Euler_Struct_8CPU/bin/key.hypara @@ -42,15 +42,9 @@ string parafilename = "./bin/cfd_para_supersonic.hypara"; //int nsimutask = 5; //string parafilename = "./bin/overset_grid_view.hypara"; -//int nsimutask = 13; -//string parafilename = "./bin/lbm_para.hypara"; - //int nsimutask = 14; //string parafilename = "./bin/integrative_solver.hypara"; -//int nsimutask = 15; -//string parafilename = "./bin/gridcheck_solver.hypara"; - //int nsimutask = 99; //string parafilename = "./bin/post_processing.hypara"; diff --git a/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/cfd_para.hypara b/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/cfd_para.hypara index c344658..f903a5a 100644 --- a/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/cfd_para.hypara +++ b/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/cfd_para.hypara @@ -8,23 +8,24 @@ // Platform for Hybrid Engineering Simulation of Flows + // China Aerodynamics Research and Development Center + // (C) Copyright, Since 2010 + +// PHengLEI 2212 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ########################################################################### # Default parameters for Grid conversion # ########################################################################### // gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// 7 -- Grid type change, convert structured grid to unstructured grid. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. // multiblock: Multi-block grid or not, only for structured grid conversion. // 0 -- Not. // 1 -- Yes. @@ -46,19 +47,24 @@ int gridobj = 1; int multiblock = 0; int iadapt = 0; int SymmetryFaceVector = 1; - int gridReorder = 0; int faceReorderMethod = 0; -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; // omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". // 0 -- Interface. (default) // 1 -- Physical boundary condition, used in Hybrid solver. int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; //----------------------------------------------------------------------- # Grid data type # @@ -87,10 +93,9 @@ int dumpOldGrid = 0; // from_gfile: path of original data file for unstructure grid convert from. // out_gfile: path of target file for grid convert to, *.fts type of file usually. int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; // ----------------- some advanced choices ------------------------------ // iunsteady: The Grid is for unsteady simulation or not. @@ -103,9 +108,9 @@ int fileformat = 0; // Parameters for hybrid solver. // mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; // Some parameters for structured overlapping grid. int codeOfDigHoles = 1; @@ -119,31 +124,31 @@ string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; // 0 -- Not. (default) // 1 -- Yes. // geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. // exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. // projectOrgPoint: If the original wall points need to be projected or not. -int anisoRefine = 0; -int geometryUnit = 1; -int isProject = 0; -int readDist = 0; -int isDeform = 0; +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; int exclusiveCase = 0; int projectOrgPoint = 0; string geometryFileName = "./grid/jsm.igs"; // ----------------- Grid Deform Parameters ----------------------------- // deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. +// 1 -- SPRING. +// 2 -- RBF. // stationalGridFile: Original grid file. // visualFileName : The visualization file path of deform grid. // nDeformStep : The max deform step. -// flapAngle : The max flap angle. +// flapAngle : The max flap angle. // rotatePostionZ : Rotate postion. // rotatePostionY : Rotate postion. // gridSlice : If dump slice grid. @@ -163,10 +168,10 @@ int sliceAxis = 1; double slicePosition = 13; // ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. int numberOfReferenceCP = 40; -double influencePara = 25.0; +double influencePara = 25.0; // ----------------- Periodic Parameters -------------------------------- // Notice: Rotational periodicity only support rotation along the X axis! @@ -178,9 +183,8 @@ double influencePara = 25.0; which only support one direction. // rotationAngle: The relative angle between two periodic face. which is recorded in degrees. - int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; +double translationLength[] = [0.0, 0.0, 0.0]; double rotationAngle = 0.0; ######################################################################### @@ -192,7 +196,6 @@ double rotationAngle = 0.0; // 2 -- refine structured grid. // maxproc: The number of partition zones that want to be divided into. // numberOfMultifile: The number of partition grid files that want to be dumped out. - int pgridtype = 0; int maxproc = 4; int numberOfMultifile = 1; @@ -201,20 +204,20 @@ int numberOfMultifile = 1; // 0 -- Not. // 1 -- Yes. // blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. int traceMark = 0; int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; +int cellIndexOfMark[] = [185, 30, 1]; -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; //----------------------------------------------------------------------- # File path # //----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). // partition_grid_file: Target partition grid file(PHengLEI type, *.fts). string original_grid_file = "./grid/sphere_mixed.fts"; string partition_grid_file = "./grid/sphere_mixed__4.fts"; @@ -232,11 +235,10 @@ string partition_grid_file = "./grid/sphere_mixed__4.fts"; // 1 -- perfect balance. // maxproc -- perfect imbalance. // 1.05 -- recommended. - int omit_no_bound_bc = 0; int npartmethod = 1; int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; +double parmetisBalance = 1.05; // numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. // 1 -- single level. @@ -248,29 +250,35 @@ int numberOfMultigrid = 1; # Default parameters for CFD simulation # ######################################################################### // maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. // intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; +int intervalStepForce = 100; +int intervalStepRes = 10; // compressible: // 0 -- incompressible flow. // 1 -- compressible flow. (default) int compressible = 1; +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + //----------------------------------------------------------------------- # CFD Control Parameter # //----------------------------------------------------------------------- @@ -281,33 +289,36 @@ int compressible = 1; // 0 -- the nondimensional conditions. // 1 -- the flight conditions. // 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. +// 3 -- the subsonic boundary conditions. (Useless!) // 4 -- the condition that the velocity, temperature and density are given. // 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. // refReNumber: Reynolds number, which is based unit length, unit of 1/m. // refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. // freestream_vibration_temperature: Dimensional freestream vibration temperature. // refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. // height: Fly height, unit of km. // wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. // forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. // TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. // radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary // condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. // Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -int directionMethod = 0; +int directionMethod = 0; double refMachNumber = 0.73; double attackd = 2.79; double angleSlide = 0.00; +int flowInitMethod = 0; int inflowParaType = 0; double refReNumber = 6.5e6; @@ -321,29 +332,27 @@ double freestream_vibration_temperature = 300.00; //double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). //double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. +// The velocity, temperature and density are fixed. //int inflowParaType = 4; //double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; +//double refDimensionalDensity = 1.0e3; -//The velocity, temperature and pressure are fixed. +// The velocity, temperature and pressure are fixed. //int inflowParaType = 5; //double refDimensionalVelocity = 1000.0; //double refDimensionalPressure = 1.0e5; -//The MachNumber, temperature and pressure are fixed. +// The MachNumber, temperature and pressure are fixed. //int inflowParaType = 6; -//double refDimensionalTemperature = 293; +//double refDimensionalTemperature = 293.0; //double refDimensionalPressure = 8886.06; +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + double wallTemperature = -1.0; double radiationCoef = 0.8; @@ -357,41 +366,41 @@ double forceReferenceArea = 1.0; // unit of meter^2. double TorqueRefX = 0.0; // unit of meter. double TorqueRefY = 0.0; // unit of meter. double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. double refMolecularWeight = 28.9644; // unit of g/mol. //----------------------------------------------------------------------- # Spatial Discretisation # //----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* +#************************************************************************ +# Struct Solver * +#************************************************************************ // inviscidSchemeName: Spatial discretisation scheme of struct grid. // Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", // -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". // isWennScheme: If using WENN Scheme of struct grid. -// 0 -- NO. (default) -// 1 -- Yes. +// 0 -- NO. (default) +// 1 -- Yes. // str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3" - +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". string inviscidSchemeName = "roe"; int isWennScheme = 0; -string str_limiter_name = "vanalbada"; +string str_limiter_name = "vanalbada"; -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ // viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. // viscousName: Laminar or tubulent model. // -- "0eq-bl". // -- "1eq-sa". @@ -410,16 +419,16 @@ string str_limiter_name = "vanalbada"; // 3 -- IDDES. // uns_scheme_name: Spatial discretisation scheme of Unstruct grid. // Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", // -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". // uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", // -- "nolim", no limiter. // uns_vis_name: Discretisation method of viscous term. // -- "std", "test", "aver", "new1", "new2". // gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". +// -- "default", "ggcell", "ggnode", "lsq". // ivencat: Variation of vencat limiter. // 0 -- org method, it is independent of grid scale. // 1 -- new method, it is dependent of grid scale. @@ -442,18 +451,18 @@ string str_limiter_name = "vanalbada"; // 3 -- Harten type, which is default used. // roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. // It is used to scale the default Roe entropy fix coefficients. -// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0 +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. -//int viscousType = 0; +//int viscousType = 0; //string viscousName = "Euler"; -//int viscousType = 1; +//int viscousType = 1; //string viscousName = "laminar"; -int viscousType = 3; +int viscousType = 3; string viscousName = "1eq-sa"; -//int viscousType = 4; +//int viscousType = 4; //string viscousName = "2eq-kw-menter-sst"; int DESType = 0; @@ -463,7 +472,7 @@ string uns_limiter_name = "vencat"; string uns_vis_name = "test"; string gradientName = "ggnode"; -int ivencat = 7; +int ivencat = 7; double venkatCoeff = 5.0; int reconmeth = 1; int limitVariables = 0; @@ -475,9 +484,9 @@ double roeEntropyScale = 1.0; double AusmpwPlusLimiter = 1.0; -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ // iunsteady: Steady or unsteady. // 0 -- steady. // 1 -- unsteay. @@ -490,51 +499,57 @@ double AusmpwPlusLimiter = 1.0; // statisticalTimePeriod: Used as time period of statistic analysis. // when the value is negative, time period is treated as infinite. // statisticMethod: Statistic reynolds stress method. -// 0 -- tau = - ^2 -// 1 -- tau = +// 0 -- tau = - ^2 +// 1 -- tau = // min_sub_iter: The min sub iteration of unsteady simulation. // max_sub_iter: The max sub iteration of unsteady simulation. // tol_sub_iter: The tolerance of sub iteration of unsteady simulation. // tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Line LU-SGS. -// 8 -- Matrix LU-SGS. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. // iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. // Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. // CFLStart: Started cfl number. // CFLEnd: End cfl number. // CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. // ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) // swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. // nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. // LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. // ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. +// 0 --Local. +// 1 --Global. // isUseLocalCFL: use variable number of CFL or not. -// 0 -- global unified CFL number. -// 1 -- local CFL number. +// 0 -- global unified CFL number. +// 1 -- local CFL number. // isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. // visl_min: Minimum value of laminar viscosity coefficient. // turbCFLScale: Turbulence model cfl number factor. // codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. // wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. // RKStage: The number of Runge-Kutta step. // lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; +int iunsteady = 0; double physicalTimeStep = 0.01; double physicalTimeStepDimensional = -0.001; int ifStartFromSteadyResults = 0; @@ -543,39 +558,42 @@ int ifStaticsReynoldsStress = 0; int startStatisticStep = 800000; double statisticalTimePeriod = -1.0; int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. int methodOfDualTime = 3; int min_sub_iter = 50; int max_sub_iter = 50; double tol_sub_iter = 0.01; -int tscheme = 4; +int tscheme = 4; int iSimplifyViscousTerm = 1; int ifLocalTimeStep = 0; int isUseLocalCFL = 0; int isUsePreTwall = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; double pMaxForCFL = 0.2; double pMinForCFL = 0.1; double deltaMaxForCFL = 0.2; double magnifyFactorForCFL = 1.1; double reduceFactorForCFL = 0.5; -double ktmax = 1.0e10; +double ktmax = 1.0e10; -int swapDq = 1; +int swapDq = 1; int nLUSGSSweeps = 1; double LUSGSTolerance = 0.01; -int order = 2; +int order = 2; double visl_min = 0.01; double turbCFLScale = 1.0; -double csrv = 2.0; +double csrv = 1.0; double timemax = 1.0e10; double dtsave = -1.0; int maxale = 10; @@ -591,10 +609,9 @@ double lamda[] = [0.5, 1.0]; //int RKStage = 4; //double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- +#************************************************************************ +# File In or Out * +#************************************************************************ // numberOfGridGroups: The number of grid groups. // gridfile: The partitioned Grid file path, using relative path, // which is relative to the working directory. @@ -611,20 +628,18 @@ double lamda[] = [0.5, 1.0]; // aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. // restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. // turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. // wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. // nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. // nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. // nIsComputeWallDist: Whether to compute the wall distance. // 0 -- Compute wall distance. // 1 -- Not compute. -// -// protectionFile0 and protectionFile1 : Two continuation file of the data protection mechanism. -// wall_heatfluxfile : The file to output the MaxHeatFlux of wall. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; int nIsComputeWallDist = 0; int walldistMethod = 1; @@ -632,10 +647,12 @@ int cellMethodOrNodeMethod = 0; string resSaveFile = "results/res.dat"; string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; string aircoeffile = "results/aircoef.dat"; string restartNSFile = "results/flow.dat"; string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; string visualfile = "results/tecflow.plt"; string wall_aircoefile = "results/wall_aircoef.dat"; @@ -645,10 +662,14 @@ string protectionFile0 = "results/flow0.dat"; string protectionFile1 = "results/flow1.dat"; string wall_heatfluxfile = "results/wall_heatflux.dat"; -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; -string jetDefineFile = "bin/jet.hypara"; +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; string sixDofFileName = "results/sixDofInfo.dat"; string derivativeFileName = "results/identify.dat"; @@ -659,7 +680,8 @@ int plotFieldType = 0; // visualfileType: The file type of visualfile. // 0 -- Tecplot binary. // 1 -- Tecplot ASCII. - +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. int visualfileType = 1; // samplefileMode: The dump mode of sample file. @@ -697,21 +719,21 @@ double upperPlotFieldBox[] = [1.0 1.0 1.0]; // -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), // -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), // -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), -// -- transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -- overlap iblank(iblank, 81) - -// -- specific heat ratio(gama, 56) +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). // Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! // Variables order must from small to big. //-----------the optional parameters list for the wall boundary condition---------------- // nVisualWallVariables: The number of visual variables on wall. // visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -Grid Reynolds number on wall(Re_w, 23) +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). int nVisualVariables = 8; int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; @@ -739,16 +761,18 @@ int dumpStandardModel = 0; // 1 -- Real cell where the probe is located. // nProbeVariables: Number of variables want to be dumped for probes monitered. // probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6). +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). // Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! // probeVariables order must from small to big. // probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. int ifSetDataMonitor = 0; -int dataMonitorType = 0; +int dataMonitorType = 0; string probesDefineFile = "bin/probes_XYZ.dat"; //int dataMonitorType = 1; @@ -761,28 +785,26 @@ string probesDefineFile = "bin/probes_XYZ.dat"; int searchCellsMethod = 0; -int nProbeVariables = 7; -int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ // turbInterval: Iteration number of turbulence. // kindOfTurbSource: Kinds of turbulent source. // 0 -- Original. // mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. -// transitionType: transition model type +// transitionType: transition model type // 0 -- none. // 2 -- gama-re-theta. -// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition -// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not - - +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. int turbInterval = 1; int turbOrderStruct = 2; int kindOfTurbSource = 0; int mod_turb_res = 0; -double turb_relax = 1.0; double freeStreamViscosity = 1.0e-3; double muoo = 3.0; double kwoo = 5.0; @@ -790,29 +812,28 @@ int transitionType = 0; double turbIntensity = -1.0; int freeturbIntensitySRModify = 0; double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int prandtlNumberCorrection = 0; +int compressibleCorrection = 0; int transitionMaFix = 1; -# maximum eddy viscosity (myt/my) max. +// maximum eddy viscosity (myt/my) max. double eddyViscosityLimit = 1.0e10; int monitor_vistmax = 0; -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- +#************************************************************************ +# LES Parameter * +#************************************************************************ // iLES: Create LESSolver or not. -// = 1 - Create LESSolver; -// != 1 - not. +// = 1 -- Create LESSolver; +// != 1 -- not. // amplitudeofDisturb: Amplitude of adding disturb. // disturbstep: Unsteady time step or steady iteration of adding random disturb. // iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. // ipraddisturb: Add density and pressure disturb or not. // ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. +// = 0 -- not; +// != 0 -- Add body force. // bodyforce: Body force in source flux of NS equations or not. // utau: friction velocity, using in DNSDisturb. // sgsmodel: subgrid scale model. @@ -820,23 +841,22 @@ int monitor_vistmax = 0; // = "dsmCom"; // = "wale"; // = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. // turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. // smagConstant: constant of smagorinsky model. // waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. +// filterDirection [3]: filter variables in i, j, k direction or not. // averageDirection[3]: average variables in i, j, k direction or not. // isotropicConstant: constant of isotropic part of SGS stress. - int iLES = 0; string sgsmodel = "smagorinsky"; int deltaFunctionType = 2; @@ -852,19 +872,16 @@ double testFilterScale = 2.0; int averageWidth = 1; int monitorNegativeConstant = 0; -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ // dg_high_order: // 0 -- generic order accuracy. // 1 -- high order accuracy. // iapplication: // 0 -- gas model is fixed in the codes. // 1 -- gas model is imported from library files. -// isAdaptiveSolver: isAdaptiveSolver=0 indicates the generic Navier-Stokes solver, -// isAdaptiveSolver>0 indicates the HyFlow self-adaptive solver. -// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. -// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, // nm: Equation number of the physics, but is out of commision now. // 4 -- for 2D. // 5 -- for 3D. @@ -875,7 +892,7 @@ int monitorNegativeConstant = 0; // 2 -- Argon. // 3 -- Nitrogen. // nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . +// 0 -- not used. // 1 -- used. // nDensityModify: The type of densitymodify. // 0 -- not used. @@ -883,26 +900,25 @@ int monitorNegativeConstant = 0; // nchem: // 0 -- without chemical reaction flow. // 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. // 0 -- perfect gas. // 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). // nchemsrc: // 0 -- the source terms are not computed. // 1 -- the source terms are computed. @@ -913,148 +929,151 @@ int monitorNegativeConstant = 0; // 1 -- One-temperature model. // 2 -- Two-temperature model. // 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. // nIdealState: whether take all gas species as ideal gas for gas-mixture process. // 0 -- No. -// 1 -- Yes. -// nTEnergyModel: the method to computing temperature energy model. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. // 0 -- the energy term is computed using the conventional method. // 1 -- the energy term is computed using the polynomial fitting method. // 2 -- the energy term is computed using the piecewise polynomial fitting method. // parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. // The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. // catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// nSurfGradMethod : the method to compute the surface heating ratio. -// 0 -- the gradient of variable is computed with the first-order difference method. -// 1 -- the gradient of variable is computed with the Green-Guass integral method. -// nRapidFlowfield : initialize the flowfield using the rapid engineering method when it is greater than zero. -// nSurfHeatMonitor : To exam the surface heating change or not. 0 is no, 1 is yes. -// nInitPressureStep : the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. -// nDumpCFLNumber : 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. // sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. // sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. // sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. // velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te - -//maxViscous: the maximum of Viscous. -//trTemperatureMin: the minimum value of trTemperature. -//veTemperatureMin: the minimum value of veTemperature. -//densityMin: the minimum value of density. -//tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. // nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nViscosityPeModified: Pe Modified for ViscosityCoef -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nChemcalSourceEsMethod: Modified on ChemcalSource -// 0 -- approximation algorithm 1 (Ori.) -// 1 -- approximation algorithm 2 (New) - +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). // nMaxStepTemperature: the iterative steps of temperature. - -// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs -// 0 -- not used -// 1 -- used - -// nDiagonalModified: Modified on Diagonal -// 0 -- not used -// 1 -- Ori. -// 2 -- new - -//nGradPrimtiveMethod: -// 0 -- Ori. -// 1 -- new +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. // nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. // isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. // nViscosityModel: -// 0 -- Blottner fitting method(N89). -// 1 -- Gupta fitting method(N90). +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). // nContinueModel: The new continue model can switch different computation model. -// 0 -- Not use the new continue model. -// 1 -- use the new continue model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. // nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. // gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing gas without reacting. -// for struct solver mixing two speciesSpeciesA, SpeciesB. -// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. // speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. // initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. // ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. -// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. -// nIterSecondStep : the maximum number of iteration in the second step for the self-adaptive calculation. -// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. -// nEnergyAssembly : the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. -// 0 -- no, -// 1 -- yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. // nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. -// 0 -- the density. -// 1 -- the translation temperature. -// 2 -- the vibration temperature. -// 3 -- the electron temperature. -// 4 -- the pressure. -// 5 -- the mass fraction of oxygen. -// 6 -- the mass fraction of nitrogen. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. // firstStepError : the residual error of the first step iteration for the self-adaptive calculation. // secondStepError : the residual error of the second step iteration for the self-adaptive calculation. // thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. -// useHyflowSetting : Setting for HyFLOW GUI. -// 0 -- PHengLEI -// 1 -- HyFLOW -// nProtectData : Use the continuation file data protection mechanism. -// 0 -- no -// 1 -- yes - +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. int dg_high_order = 0; int iapplication = 0; int isAdaptiveSolver = 0; -int nm = 5; +int nm = 5; int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; int nIterFirstStep = 1000; int nIterSecondStep= 2000; int nIterThirdStep = 2000; @@ -1065,17 +1084,17 @@ double secondStepError = 0.001; double thirdStepError = 0.001; double predictCFLError = 0.1; -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; int nIdealState = 0; int nEnergyRecycle = 1; @@ -1099,12 +1118,12 @@ double sigmaTemperature = 1.0; double sigmaMassFraction = 1.0; double velocitySlipCorrectConstant = 1.0; -double chemicalRelaxCorf = 1.0; +double chemicalRelaxCorf = 1.0; double chemicalSpectrumRadiusCoef = 1.0; double viscousSpectrumRadiusCoef = 1.5; double inviscidSpectrumRadiusCoef = 1.5; -double spectrumRadiusCoef = 0.5; -double staticPressureRelaxCorf = 0.2; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; double maxViscous = 10000.0; double trTemperatureMin = 10.0; @@ -1114,31 +1133,35 @@ double densityMin = 1.0e-8; double densityMinFactor = 0.1; double tAdjustmentFactor = 10.0; double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; -int nDebug = 0; -int nSpeciesLimit = 1; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 1; -int nViscosityPeModified = 0; -int nChemcalSourceModified = 2; -int nChemcalSourceEsMethod = 1; -int nMaxStepTemperature = 5; -int veTemperatureMinModified = 1; -int nDiagonalModified = 0; -int nGradPrimtiveMethod = 1; -int nInviscidFluxModify = 1; -int nQlLimitMethod = 2; -int nSpeciesForWallMethod = 1; -int nDensityForWallMethod = 0; +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; -int nProtectData = 0; -int useHyflowSetting = 0; -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; string speciesName = "O, O2, NO, N, N2"; string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; @@ -1152,16 +1175,16 @@ string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; //string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; //string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; -//string gasfile = "Pa"; +//string gasfile = "Pa"; //string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; -//string gasfile = "Combustion-12"; +//string gasfile = "Combustion-12"; //string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; //string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; +//string speciesName = "SpeciesA, SpeciesB"; //string initMassFraction = "1.0, 0.0"; int nSutherland = 0; double gamaSpeciesA = 1.4; @@ -1173,9 +1196,17 @@ double molecularWeightSpeciesB = 30.0; //string speciesName = "O2, N2"; //string initMassFraction = "1.0, 0.0"; +int nFraction = 0; int nContinueModel = 0; int nChemicalFlowStep = 0; int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; ######################################################################### // Multi-Grid parameters. @@ -1196,7 +1227,6 @@ int ifStartFromPerfectGasResults = 0; // 1 -- zero order. // 2 -- first-order. (default) // mgCorrectionLimit: Multi-grid correction limit. - int nMGLevel = 1; int MGCoarsestIteration = 1; int MGPreIteration = 1; @@ -1218,20 +1248,20 @@ int ismooth_turb = 0; int SAProductType = 2; // ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; -######################################################################### -# High Order Struct Solver # -######################################################################### +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ // isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. // SolverStructOrder: Spatial discretisation order of NS equations with struct grid. // <= 2 -- finite volume method. // >= 3 -- finite difference order. (to be completed) @@ -1273,30 +1303,48 @@ int allReduceStep = 1; // codeOfOversetGrid: Overlapping(overset) grid or not. // 0 -- NON-overlapping grid. // 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation +// oversetInterpolationMethod: the method of overset interpolation while field simulation. // 0 -- set the acceptor cell value by donor cell value. // 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 0; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; -int outPutOversetVisualization = 0; - -int numberOfMovingBodies = 2; +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; // ----------------- ALE configuration ------------------------------ int codeOfAleModel = 0; @@ -1306,36 +1354,42 @@ double referenceLength = 1.0; double referenceVelocity = 1.0; double referenceDensity = 1.0; -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. int methodForKineticEquation = 0; double relaxParameterOfKinetic = 1.0; -######################################################################### -# motive information # -######################################################################### +#************************************************************************ +# motive information * +#************************************************************************ int numberOfMovingBodies = 1; ############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. // -1 given motion partten. // 0 still. // 1 six DOF motion. @@ -1346,51 +1400,68 @@ double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 // 14 forced pitch motion. // 15 forced yaw motion. // 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//direction of rotation +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. // 1 -- clockwise from the point of view along the positive x axis. // -1 -- anticlockwise from the point of view along the positive x axis. -int direction_0 = -1; -double rotateFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; +// post indentify. +int integralOrder = 4; // ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; +//@int inflowParaType = 0; //@double refReNumber = 6.5e6; //@double refDimensionalTemperature = 288.15; //@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; //@double refDimensionalVelocity = 0; //@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ int isPlotVolumeField = 0; +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; -######################################################################### -# Incompressible Parameter # -######################################################################### +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ int isSolveEnergyEquation = 0; int isSolveTurbEquation = 0; -int isSolveSpeciesEquation = 0; - +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/grid_para.hypara b/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/grid_para.hypara index 05b08b9..380a737 100644 --- a/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/grid_para.hypara +++ b/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/bin/grid_para.hypara @@ -4,9 +4,12 @@ // gridtype: Grid type for generation, conversion, reconstruction, merging. // 0 -- Unstructured grid. // 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. // from_gtype: Type of grid data type in grid conversion process. // -1 -- MULTI_TYPE. // 1 -- PHengLEI, *.fts. @@ -18,7 +21,9 @@ // 7 -- Hybrid, include both of unstructured and structured grid, *.fts. // 8 -- GMSH, *.msh. int gridtype = 1; -int axisup = 1; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; int from_gtype = 3; ######################################################################### diff --git a/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/二维结构30P30N点监控算例测试说明.pdf b/Z01_TwoD_30p30n_ProbesMonitor_SA_Struct_4CPU/二维结构30P30N点监控算例测试说明.pdf index 1682b278c0cf11584f069035ddcb0ecd22db7de6..6a556394b2ba3833ec3d11ce1812e0e36a8c2e32 100644 GIT binary patch delta 432613 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

7EH3PSwF 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ℑ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 )v^ii6m%Y zz6@z>eSj8&1ExM)*2x(a72vhR|t|W1C;xx8nXQa*S!E`?1-#X8bHdcOb||6{ zRMo|QM=oD@dg7+)YCV>ZUs>>S%ev;DM3lu3v9t!UG(nWXj}V@Yf#T;3Tz%G`7Dd8| z7E1&(KnUwBn{#O|p)iUiLF$P%#wMmQHX#RFYa+ihFjmGGE6Z@illTe}JAa3g7-LDn zF?QiyjIprtQ;e~WHpV&}u!H^r#LjO!G6!S%wr?c2mEEFlT zJCXO4f<)1k3r^!9)Uc6#d^%nBiiE;?b7PkGp55Uk0MEf1M8q<0Hb=wMB@tMr5%D4> zqIu@-85q}3Lgt0B^J08^L6|maFnhg}wYfPwZ>VWaRtJwAvn)Tk=6||tA4qzuS2U{w zagV5I`Mtd{zsB3C`BO)CT#=_>ZcyLX37^o_6vz4{vImim1^n`oT z=hh$%75hkuz2-W_nP4bh!tW z=)c6Nm?)GoLaFxp1b=V%QJpv>0_@2v6^rFv;!*Jfky6AFk*ver2Jw(+5?kKHV#}LY zYl8~n`cB(pL|G-Wn&nnV>+~4x4 zLgufN#xg^#&sDwDI~X|!BfqM^NuTAvcB`890=`|o-20b0`hS;wet%_J5B`;|LV2PO z^FeMuJV;${mF$i`MBjSd!0Jh&&@dqMjClh2DN{=(S0gTqCR>d>PBVBrSdpvObGdqr zuA%~MD8}^}pn)gAkB~(0JmjaR2|%47pa^!11_ea25if;Y8a&Z-f%ky+bn6~E@L%6U z2mW-JzUJaRfPeUF_q=uSdx+*4FnIAE=5M%%A^vcNnQ;&QH{8P$@1Nm~dwAkHVvXr) z(-Oi$aFE_c2%RVp-9(KTB9;;>iS@)5VkdDkv7dOUzH#f0k>$(RuDa!pp1xgsli3ZM z)J5~{%-p((VBjaHsC`*g&Gu2Ng5?em&x^q&!#C~ObARo1g9D$rtx~*UyUVw11!?Z> zUjaX{b!)=%n%lOoS+o5%>be-~Oy~27*mXqVjfrYu;#KUmTPPIxSJBd36;}BPRGqou z>p;OM`B#kVFT429u7^F~iO0IirJ~*{-L2B!D%PVhZ+vbh%R z|A4N37}cmR!CePzHGf(vb-oE3;LEVG0zK_^xC74@3tdz5VeN|@9c5B!UDUL|$~)+` zpOrhxd02tNZN^_G;=}_N&Qph}_X#(|kG=IJtA7&UB@Mh31*;UWGPos3elGyN=Lai& zTYTibE^wO*++zo~+Q9(^+{AzbB)E|T^fhtN5wFKb;#54IlGbxOIg$&rHV-jIy+_n0 zY7mx<2^_r;LaA}tA1I<+dQLJP%adK@e$pRv!Zymh)eqZw68!d>ukY^f*>Pm+wTJig zFMqi8v6b_7E>1;;b}m`8bACL#cpLTp$bDzGZ~Es4SC8EH!p?o?K6}OW-P<0yX8waW zE*RMT$jYl9+FFIb`v&-9w^OeX0iyF+ne*6zc?>M5vx=v~LwaNo2#isaC+%Fo!4kEp zarh74dFqW9`8QsKh~-7^gwuf`@(15bfPXI*?;^LS=H$dcp+DYalC_-Z&(@OEYpNqL zRGs>lYAr~sDx=JB0>+Y}T^Xs69Gsq_F&^ zOvK_(R2E)S8`(7!t=@9x&V!XM@{?HVnrqjpnc;f3oLw?2zH-3E7}6IO(w101GkX zxWfwI?>a%7AhW5B!(TRz7H$jQothYTRr!e`1OT?Ohzrp!U;$C`SI3WkW9k>=uHoh| zI7Pkx$s-4v>%lj!p}z3;)Mp6z7Ukw%Y9aOS@GZm(|Fd~NJhJM-JJd0HD}QN5`VoY~ z70pjkryw@iiGg}>h&(`knLJIJ$VW_1z-|T<{5b8b&BmI}QfScFsrQaiB;@I}67KPd zk_!01yB`f#;vY=l%Hnweb9{^diJUar=_~fbAHh0=MJy@@uGl2R#3I zd_I8BUkT4Yf!jgcZbhbn?L`ElA}NBPH_`VIONhGyvd%U!d?aFXG9u5*iQ< zB&5$IF<5MYquGn?c7JA!=;$Raq$Bm4@L2KoQ*c=ce)U0t}Y`K*+P zMb&Jut3P4|kCBYS&MEYLVrI7L3VCgIG49u5+4+smCl*XSI)AiSHEWtpUpR-{GWBTR zaEjA3dvalo+_Io>{fDKB!S4Ybk-D?E~Y|Q)U2Owl_ zBmS{I_vXPbYy;aiZXB%DmJFs+h1p#Jb?@LoJFwHV9#soV3!tL_1`C6Q6?ZHd`n0-Y zWYy{wD+aqdR(~sjz2=d{eW^qZLupBJHhaCcZXI#+#_O(Q3@A-bKqz4_8Q{TiDqRjJ zICL5fe(L2?0YYmW9m7-j2xJp80A|MU%2TN4QCb2o%0*K`VDe9s;g*66A!n$!e+7~x zf~3DvnE}XhrQ1oGzCCa2U_2LbNkJ{bg`&D7cjZ*p>3;zGt3yJ@7U_iyJX4K2qMpJ2 zH?2yo!Zz)3wG`nl1#hbHrRz&8ugF?@&NNS60^5MhczyH(dbK9Sb0%LQ>kWHZU!o%r z|IF1D6E!ufcdqIHnr2l8XM_K}mt!nb-@0O14#JqvFPlRyzYOB*o;h%(TklV=TQzwR z*sBgz8Gpzlpmc~}eE^O_7m+0P5J&2rOO~v4FPBoO<^BD07tM32>hf}zTCxyxJLZDr zbC=KEw0GTgo7P?xSGR0hclE;lSxXRTBWq_bVnf;uH{?@ppAVSwU0o%+mM1nXpVzU) zrJ4x?xV6br2?}JzKLa^HBk^Tp93oir<1d#ci+|IQhEPVzX#vr7Bk`sIW2ge6=0ym> zk=9RP$Xx_GQA|3X+u^ktgSWS{PCZndiem8QKspgArDG^fs5dGlffYU&}NGcLbJ$p&oI_50?H zfPbi+xd@YtkKu2H(Y+`s0xozspwPD?c+V;${p+AFi_ud`r zhf)yEh_VG^m|5*mc*%k{lb{MKbjOgfo$%nc0HWWaA2u$Td9rk5cD46rib-xx5) z0FhxCH7RMx+q*}@r(tiRg9kj(m(-r_a=sHcRG@$8ZLf7PEAi#(M z>!d+Q4Qo7$R6!`m!I9i7j^hs;t5pb1AQeg?9LlA_0X}nJ-#FOKA8?M-5CPy}2r zanA1MkuEFa4Tr6u_%#(+VuN)m^vUsjNrEyL#d=*rI=p|sKgxRooJ9pYzz#Gzd~kO^ z^;5__=Mc+?4bR@Q7|6@KXQ?98i(*u&JfMH?KJ6z(vMBd%<1SHDg-$bMSb!Ovsvq%ANMX=*iDj1W?FFJyorQ(SR;1T z#WsQR6(^9qSFb# zrlUCQwGzZ0)L*dUgc6ixjejWTP@+X7Wdfy#gxCY(d8$n$JYf@B0)eRGchYU80r^=$ zG=kmNU7~)kS~y?C8<;aRtS;QQrWmgdk1UP#-q9<@gMMe62^Ows+_rera}Qj#?7p+x z7H^J;VHZoA1c5Wf$uGIn*{m;+3G=m^p4hhjfz1O6E?M&G$*knzdw=H*_Nv35JF|25 zzaCr`Prt+_7S6S4F0N&@tnrK%VM~@|JuN@w_?_5J;#Zz-D%*0b#IcNQH@MI#fj+lWN`Wa1%odhqJ0FkjK*_XF z9z!7?6gCN4+K=oE47;<#Hv@d6?8grCEkmsAf6l#<B(dB10dXPwjKr2#UQ>TIMB(;)D`+b~NYtZXC{DyOuLmbzdP6S)!Hm;R3a0VOW z^J|e7$rL`DO@9_-{0f;bQ6rYT;GWk6K_O6d`;tze9h4!CH6kA6cLY{Y30V2D$O8#I ze?h_kq65-;o`~WKP7>=M_q_6rj+{%3y{^o?FZ+VX+}b=DpC0bAbDi7r7|<)VCqklY zKOGqLG*s?&gxg(}r?_mhrSbw3a;VgyLjyOtrfAkqPk-TBFHny?N0M)me3n)E8n}@kZ0dG7P`byv~!lL-6G)#aH5lT%dJ_ z)J#38yY`}PQGY;eY8gsb{$(&5FpD{k*7yf9k2g5G(-n7nFDq?eavdU;z8)KFHCNsx zW4cq7_kV}Fe7edFh*|9%XKC$+a4Xm!vwH<=|45y+cSKQp1Z7*$kOnP_u+bxma&ep^ zXG1nypAu`e0b9F+VJN55(15L-nEIbv4L%MVJGjc;1aIxpt7L;sjQuJJ1c|W=y6vqu zbs$>LA868u%w`fG+-CA(yVu-vWMhBf19!FhdVeR6od|M0$rc?%RDb4(dW}cFS$^o+ zQ-{Z%eC5G(DPgqflrn=w-9Y>3&!iT{BGV83>Gb4#3ZqerN^g`Q@nAO%+*7%`+I|zu zOg(mSzVOnAPMXYeWdp4>+vM06!Y)dTSCUR@BiGqrv2ZTANy||#SGYSK2&cGCh6__Z zEq~L*M45xk6U@h$hF+oYJx0PXzEoV^z(`@cbNvO*Y6>tGAKv@&`mm@#j=j`iWk zRTH?hEqsDTqyLn#}l*Jz1*G&7cDtWz@ z$YA8Bm@5Iut^-#bR4}JUpWzdq#pMF-7LJNH)bdif)u#Cakd@syB08#HS>>N9gTz`%_ z1mO=aqB!}2Yn^~VwW*gLmXL@ijsu`Ma9H}p!!ihh#P?mI zu-C?M55AowmP)}@lYLAY3lqQV?tjjL(<9;bO-jt#BB`FkOMUmE{@%hwhoxfoGZK|a zQ~9!_slTVx0CNd%x!P$w*>l_p9bkY6p?x=%c=K=Zu6JQsoKAl@W?m!PA zbRPV$-68Tu^hm33($jjIR(~w#8flv?lx*{d++IX^bza)*{3M0S)VnEqfkFe+G=;yv z&;YKTrd%;9qzlm@zd`F|^mgRn^a_{L*=B2O6t^)nzjA?6z{-SE@1@t`mvlGC4rp#W z&U>@?RoLqa3X%X5)?J>%Uj~MjwwRp0g9&>Pq}#Ot9fwfahepy}E`O=S+1+00YD+bW z#g*sWmFL8|KrU8!IMeBni0oZi(Y5U`{hHSq9}I5)ZJ6_3MnIZpE2BPpidakhyi5{$lzxv zIbqyu*9nW_5IOh021Oh~qv&08m*=*xlKVN(c=cgn12H#e+rA7+gm&46cemNVx{*R& z`Xg#jZyPGHX}{UKol$!FQk6%tT~4t(*4%6d=48=z-gC)ZnSaQQABd#eui%{;EM{%P zVfwVU#Uk}m=@)E*y%tjLe-b z^7~EEI%on1yP^YMqNG5ER~KcYbTsP9nzcU8<+ZtdEq^|(N|iL*7>gp4^m*$-*6mCD zwn*3%U9N_%NZ10A-}wWnWz4q+uC?6{`jT~eerYP%eOEcvJ0FvK2fMbnJv~u}!ZXl; zW@SzOkSR2pa0R;edwjzt(KV6Q+dDrza=MSvDl5PBbv2vu={;9(2faVi*KG7wLSlui z!QDC8)_*$_H%p~hzJbaOF$?l_Q{B|hb7R9DXe5P3!{|)t-Vj{~YzF9|07?bWU=zwT zp(6|$cA>Oo)CbgThALPKC=!ottQE;!M;6U{r( zAt&l{qL>pkI4w@UQ}l!gf~dEPXs5_2^8BmV=YM0gF2=^*7Zb%|y&gQ)^fd+gGX;8D zfl7+|6;CKcii{7I(br#S_BlmLH$&myZc7l|!P>&_nuI%R!av=096a9oxCO^oel8G^ zq-qM*0GkLYEJo-S6%(`1R$hGkxWaVCBD@!9Z=?+OZc zmVYRmIWSmNxXKOs9ru|J7fSPE`n9h;bfA5X;4`OOD zLp=E)^<>WUXa{;Ui$dU{xYm%VwKaqi9Oh88yREJD-L2@JR&;kO>T5-<@$PO@TrEv- zu<17?Qodjag&Gi25AO5X87EoHTiY15N`K2xYJM@-{etYU^w>4e?PzS2ymS|{N{_=; zLzcgdLC*cVQA2~Ez_+Z{_&yarQUhx{S=y1sl1|q>dl5M+f21+$jVdP8W~?+PdfiHe zyElnG%Z?wO^aWFna5^2;AY^R`#a!F_3@x#giwQY3uJm}+nbx6~@xG$+>uirp!hdn5 z@IZ_XLyY~T z$Hqqbu?k0h4!@su;2i;GZ*@YGA zQ=Q@Ysf^B`Q)=~6G}b@Y<<^Ld{?2AkS7%3)tLMO6cYJQRMWff)%pi{__}XVc*PEzQ zxy~l$X&1WR^@NM=aZR}BCVyAdMY}8%dXh$K^t))fjqamq9nI1-t(9>)iw55>a3QPA z$2;HcOF!a+>&x4he~kHdC9V@bcQ(wsA`QZ(jOfD}ZvzwQ^n6gsc0?`%~2fV)!gvAgqgCwX%urn0a ze*UwzDHH-F?5yz7k6U&O{6-Pq59UMVcXs5O8VpwV$;E}>_rC{rmV%v4FDs+9Z0Cu7 z&)9IU*kn4$?c8e44hJ<~dI5ck4-d@Y!M4f~b!OjS)~9xaSw}jP zaiM3}bihJlCI!$hCK2%ixuJ{$H8?B|ze8k|Wn^F^4Kf+$aG4x3g~R1`yIc;tUN2MF z>@vF|X0w}Y@P{*pUFmY$Obtk(XN*EbS-sEN3;e+M!NC8Jt$zhRgiLO&l1kWDkQ%b7 zAT08egYiZqb~=86JNUbYBrf`BB%)DP{+&W26Nmgr=ZX5g=E~prDjzZXI2;yvkw zRX7}vvCm|l&wtQk8I;YS&h&vaElZ<^6lh(68Wc#8&WPHdNj{&XKa@oGCedgTwI@+A zv6XlpNdSQXozqbNDo-qX{rXi6!?res>#-P)pu#VSM@ zcy`sEG?63p*qg+o)yGT*5^9rwbw!~E>B%b@uU~|F_kiD8nBjSK@DD8+DFY$T?1dla5WW9S_*EV@kvT2i2x z!lU3uVy2Oi7`Sc^@^}Ugj*pLw4CHdL0W>g>OMiBI{IO;x*rOO3W9$l~u`;&Xlo^*` zhlGzTB>3k8!mYj9V*)Iihc%Zjkxb9)y1u?$yVI=IYW1+AAWs^I3{g#F*36E`un9}nzgF=iCF3JOw2Y!G;-ocCq%NIZOk&!6qLaxtf zRDpD43YAQVf#UHH1Uw;y%I;J+RWZ90wtx9fv)S%-a=uW=Y4mv*4uT!KMTS&H#&oMB zaEP8IuJ%fNmvgb{uFjDfnc!;b8H;Trovyp}Bo)=)ZA$S*@q)tRX*6qJ{=CbnZFCz@ zw=LKbV}Bub^>tTlZ9QI9<-b^)*kBWOIC7K08njlvjV!Gx*gq;ncuUsNR{6-^d4K!j z496K-1{2>#PkSQ{CFV(nyqWkK>{XBCA`i%sTq=`Mb|sQ4(JVqrL?KS0G$|BHV3rx* zp-{+>PoXdUa~IU`f2ReGTGN&+9{KyKmQ1b?8zYZSe*eFFW9nL>v{<@euM zqCZ`EapHKwrsABUYd03%9TSnt>wlt;8ls1LkP4rSAosu|57B=0yD5Ad;jjLDoHFI) zi1Ibb%sB+X{Vyq4j6x}V3Yz`|-7R^Fvcmo{k+TKOD4@Njr2`Zb_lo>hQP?BmU6mMzJ#~9T90G~0?Ng`xj-H-u*zSsSbbn<`%?mTx z$B|6e6!o}UT{%H2&isSTW?rCUU`+zJsG3 z>g4%CKbsyL9RW#f(a)k+3Ffd>u~@ANt&E~CXst#Ik}4<}k^#=2M}YE;xxc=I9}%PI zcKovLYCMW>1SNJy&*boV0Dq16)Qx_7<+-M2n_Omv#n2>qYWrcATPtd6lIU4Gx)@0+ z#Hmw6 z_f-^s@W;~*cf8%|Px~zm(FSYk_(oXHk$3ELep&Jr4! zX%R;yR$s>N3^_CgN0UZxXixae!4BWVgsHPLCW{>(YEhYNN`I?GZ`7N8ZO*oRK|R=m z3gkKl^eZS0HJsC_DQw~ju?StzsH9>k7N=GtS5i^bi)j2EF?@*c=;tX+`5Za_hL4&6 z(U-QbTuSK3J737rF*7)<6q0(utpB=Hy1())x-TTIAX@TNC3y1U#gphie7N#;EP+mt zKveQ5<)iv?jeoE?l3j4Q0<_Pk(}}=ui)f>bQX@5HISnkQc32(-!;FI_0pE!NVf~SM zYi#xJ=BhYgq@#&{XzRb{ShC};t=_)FKD{mI4_KJah)ZG#AAI}l$0d)Ryh|AyJ=Kw2 z7!9>}%oe>#Z)@q|r2cp&>ZTES>gWc1Q@}BXN>JIHm4Bkt7sBCGlf-ku+SDci?--yA z$bcOP#Rv`rZ+5TXhl=qyuj_y*gf;1OV)sEzaRLbs;&*P#(B6ILj`rJJgNg9rZeMWd zRHk!rq}iFBEk7|^c|s)7da})?kk_he%7lDb$tE2>u-v0*bfyobQg;ovM5ju*_?g17 zet+d*U4M(+dt^MN_xH3m?jMLbF!#McO$NBH1aGK8BA}0^)JnNRAs2z{zd*tMcSqjj zAYP(+5D!Zld5yeQXXs4jS9ks6PgPA^(9(QJ^5}LW{g}w$^Qb;ciHMcCfM)@!ojO1r z&iS;cwRI?HN`b($lA$5*cnV1*J;_(xE!y;8d(5O{oJO4|s9H~~ZSMQH@aGu^amow7Au<5WzXbRadG*1Fts&d$+sAIn?17}WF&%bxC)7=WxVv7boUkf&=j<-) z1qsV0S}v$TyIfJMR6YYmIgt~y#K5yeS5qtghDkJWJwaServ8DQpkGJ`B5DVH(}{iO zj)7VY?NY1UyI#70-UdqLZLd=*`kQoUM}MhK4Y$NVsSbSXfoZg*4cR?M$5J{_Df=j> z6s*S9o4=;J>7R+DngbNIJw?gCfG8vEHd86QR&Rkuy-HfgNUQWYN~VBD+-9HiI zdZ9H#Mov~o(#kq~Tx8@FX;WUL5yg<9w?Lk*L3Z+x@h`7Zl=Pn@_fbcv&0N>v!|Efc zRQEx5(=d00ITCN-x{p9I9dkLHCUt{HYdV~YYgH3WQhi7<+#h!Pqz-d~mtk3krg}m6 z+m|kr2faII!LH(`KqTVAPxiO3>VFfu?Rf3XAJ{F{1#jKYHsf!u;V%U>K=|d(B=qUb z&MWx&vqEIEzw;#&{*9>Cx>ur#pS5-_PF!>N4n?EIdOT*OO5B?m3YmWU5BD{-_~;DdfK+vx4hn&x!%uIzB21p88uRlQy5)F{ELnsZjD9k_JbAY-Day!%W+1f!#PV) z;A{BwJnF8cM?n8vke;Nki#X9y(I1QZ#ov&;)bJhYvTRUpmw!_6P36X2 zYvUsmFa57f2YY^xsc?t%Q9d1debV=q)6c4DirGthX)o=iw~*R@FMnxrFYTp&hG}K$ zp{bAWrM9wH++W^hg@5$&DeI{h?(Vz$EBUtkjrmV6lowuEJiPeb!V^pPpO&9K@qZw_ z?f>I+by>ZCJBhpzkwULSeh9sbYM}0>L=<=P34B)a=6??%&yu|B=0(axnIPvV z5wvp9>ViC5`EQVS-5h}Y*v)0gkCXCA$eStc&6AMpNzOrQ6vke}Z=!|PC_u(}*Ubdv zCjn-Hv?gGb3vxZlIp~vu{trT)1vn|_{{-YGZ$3+9p#Kjc*8=1WrGuUs7=_Cm^vqCk z(mHVSZIBOiDD`6MaNkn$`kA0_4EqSsv#D9KMkYZsxbi@@muIJibn${Z;V00+7N4$jAbx-P&Cm#1LHE^3fZsm9)I%Vq@~>Gug`aa|t?Wut#8lp83Is0v3)-Bar$qhg|% zP?l2sgP}Vs=N6HPP{_CVHCH0p{ zSw_k~B4s%s%7{Edndc#2=6T4Mc^>j*aa|vthkTjmAz$Ws$d`E@@@1Zfd|9nAIe$UQ ziaPw27`G4)M^#s^!R3&Sl<{l2G$EFhjZij(B7dZ8s_SniH1cIjU40`N%j4i6bMY`; zb$y!Z${guGLCP(pe3Fz~N%;&e%j)o#)y<`;B%ZR zQLFH`L2XfMq^2LP%23969_ovvM+92>s1-;oH3@a6Vf+TQPOb{@S%BX6K)y(N;sci> zaDO!qwFT-t)Ep$xS7F}jJYxWT3t(>o92Ve~0A`U|fbs&A*PyLjn}@Ao9|P~kQvTXi zh6)oL@&I8C`m!)@9_GO?7O1mA-~Dj447Ip*6L4Iw(S-R>By_C2AwEll7c8|8uIHfz z*X9W)cGJkiDG8LaWR^{6T_E)0t0jPa9)HG`NzEqoS|prfp}s1QQNRgvr%1-F65e)_ z@deVOK%Ij*F{c+v&I%Y+`?92d9cnQD)@l;mp#!&X02W0Uxei>IhSE7Qh9z&KJx@4V zg1S5z$J3Q3SYn-6BsgFy&Juc;ekXmpwP(lw5D%h?)XO)Bl?-L_z-ctmOX|E4f_{cBC{wG~qn-T?Kw%IW9pe z3N*FC-xPth3a|<=ir1<#;RS|@r87(VZwRxG5&9PizL?W(5EUgrnzw5_rg;sy4MJpCIrnSWM$vt)Lbz%LNZE)dKXNxwBg_F>`+R>?eTga&@> zf&it8ah||lBa%A@y*5Z29yL$!sLJwIxoij{cr7X4RZ7XuuZnU4KRJRrPv$ zXXrc*zbkL+t)Qx#Wuo^RL~;u?y}uI$)!A>ytFulAFeN-K8)Uw!Un~>L*&_Obe>G#3 zc#HfSQp)RIewSA9R$mfwo+`eK{m+`J|^#ELiW3w^*-ntcuP5%o_9-eLm~F1;$tv2J5P6 z^BJh)!A5rC8LS~QB{Uv;_pjjmZjQtp-w}v-{K{- z4$yX1SRU(nf=fYIsWxk}toJ3n45Na?*NK&^)NrWU^=@5y>s+m0;dv_SSDM{Ay~By~ zgpcQbM>$qk0~`si3Y;m_VX#PYJm(Hy&Oncay0v5DP5d$M`F|G)1=SU=W0x1t1H=;X zICqY%`Pi?z%Ixr`x{~eisNSdS9<@$<1uv_4f$lr6x%oGcXt_rHx)4!r5c^#r7~uB$ z75#VBfa>}-LJgAEgVYdQ9UL{6G5TH$wo|6RjIMj~8=b+FJkLZV* z8MwyfVd4e(`6gf#zf%|$)O37GZ~9%0BBWFX2ne!{tf?t>FO}Cy<@`pmv>IXiR#w=_ z;_2m$b#}6_UMSyFSd6f0^+;j9TsY4jTq~?j<9{(@`K{9C2D?%^U0h%nN^4tXJch;K zV+q!eKQdu}_1d6ga6TwKR9O)nSM*_C=YOQkZquQVd~x+O zdvIw9aA#ZDsg3;VN?{9-C>MciVRp8-uzvw0jOELVh1CtVEt`nfW@6Vj*Va~wK>1Q> zbtA$aD{Zpp@>}dC@L&UT8&|U%C3c})$Zr(F>|$|!4I~g|^Q(*OTDb_V3(y4v&abm; zh4Q)L#s+|!-y)o@@^b?kKrH2IVF}L=#-BtUHFVa>rNzyKjWCP#2*!r-nCb+@Re$#U za&cj~4zu$xX>oO7WpfcLT^0M%>dF=yEH?9Ut?LdD-V9q_4KO#$h4qax@C}5pGXWl6 zgVjkm5G=wh8-;UN%H<-=x>!2Dx>Cw7?&e;eXBDU)kW+%GAm7|r12tYOU@~!^<-*F^ zZjOR!t!@e3u|NPI@MpO=Uj&>ZYJW9WwWZR^N{J|d!0IqNpI--DORF_iuL>c!ys@#? z5semBBj<}}i))3&Vm?wTpN`_IDD*rf7)3LPm#D=$Mht_wvlZXT`o1sp7{fhY#cV!P z0-7*u3ilLNz%mKDciTB;p*`+dAEq`dw!g9WR z8feBm23~kXcdtvP(_Lsm4Et!f0T#FLyJhW z@0+u8Z|=PWNJ2sqVK!&ZIkPjfvoq&>JF~mli^dG+3i9p+By(Fv4!>i3(7=l97{;G> z7du`j+r)^Sp3^@iJ1sGzPh#)vUi~ss(^3*%>!?&q?gwD>F3>iCxpsvXriwY4)LTQr$9BGI}N@rl#~vxjBtX^+GM# zoK3Z^fA=&_!hi8n@YgLTqgR$Zjc&cNaoZ2YctzUGqzK%`e?GuVQ!2!`7EW z`5F<_Kjro2@QC&2@Q4*AuQ8nso!2;Tao+5_5%KlNJru|%=jk?HgsZ3LQk}BQU`;DKsQ;1 zIX$zo+q5B?ZP!Dj6N!8=hJ-wpm`|E`RQwk?#8R;o@>Aj|$jihs$WM#qke?ApA%7=M zK>pDYOPa&)@RP$4=SYWqv*Q-XnU1NDr#YsPaDPm99Ebe9;}qooILDFZ9Pb=Y4(I*O zNsuQyCqw?F^Vg6UIUk3-*tr<;6V4|fFL5Q2=4$D>fgG-6cPeS_G&kyZXS#br&T{vM zoa@eoJivV`gtLhfhW26?bK zgfw%gIh2Gs%tWu6lg(d|)0}F)2zitFD$@UAzCjLiyZJFv4wwfZ|I@pZH196&SLE=1 z?fr&?_mKAxrEf?7%ig{Wac!eE`nir#2XegZ ze|0{!=&)lmxrUA%I*bzUm^5}2O}umL@VjYl{_tUAY1ycu<44mPs!z`Jlx)oDdu9$u zr1pKXQWL35-|SS0)$+^H4syYV>nhnzKB}kW8u0M?N{%5vHBfR*ilc_ytAA2=a!Uf# zC@e)I4_yXS3#Q0lQTCC@%;}y;4Rf+@Ndz9-IRy})4mDPq12d9%`8%JiImx61x}2Kc zF=pHt+RyPpj*oDBLdKf7d-&MVn$B@kj*~gg;dm6svpAm1@j{N5aJ)=DbkkOHyq@E& z9Pi|KKgVBld_=}VaNL#Set#T~yyxzF?iN!yp3U(Bj+bz}oa5CTuj6SJ6QUVwCs=q#}d92WqLnd>|>4Yno!k0%Da7Hmj|J(#dg zLJJzfo*Kh8U=MT!HN(uaIo6vk=xW$fOI$Bo^PBK(sU5YaYpDZWM}HmZdaMF&pyV^u zS<*BCuc%QX?t{mii_g?zw0Nz#)=|sWhG}E98QLOkrM5wPP1~b=rX3SP_(c=ZR&*8F zVwhMZK5_(bMVsZ=;yC1tccufuX5lKe%DKb&fy?bWRij^x5j7^%I35!pGe2fCt_}@7 ztvsDQS)Re3(Vj(~m4BY?dW_ydPuKhDv-HLKD!oA8rtj4c0?(aBz-Vf;H&TrpBhMIb z%rX`mtBe9;o3Yn8XdE}4X25J}%HNR6G4ssv<}7ouxymdsx0!p*gXVFs(;M(M^|tq> zdUL#a-tpd9-o@Tk-U9D7?_Tdg?{VOCz}M8*-k0jj@#Xo(`+sKn7W-ED3VhpqdwmB< z{=bvPB#69H*OU&_czIEz{$4BA z2NXYP^ZvCJZ>xA#@#XptRD6Qsixgj{_*-Wvw@>loHqZ4duJ-4i;dr@&6rZg4lZtOt z{0!%p`e*rGimQyHUE6-$E!w1k$^YFbAdX)A4~ z-L#Jm(0`Y7M3q+dcSjS&yC}X`@eMZ5b1SaSAy3&u-hP`8SK~T-q2gcKe1u9Lq3RoP z*yeYtv$%7q;zwg5w1}3{N_vhq z&}Mp#-l9FUpFX2Qbc{}FLaU|uwYpjpt%cTB>wlzm)p}^klkZY37@24DyG_NFCy!D+ zFlvs?@6i=kExt#2#OUUVD_b6|JmFsDN%yKV8>2jajOwxb6tdi>dTy-hv2iNjIMq|* z6BSqG?iY$HM7Up_#{`8;6Asz@fnka(ubG&u_&YYA)I;&@k=8hAZ=^*}FJN6~%WPGQ z)qmN!l;1q4TKnJUl^WpW1D|?(X%jS;+6dzce z&px7B{fP3CxymNyp5oj$&=i_Q^Jy_HqkmPjmI`PKZKIvEmp-C{beN9QDb1 zHPw=|_FA%*s%2_9+8`}Y8>Nlcrf9RY`PyP_nYKy*XF!<0TdNglTeNN3PHnIDk#wA(OGwS3+to6jF%^G6i|EU2rvI^)Oo*nFYtiC-)G zTr_{t=8q4y`QlWYKar&P8k;X^rMR+;->ANMQu)u53W@$p)xT7Y)Kkizo>G3XY?aNQ zR(|@ly0R_ruDG(KXViH-^R>-aD1UiY`Ps7vZN5^a|F)yzs(q`}HRyNk6<6u2Rl9$$ z&hz)Gf7YmL)gRQA?hneZo||FwKXy=D`Qv}u9L0Co{J-;UzE1hsI#u8EYP_CTe!X7d zzzgd5FR1hl%Od^uf4WBc?Z#G7dY33YH)1ZQZ5$n`zqtBz&)c+G@x3;GNko=;srl(; zUQ+$IS>f8|37n^xIo4)%rkhnyzN~!pWpzz?d931Viu1jfRjDni)D~50%h<^C-m-r* zvdvqz6<6Dzl~rz4__bBdBDTI0+3T+)h3VK{>0JUnY{vOYZj?SKN*@-b=SS(IqxA7n z`s65mN|Zh|N}nF3&xq1zMd@>*^aWA+;wXJ-l)fTLUm2yZiPG0a=><{x<|utjl>S#AB@ruMd^P>qx54@`td0Jhba9-lzuWwKNY1HM(VFplrExl zXO!-a(qp1@GfEFc>2)Lh<<+S9^y_OP^*1|2>N}$H|FwCPJ~2{%yIG{Zb4HYYAX48Q zRp0Kpk^0{{Me6Uo8maGz+W%hoYzpY|_XSbv)wDN_Lh-x$SEqBQ-qOT8grR zimr~mfT`_HHPyc2~Zl z5Pp^=4{TSduqVbYY+*f6bbYke1$kKf(D}Bw@sO6b|u7`;jp;9>8d?Rrq6-pVYu=2Yn*zlE#5hkGep3dMx7tp_g! z^u-57aRndg(u%vd{Eron^cP2OU5w%9g+8axc7rK}(<*W%TwL9S(<<(G)gzSt{?)}B zN`Fu0;tXZGC&MLc*;Ic4A+zvx%Pf5TEXUqdA;&F6I9uy3Y_OJFyR79bEw!nt1-o@s zAr!U58evma3*mir_IZ0rv8{y1U2Cm9Lwcjazrx=C8cG=#u|L1K)C(14>nxXSx#hZm zN9|$NvD#VvAl0)|3fEhbdf0n84qbcHGyK8UVAjH}-WT#-q7{E^R~?&Ig-{i-swk9X z?Oa|yXf@*aXYGUKi&tkn%7@lCt1Ecd3vsm4hOno67qETkk#X{AQ1r8Zq^>?KZ$z%* zqze_S=S!IH?Q%V8u^w2Q4_2j6n(Ls%8XIpapdIPf5G%c6>MoyP4XNxFl=xX$H45r| zhID?PVVSk;d~1JW6z7c-GO=B@55m0 z&yiC;cRmS!73?qP=`AIni(1!Qnv0%)u(noq3ocx+er5ei#wE%dX7#}mB`^K+4OR7? zj2%j}#wpjCAMmQjrL}V@kNy;7EXPi}Vk(wF|Z2JVXwL(*3q|05#D&u+$lrcm5{hT`)@m#WNr4V4pYUn;#9 zg?z9~r7wlb3f31&NQmB3_=QcSu5p^Ri}|keYFHHuyoS$2k9-UMHu^?2pBs%i%775hnr z^#aGcI0vm3Aq%Ol;HaXF)O*==)@N zo`_OU+UZw0kb!|uasS&uLdexc|81Da`xVkeTR}I?lCoIm}#xR@ojk*+EH}0gtB>L z#m+^o#_R{}tP%2DPqUX1!G46qUq!e36xs%C@=MCoic&-EoyPur*0;c_@mw_g4rxNM zsdj&QIp0aOc9(B`7bGN9#ufX_>%poVf?kg8W9xI3c37naS0PWHRw|TI+NZW$%c8@;G933dOhl^wj9SD&2qF{oF^aYJt}$yF#;0>2;6dsyIZQ{XL<4 z<$X2@eC!YGqf;&GFjfn{4joMq|E5yuLIpk_EX(e6!q7O_jM7I%eKIvXhT#)&PfHO|@X>Va^pjShty zY_e-F#o1)4v#F5vVBsWwpY01?tp>+9_#V8SI?YP3G7CSoYVrM=OulcEz>*!S|6OBS z2%(GId)Bk6@cUQgAJ7x_JtP~iq|JZWYh-(T&Va1vJ8Q(a%VW*4K0Cj9DkCVoc~beA z>Y;PaD2tH4)b}7G?o3pZdwt=dwDW@VpGQ>7`wZtB%7`=-*;i-2a#YaqD(HW;FT^vi z^6x9ObtK=e(&Xds^tF>s>r*dB{=%0LC-qfYC`W{ePMmhd)J5dT$I*z z`cuIYg{q6c7a(A6l@LC63j5!lcJh5Uwyz=&kn^K|&_x;|uY>5FPs4xr1?Q`wq-y>( z^)iNph-Y4B=mYeXoHM*1R_eS$RsG`GIYRjSD%5Xb&jS-8-w;uu-FdEY)bqij=Wrzs zm1xl+|C$!wZfkY)8mE}IlrP$uY1F;GUD12xT+531=Fi19Z?La%ES)~TvY(K>!Eay% zpFZ1Z7hOLU6E5m`Q+a=ckmco7Zab<pSgeWqhZIE<%*Bu2rep9g`wdVTLcam}LFs?{i_2b+Z*`YvC_BoAegm{@ zcGaNz;d_~{WaaYJ=!*LG^o0o4a`|<6{?2yWbLKsd-^Zz--_^N*!Ah#^7F3^5^y@wJ zv-yHh#RcnkrO1DK9^bmJ&NyX<(tYbb^!@g-%o*~}|4ZhT8%qBDcFrTz_uI?TSF&ui zwk@k|=s)f*q18D;#P4}cuDo_spHR~4p!^Mm!jom3x1apE_@MR6OFmeZV10Y0J%wLb zyUO}4R#{fPn=$Q9*vi z!dl1Qvse@QQc+Lq#ma71RSec)g(&v7wi2ShQ&hMCxKp<8GaQy>RqdIP|6x^K1HXTC z2YTg?{N7T;_ZiCP%b*qYebEaYs^|AbD<`P$iyo|A-xsZ%pwRrF{JL7`|1zr8H|Q!M z*a&rTz72n0!l1qNhwC}Yaw0~?by6UA&X$CzwPGafP?G3FVM8jl$Z zjYY;&#xmn+W4ZB+vBD@Y{$y-4UNqh{_85O386O)5jDyA(#+Sxd#u4LNQD_R&X}ZjsrpGi))AX8tGtR7I#+wOdJ+r>q&}?KjHLozQG@F|(%&W~L zv!&U}Y;CqNuQA)39nDVW4Q8@=quJTK$?RfwGgHlU^JcTV*@FbVhVgS?90S+{#<71X zw5zZ=F`li-g)wbMZj9@-R0Css9mQaLucw+A<4#ly|9jedi1%sxkmqCVW61y1{)zZg?Nh{`Yo8{iOXwjbMvJiD;}wjbW26N`PI~peC@*7`hzxS(BQ=Mr+X(uu~5;gROt+bS3Q7 zpyseyFI@$@txYXpyLISl*l#^bf(_TFmayYS)C#uTlv=}{lc)`Bx)ogmyKYTwrEOC? zY2DNw_I({)3mfl99bo6zBfXR8MAyOIZ=jB_`DD5tc7G#vg6(&v8({x8Q8Ij>3*87m zNTJTs7f>oyq|#0Bh&1W~uSkEV6nMtXNbfGXQ&)IM2IL;12X%v|+(N1FmP|^6$MmFh zcuf}F4A1FB-QhjGDMNY?^7j#as0aKghi-u{^+ifQ(T_6WQ~jwY{3@5S;9CQbK2Qv# zUhuJ7sW<#=5d8wab{l2G-v(13_}uN31HT(Wec^jUsUQ3=kNU$0M^Jw*{4k#ez!yi- zK=|X`bSr#v6b*u3-b1&+H%HT8_~*TJJA8Bu4S}CdprP>92WS}lbt2sXpPfy4Vvd+Y z!{NJ=X$1Ut8r=yWeu(nn$B)om@a1_l68`)s-3_09j7Gt)7t%fO?L{;i{=EXF3XB5C ze==T#4DUwSkBkE-bx}f{u z?@k&EpLZdprdbmy9@9hP;Qt1V2L_mQKXAZH6MzMNdH{G3hn#iHI>;Gs#v>)cOrVLt zhkA(XoAqfDaH1hi239npUrM~7DL{-X=~qCF<}?+^(SoJ{J+6PI=|GSqdJrhm68T%1 zt!M_&q%~@2W41y5Ys_n~x4qdOa!0cx%>=@9qFF$h8&GqynM@A>ZEi%Joz2cP8>n*= zJq+aOf_l1{-4LgmsW^JNnT{Apgc^DPjpo3ab}2k^VG}@@T8O>a9KaACP$?Fhi_ywW z4Y1XqhS*{lxoUq>TWqx$r#y^PI^&eVIAu~QHZP@P^HFzfv5Z`P>VYkezhWGqY;2cN zA8fTL2U{J+wRq}>ErI%Dt4q1q>H+BnP<^1?K(s>QT|@c}-DJZj5G)Q*v;J)_UHj6NM0ajs*;=_q`{2gHdLvA_kt z@BzD-AOgSziAOgw9(5M+A|8m4AQFHGbwynuf<&mUqJd}t6lf?K0tF;arHMq5 z2oz`{ngD+VE*F=h9*JDt#TDWTU_mp{3@C7=xDrQcE}8=it`b)P1zLy}kgpb3V{c2* z5{S@2bU-ZeD~r*p7vofK#;IR0Hf1w5^f`aR=SWxRWo2i{W$^ zqt8fjr?`{uW(*o7?h<#=J&Z)78Hw&?BpSm=bRQ$pSVp38j6_4led0bEFUE?okjIH} zbiWuc#?u6Gzqp?sV4RxBI5mlJYO;qF#vH_Rjk$;=LQQ3a zn#O+!HJuUaLE{PI3G9_PHN|+=coy;>jpq?d%zBV9Yl^YSco`|L8`}~8!}t)fM6Rif zT+3~6)=WmL8H`pl8K-73PCdjpHJfqjVaBN$j8iiirygdUn!`9X z$82CWphp;?=9-PoCNvK?)s*IAZgU0XW@djg?3HNssCkun6;dQ-EdXYTi}2F z0r8zULFDi|{1oH3*>MZibhUG}C)3r@bp!d_Y3^Gn;LdXQp?dCq?*7!+J-~e{UG7=q zSx?P8Cp{LmHu@R2(Y5AZ%s1#p^MHAPx_Wnc_fR+QKfGU2hEMZpl?y>H1+Dgw0o=w^+UDHQvYt5J9{@}0Y?J7_1;_JBTsJeEmQ z+?Ee0`5@#&;78ApFH#SdA>)4s&?$Q#ypy8xXlBf5X;CEJ(ew4u`gnb^K3$*9G+$rD z^rXIAUj=$jU(d8r-@^2ozC+&)+NsdxVKyh}Gkw4DnelZ89HxCLJhvHj2j_ttn8gjlSRP07{156?%8bS)d$qAkz>d*BoJvGRK+|nWjRY z1%0l$kZB3>N?K;FWLkfNeUjFh1x%aGSDCh(JDK*Nyrd6+CkWYFnxnjl=0tBZ!|6>jeBQR;9WlnOyq%3s-qhe&dV8Qw zNxc>I(+_(G=_kCyj5$pCs7uml$dblG2IIWW42TuBerw_KH~dbwWN#U2F>4 zs4v}@DXGYYec69Z!Tq_uY)M5n>>JFabYGrHl7hDC8)-K5jWJvJCg}TpQ^IT${ zcd^PLJ)*w8poXX?tuI z(;g#FQf!X7lWCw$*f)e}k9WSL*bztv72%k^UQ+C+*s-w_jVZBHV`s(A1ucx774+pG z#V%2_OwoTzMQaqTQ&eD+#DLh%v9HE%2j8imh?VV=^a1uuIuLtMKNfok{3!DuVozal z5#u+(1OAvWJIj<*gpK~XlKhEgLu0MPI)5`W%b#Sf^SAYP^mq2BV$RT8-{J2E8f0vh z6!ZoEF!QKC-#iuM`gH$jruqKyl5i~;%(N8OjHQ1PuY%Vx|71zV41G4!0>~i$bpLEg z<{tleNvLZ+(|rFTN&Y8|Ig)VRxsv?L_2o>fjMb8&uZ!Nj{^ukaoBZpUg4dH!U%(j{rtNX{nN+{TH8FQGH8*mZ zT0xf79x^EUx)TRHiVNaWr=s(Z>!RtcLe)NgU=OhtO8q)`5B9-`Xmk3mow!V ztC>a`&bTpg6XK?T&xo54dq6)NH%C7ax4?hMlf?RB=&%Jzu?ON-=*Qw#>+|E*N{ZWH zG-ukRXlv}LxNZKJxVOOH@yCRYMlRD%)GKKZ`u2msfxtnO z0YzWic&-Bq&c%XQ9h^%A4tX%cC(9KeO*5T8K|V^CBR=VxFH>YXQf`-doQDy=?)*Te zaQgRLs)4gEJz%i+~701Y9eMWz`NSUA4 z5EaPSoy2jxj9t8!TS%@IoM#EA9Oje&%b%g1?{H+zTER8{Fp_ z{Hrpuo|ZC3IVtl|90w3j#QIOB@8+<89~oO|q=~xD^+<1FJtBL? zxktu@jghk4`7Go^g?^T?%GQ5YIe&xvxrMhOZsB$zUTif-`V=Q>6QisjA#akhmgM@a z%+D!F?zxDUIyNBQXSGH=-*FG(9fiM_ZE*jC$7qpkvy``?^k~z^czv8_!A?G_slIG}cJ;?G)+*h)nKjCB5bxJ!t@SlC$|I$7Wv7F?5 zkw>b#%;Ua|TlECj`~-j7wmkYYXAi_RWIc4$?cwy#Wgf2ikm~`&V++6Kz1*K}9r+Dc zHyPWb=K3e%=Vglayfu*XJPNs&<89<|Sd(R+JFn+4mHEGMjgWESaX!`p*;?mNq%z%#%yKf1 zW<1+KJlC^b#;)OPZ~NHNX3NoZui(-Ah-D|sQ`k0^v9-6Cqi^lt+UE1#F1**pdoSZ2 z-pJ!FEl|yjNxUQ*k)1?uakA6pWlaVx8iYM z<%+{mboL{|eJ|IEc53g|NM%{t*r$aOe^zm;rnoXCN^pNX#WjxQ|0nPJHj%}ol(P(;cgMM~2YW2BfOP>L~PN-0uGkupdrManQVrj#<6Qe;vd zrbua|k)g;SlgD7hNO=q*Vq_3$L#n`` zI%}`J_F8{ypX_t^9_BPa_}Hua;Wyl{RW~Td(RUuCnulILM6Vw*e|se$OZ%6Q_D5HB zwnJWh%DXzx=8t-=0w2p`XN@VvmIs(Zcz?EMW!%*_8M6HlJP#}S4B$^0>H{(A_dp@f zFAa_tWMk~d+SrfLT6hZf_9is>9kd*XHl5J$SlE9OZ2M}0{44e38WPW61LsIL-?D## z(t-7|!S-dy^FB0u4=n8zQ#2K|TY$3-k6?eUcy!S9N8wQm;4wJ9x5JmVUuBs;kI2>4 z^EE`M1#D?OJ=FfR27Pjzm1Xd6Kj>-TUOj(LwO1kAnyVvW8;#JIz5K?!hSecEEiJL$Z-Tc|Bs&4zazecr}R~LO8)?!(oe@zdWuOx$>}G) zOKH%4DhEl@BXn(}!ZuD>mC`|_)4Fo$%EG$^pGFW;r;;4#uQP9<%XLDqGsRYp)5 zZ575#Sif1nN3b*x-)(1 zxzD*9Xg9P`hAEtZ|4+{RL1k$>igin^^@3}^G0+&)dw={LPaKvD{+s`fm!m$aK1%og zlX^uc`Xc=YqMyE0{~M8)b0~l3pM@{?V(teb;C#^epa?m4JO5FHT^+7>Mcl2rRgp06 zHpYu2|NTu}LWL|#t)c5`Ds_Z!pz9_oTdXUWZCUsZD!Zxdr9vJ`B@d;NhoXE|s3)y* z+PZdFg}jy8WfjKBjx~|>n{p6Mx31*1G@5zJ7=%VPq>-o6Xa+R$R2qMI7HzcIhp$=* zib8u0v#tc=VVU|CmJxDlv_duVVj6id-VbTCFVM(~@%^bN*44!4TR7RdMjlLCag%n} z|IYLg8hJczja9dgsql!ayM#M$a>jCzFNw~avAmB zMc6!9BX`Kvgw2$5S*Km&h4})ywH}KE;0!=3FXg$qK^iD&c*w?Btx3c5=KYKC1yTuFhkb)p_827Q4e1lP*SM zN6XpYa(fiDgOM#>VLD(7Y7f|lB6Cb*SC{6#oXe{TrmKI07|LeeFUnSi>b#!yXi0a` zMgp&5+;%{pL~t)lqK&j&U#GIVsX%#H+Stoj<8V92<38okD0U)W;9D3HT8+Xg`9 z7I2%v?fFTG-X+LRv@Oiv)}L|JueY&g7#H2@G3eZEgIby+j*#K3h{{hXr2H_Cc9=qS zKIm2{B5;3n+eb3YmEyrrxENt9NsZqX>7q?ei4j#_4zJ zW%^xuxqdfAx_k5r{j2)D9PRXJ6z6`E)0p#g&bFMUoM&>jQ^fm^oGUp!Iaev_eJyWl z-q-V{<=scIuf_R-b3ets!>%K)S6r{Uj=5f=_;-K8b<*{w>y)eA^_J_5>t9`GUGGpl z3{wQW!x&?H!5C|l7+*3!oB;-GiS`Dxba1v^t1O6Gne+Qh8`%XYq;HQ6K z2OKj2D*-1Ge8y2m+E@h{-r}c8;v{6dpl^T%cou}R29QS~B&1cKZQko*6*Hv@5F=7{ z1DazQ$JL6Z{Dj$WO>Cj#FAI03!J!guqoXSU#{!~yw%ykr}tPvjj(&Tn%*%B#$~ z-}$2Rl2Jc7My@XGq>Z+atSefJR8W1wp$7QAdT}%A;KY z<)lK;EvyKK2`}ZiD@3hWL)pSQ%5)pVR?$S6$sUSK z>qM(KB#u(fdrF)UnXJjolwPp1iyQJ8(2<|qe1~e~A+NC|;+gkZGsoa4EY5#|BKXNJ z!7*rmAL#o4hqDYUh+;(bDX-4X_Nb5)kuwr3o`OkMmGngFGeCliBcgmZ}8S#NOTl)@qiOt%t$#*qt&nv2SNPAW3r*(g5?95;$<(u|?_JHzpd(0kJHrtc-N0lx8 z9__bM+WI}#Z>`Mh_ltfTWT4+K`)!kve$VtfC~xWaYQGcm&VFz9yCm=F_aFVe@}Zo5 zIsN2c=Qwj*az&1j6Oex^b57;FBUj~qH}{uvU2a#NB45l4=Y{2~dC|O-JeD^wZ=if5 zZ*bmVdD7){Ipv#z_Js!RUk%!C8eJ&T=oZ35YV^?l%tL!s59L%I+N*lVnmn{u^$emy zdsWW}tBkhj+^(dzD4sGQJrk@li3;sUJ=5trGmCz+GKb3iPtkvF5tXG>R^YcO7nfQ~ zHkM@#)zRM6Q-57wvt0v~t@OLeqV4=Ils({mtz`J_Bc82P4)u5#G_>5{rLQ=AGcF@=o$j^Okrzz0-(K zr+2!io8V09I|t_|mU>s1XC%D!o;ISNrrHMLxz*d`@q2fA_jvbtTfK+8N6ixs-gDjy z#uyW_-n^H*S6E{{>2rAeKBv!XRQtld1i@n8V9$o@;4t6FURcbKN9P;kEA^FoPG1Kr z0H^pWy>Wkn)qs`0S-!cTEbuM%miU(W7JK$y2Uq%50j?!j>RS(P*I)(UM&D*%qi?%! zm#^8F0%==(2YiP;o#1fHcf!~1JL@}djPYIMFj3{{d@iU{RjO= ze5L+2Pq+W1|1{YT*`&XNXW!pRy}Ia*-E3(A!FWIqH-FjD-h%vU@UxS3z(Y9rA~wSR>Wux(lVU z@B!EK&;HPRi9JtfNN9LylxJROY-oR+$A8U|L*qjeLsLUlp&6*1&9$Lr`d)>TiAv}+pLui?_^qUXou%yXm@C@KNZ?< z`XX~h`zm-&O+AMWX7n67!rBY9g-#lCL+m-Hg*wa?ZCWgkj_4Sj?<`xOIck6Q_MuMG zuV%|^dKJsVKsH)IB%A3&%y|!WUE?3>W}aceJi~f8H*AE1;dnUh+ZZ0?YYYz!j|h(r zmxRm06T*|i(}+?Mo*tfH)y@ph@f{A&4=)NY4X+5-hSvnE!|RL%;rehxcq_GRLa&|F za!+_)xHWu;XEuB^d^~*0za@WsCVVb@A$%!(B_bn^h%@4igd+*B5h?b@BZDKuA|u0k zWK3{wq%=|!Rsw1-^b0Z5PizCZ|)zoWcWL0FXf3GQdWPM~~WOJl3vOTgZ z(i~}t9H733$#;<-iyVub@C=W%o6#zAHgZ04F>*Q56V;;qL;k2cd?^ zkJdz2N9&>+qMM>yqT8Z7qPwGeqx+)=qer4`(UZ~B(T-?mv@6;j6EQuyKb9LaV!>G4 zjM1@lY*1`yY(#9d@34QFMVRqAR^mSxD+>!=@7^o12}XNtQjDTAXA7ZD(|%~Bctf2O z#TJJ;V$(g#V>A7A-czwTvH84;V~b)-V=H2{u{F^xv30TfSOfE9dtjcit)AK8(Xpo3 z&e)#N-fJG!j7_n9h{C{4n>T$_td;GYY<@_u&1dDVd8El*nvPdoqGs?YY)u`{uAu?w+Fu`6+z?f2r2xHImJhvSKOailap*oW*WK8)us zKGJ)RS4VJ|Z*Y7JuiSX48F$E|PK2LXOtC&|HO0&072$MzO1v^&O>kDcnyt&%Xwd2Rd*ch@i^+fHv5w-);w!_a;;Z6o6>pBW#1DkeaeL0Gcz)xD zm2i;99&HjKIp z1{4e_7+x@{U~IuS!10{R5rj`RVZp?LsRdP$RRuGAjRk+R3+5FpELc*oyr8CFbwOQh zX2FK|fr3p1TMD)j+)%KiV0XdZg8c;td*P9Swt|xdrwcj?It#iAx(hlJqM)1CS3*zZ zCX7VTg7HK;G04J)CPqXm%~=cXN{lA$wI@mvWr+!iNr`ER>4}-a#fdqI`N6q~MTw<^ zuSnEV_IQ7st(Re9%{4qWC$TP3pJ*Vs6|jkCA+a;D$IPM=`x32*L#Cb+M-#^rrxIrp z=MonZml9W!lC*l(zc=YfI+Nb$_+;3>x0esWWFlFd9Go1M9GM(LcxkdcS&^KQtV~uX zXC>z*7bF)amnBywS0&db*C#h7HzymD+mpMJ&B=e3!Bzsz2vKDL3a!6ldqA{HdttU@FCVQEC9^QK=!R z;e?N3Ja{-Ymhf@Z_h4!~TW@M&YO3dCsw&%(1IJS{jPeQmKVx)ho@Mf!9cC z39o+<-kVSyp&a4h;dm zgYndE&Ja?2%@~*3pE{V@n>vze3$=lMlIf|_z&n6Yl2?T;K-dyh|z! z7RJ333e$yyuv0(|&zVNyP`2m75x_??o*I7wyu`F~e@$VTvEH|=aDt~ha2)tb#*=5+ z&lFB#Kf~Eb%Fo$I;WXeofKM-+SvZF?lfwDlTF!V2vEM0NTDYRH)-$SbP2oCkZJ-`_ zJ>%TIa1pmJT$((~`?bP`!mZwV_E&{XZ25&d8Bg{A-;?df5bHb5Sbr_635;euwSj-} z!hMCUg@-&z!wF7E*gkMnLTwY>1uwH$_bg@tE$|5Z5D=PW#DG!|YcyyV?y;aAc! z?I175IfI{bhP3lq2Fo5Y?dA2A4g*gBFXq`#4^9tDkM!1u7N*CL{+A)gKom%qrprTB z>5BA}bY;3aemFggp?9cnW19S7q#}R4AnJ~+N-y^BO)pEYOs`6>O|MUHOm9v%rnjee zrJK_&=>zG*>0`#Q^oewP`fU1q`eOQWx+m0O?U751w4(m3`64&VQ{*p-7Nv>?SUX&E zZ;M@RpB?M;%r3QPNYU`?_o`+DH}i+0QAJ~m#ube(niy^^np#v<-&a&JBqfL(4?4mDca`Qo!C>fqiA>0UeiK2Y7k|A(ZQl4=FGUw%&OGVjRuqF$g&2WoZH zUI8EcO~B-);W;hS3Fk9_m-(**>f`)34SAWL2Fry^(Z++a5R^_(E`ic{^&R|umMMop zX-1n`Q0hUc1*IC4DWHE;GsPBX+_ui*^FGeKo z!N1!aHTYk#G{ArJJBlgVNZfrCOQ^J?%{H`YL7U5bUS3e?zU%(|q;|Zw3g~hPoPdyAyx5v>M}j8k(7cu|JKuJ_LIZ zwr|rNZ^L|D=8cja+D>in*y@ zvTz6Ux3oueTgcKLrZ*QP9urw$s$> zd)h9>dDMTJ&@Qu1cy#I@^nD2T9R!=X4RcY&e>;_b(gS=t6*IM)q3w&fOFK9p;l9cn zxZ`8EV=E|4sJ)C6(`^jp&mj3>&}%{O0?(J2qP&7$L7aQJpZRNVL$_ni)ord#+(n}0 zIq+Esp7%j=yE$IePBN_m_;1XXuEa&q)3;O>7{v>APx3GV=4S?r(y({NnlUu=gtL0lxLX!>9B-fsS z_RfIP14<|0N07mezN$G#x`H`MV2)UCt=c$hQ=;hy8~WyKPXQ?&mGYG6X5); zb_pKxKKPuI$SYXGlhE>h*!d(#6~g;%e}(tJw!pVUZC_((;;6mCHY^{;y*e@P7qMP$ zg;bRoMJ+~A3HfL8xe{AD-YT1kUbi5_Nt-?px_y>=k#*6^Rlmqk8NqbNY_@;K{)obk z+04zpgDtb)BwiPGqgapknlYExtStwTI)c>{f!+QP zKEVO+_cB&iDOOo2wAupbWdDEQsNu6S{gG`tYOL{kFnWKzR|Av7o#N%49@=MwQ=i?L_Tlyp3n>JBrOn!L_m&_V822 zwY$+iigntF_hL2ftDNNZr9{E=cJ#WPYgOc6+W$h1WM&;`qoa+ANTHf*=Ofs5H~4>K zu1e_S585z3gQ~Jre}I2%4Os90j@kxLN|EoS*z+jcu{tJWjN6$`o`>V+1K>Of_nM5% zs*zh7Z8mkfQo;7o~3#plKcnzE~S<4 ztNs-C#STs_VO%X?|3)*|4GUxm-$vgh7?GJ>3`R5=!B7r{3~AUv8RSeu4F58+_)0&u%lr#F^yZ+YYjC;d$474=<#H(t@?Ab6@=qtM)!#Q`$#_{|)S9Amn+R z^{F<&+8>AIG}wRa)aI;q3*(4T57~|qAIYQB9zvU2_%7Oy!RHoOR|=HHprpXr39mj2 z{vVl!avqd4-p7UCpq!x$c_#0D#=|>pg(umHOkg3OyrNu!-+OLGcK37a^~}|ceS~rd zEt}EC0eAu&pf~w0@OPoZbD-1$e+gO2OYomh;=T*@H+X+H$GB}ZDEBjk_Mr{PAqiJs zH1l5MX`SHq0esr$*rQT@Ysz*Enb87>(DZ2wJZb9x_z8^ z>OIK1%aFeY)*W-3W9^AH^SE$sKZ3C=!Mob!Os7a{?gF>~hd_A0*L=WoOAoB2 zKVWxu5fSQ}7)vfBTyNf&aocm?*~4#I)85(Ks}io=Y2vV`jb;QfeLG~sJMn~L6u<}T z{1$!%%cFl8V~HZ(-N~m@<#dhL^+Ju`{F@G+Fc^Myu(_sxkR83mP<;aQQe+*ioOLV6 zh2*2ibIOtDJc`jh3(81Pp2ZB}8HH^vM@cn^)e*oh_-9xh0dto5y;XVn>K3*oKDA2u zCsR84ydq`kUc{pzc!tCDh1`;6q!QyLC{tLu&mihy#VJqVc|{|hD%`F8M)0>Esu)M@ zY50&A;T6k&b(R@VNVIb3)_}KH;Dv_4Bh4^zXsHS^=i>C^d$83Wz&5}pz*gM-LHNe` z@Y2UY{{{T~+wk+hz`dTws(c<&b=khpK9f%|%a@Ud-;1pEW$0GG!k>jlZG`-Yr%I#w zB+Zlo9HPuYDQBEK=L4|726$lR(29M^Js6|I#Ld}%$B1(AhGK=NCaCd=O~;oUd7p|Eng0+jsBj$@mS!ZLfKN)MDi=D$KTYEbAZS$+|vlW|9K;^^whXh}<-zuzKk+rLM z+k|$119Z-$UgKKzhoEm}iWUX^X)D8>3RsO7M3y2vV&yBm6&r@)5qT@w(Z| zHWm?bCN#%qpf?CUWvoiDJDK{Bm@9^hdEyZfK^H{rie|j{Z#$ zuhGAI#5wv`p}#`<`>MUrUL+>kKV$!lm~6j)#eR#JV*d;K5b-tpQ2S8vb^8eW2rx8S*xs9HY%HyMrFIQi{CC&4k(9z zm1D{YrCm9zoL4R?m#NRSe~YbuYps8~djFlU{`E-nO*220s7%QLa)=yGb~YC8mQCb$ z&XiqphH}DszbwRWKdS|J2C@RDiXZ1M2iWe>B=2FdlMMmB4*IQ#xn96^{3fo=!~-_U z@$?rMw^i}UbS@1~d7Yy|hK(|Px*^4AyUtNdQluhh-RyZ(;wZ`mFt zo)4>LCN>VcX6{=9I9ug6zyD6(73?FaRJ`U^^b9ZqMj$LZ__oX$Rq)7fv~boSf*9_{ayB{*|^9A~co z1!u0`z?ti}aOV0wK69;x`OLLCfX`g31NqFgI+V{`tGDu*Yjv2g3z2)C%0;2%UZ!i0 z5P6zV^7>P8tGD%jL6!<|{*o;5VjRD%FUj`S@fT$?byhp{C!Fhh>&EAQP3*oiHMxJcBK5emd z1Q{~4Y&kOZ8TpyE+LD#8ToaQg zVOe?Ho2+X_whW()Zutv;zu9xTI_sK|Wk=p_T=|Q?HGO2rT=_nH|I9TbduA-m?_l1M z8~Uy8b6C#{bu=Crp&dj&u_~nud_vK92pwE zR-EfJuA6smr`=@yA171xZ)<(^j)D3(gC?!-HM?)-%YM!g&e7L@&Fd#zoh6^H{o?oK@cqtzIWM5^CFhl1J16;E(&ga7G>SZ4SJ;&RUhEp|8s-|w_UanrDs`2+ zDqK@sm9A>nEdC8Y&;94-jq8m;A2XMI>8=HIFUwE67GJwZZ~ZdYO4lma+8gHLX0}<^ zXKjCyzv^3W>BzO7zk}^+%*f5Ub!~U;%GOn{4DOHjL(oTmv#W(mZ(Pg7%}o7)Yv03m zwY$#Z>(^QF6kos2j<;EHmcNDFH@@+Au`w5!VzqZi-G~|P0q!C0;qFoHvF>rW&rOPZ zyn7-S__7Rbs=KP!S6Z>uJ;OcQJ#lQe;PLVp-J9H7 zdUGHWmU znu#TS{P4}LH`tfE&ox75zh8HwJ>4u8-4K(gZ~kb@UO%o~Ry;+!thEe#<#k8%ow;&u zV*W1xpD?~Z<7;uvBfs%Z10xyw>Ee z>s`aFuk8Fdv;H!RKrV%M(Oc5h;5h)^#G^I!* z#uSm#h=_>MV!((LsdCeTh!iP}NGYXxyxd&NP5Ef*W2v>#VoGVWG$J>8Emg^<-e~!d zYNTm|Z_PWi_u1#G*36ncd-nY7KdZ^rMe|vQoc3MqWA5tB z$gK7?_x6VzJ@!xSpB`7ns(v_qRTVFze^&pY{d1I`-~MJ{1Zw6rdtdA?db&m2|=O}*={-E}M zKLr0npn>0l--mVfKCD@mmx0e^${&C~0KfnD!4j3Oa^>UjFHo+(2yPA}%mL@|;5;7O zYQe1*_}hTL4cvYP`kx_n;C;aRUV{H6EfqNb7?eK-hY!Hv1DzMha5?BNhqRYM+Dj1^ z8uJzDoGQw|rEt?hlMb5opjnT&-v$1EyP$s#sXPZ72^tBS3qW%L@)bnBf}npL^sj?v z1!z`4!a30P9OM^xKk)ub;J*a?tH8es_`|>-2A?ay=L*mifTjRxtwLI>;4g;1Soy;! zkuXX>RH*QwLglwnvNlRKI0*6#0?$(LECo#yXqt3wfmRDNH_$(-UBvn}VtpHb{`=v- zACf>b7Bu7A3;bUAFM|IfZ2Yx>A^HGAR)dAFh>Hv5Kz%%e7{4XLdYMoElx@yF&hWr;p{)<6>HR!Jf z{c_MRhkr5ri{Xcj`(WeN%i!~}wq;e0mM+t0K=Tan4?v#}Anq~XkHP;p`2U77_S+El^=kjTxbd`mXfchXd+9qgimLg# zjQ+&e82U3c(B-t3uP=%}h}|^Kx5xJ)jaNGva7;B`yq@wIHqm4BIBlaR=qY-ZcF_wQ z;}v?1-lTWwFvAf#Dtsb;Ec%H79R92rBnFFNVz?M7#)$D^qL?hEifLk|m@Vds`JzlL z5zE91u^PLLZB{##iS6P^#;a?C*uWh5Vt(r4f1*r*^5egtbTuc_`kY^l`p)qkV7J!4 z65nT^z!>a2c8B?Iz}W9MJY&CVj?HpEY!f5jpF4yA0#KYOmR8KJ^9dE;Vj! z{Zfsu`Zr*<#v^Kfmv`%B>sQWruc;gAD~qZdtT!6Wbz>+Eqio8d;dBvQOu2L^*NlIm z(Ol{ixx^>YWST->qibj?T}MUqb*@_rsf?D=efWCtqDV#Un9RH;GmWZwv)MO|VJ6L^ z`M{LX626wv3R(?Vhi@WVXey% z7;n#1rEEaSp>$*9x98dOxh|I5Wr0J0CH6Ab@KSq)y*kirud_GUo9!)uHTG6}yZt0; zHrG@8X?rKv#@s-Sz1!Yn?+fPGuR@3A_8azp+e(x6LHm8X)t<*Gav6pw6bMB_{X+vo znV}(}?9hnNsL_MQCGieXuB0sW{kULRE;NbWO!~`jx@=wy+G_;nXnOa5y8J6&xBK8qNvl zhDY-?E}R#h6dWBc2p5HCgl7d;1y_aVhVKY33@;8egzpP~FT5(eHoPi0F1$XxDf}2; z1>wi-`C-;=cw6|1@KfPu!@EMw;TOVxdsRsImGEofH^c9S4+r;#kA#m#e33BQnyPK3 zfkTmg_V~zv$e_qzZWGu7Bf}!YBO@bYBI6^&Lll|l=qoZgGBq+SG84I98I;gFtS2(t zv7*Sl$oxoIWC`@jWfG{2EQ_p&td6XUYyfPIY>8}T+o|SO%K?;)JuR|5@?_+H>B!D@ zHF#w(2Y~XiCo72Tj_gr&C$cZ1>yYE;wjlCGHM6;tKqN5_KgL&MJ&ImL|$3`cp);5|Sof0jKPLCEx=R`}Q zszxn}F5*_ZKDsno9$m>cQ5Ted(KTG#bGR)=Ys_tt9j%CNj8-y-ykJhWDtuqGI$9Im z!T6eJZL}_0&)9}&V|0JCDcT&G5MCcW6m5yNrN|UJ(3X;#lFm<)tdyZCIja3bo2%+> zdP;7JuCFY2$~fIx@{^;M+tR$0yc9KCWD)iX#cpKQRJi*wH*hulZFnkwuK`Uz%r@Ey z%wxb{ot#hg4MZRZ^p%KPuJ$4G{Q{UQJoW3~AAnH=th%$Z5%&W4M}npb?mD=ekje&x zMlll>{Ruh*|6K4{2FmTAycjcmrebEzDB#hD5Y6xpMOp!H%Lo2`JsS?8AL;c*a7z(- zJ#sW2v5JAgtQ_B8Kwl4k4Cdg-S+Nx`zBi68R(XNjrd+uR?jH1h?!-I6Xz&~k`Tc6G zp?FNuh?$7B9}+^7zR4zCwGQKenKz{Pj6#a9X>B9c0B|S-W-+Px5fdQi2+SmU3@%nM zuxx7f*%bJ*;qF#D)LNCGp8;3bgey^w|Ai7i515A$`U+D2Z(zQE010ip_w0rS{;%%y zA#^M9_y9C{3ug1xLt|5ryI-gigDi~V=#@ae(ctq6(!B@yJ%GGp%s_q>sc(k+u+jey zNrak|-`<8)4#9m8>Ar-xgOnRw1^hlp*otz$7MQV+WT~!2&}0aqm^&Z%rm0uzte^*> z!@ok#V$`%(5i13Mu3kNJ1pYF({|?TLkoBk8c;rCXg%6AX z{5(cT+N!Sf{PW0W>)4CYGti;EATHV*SAg0Mw8e#k?H57 zrfIG2M%>*hmfC&UdIEOw3fwypnupM5A?F;V{%bQY)txJ9-G-T)bM-u5aNY_3>!8%N z0yWTg^jHgj%0h*%1BaK9mYxy(r12|m+d*@mZt=jg4U!Cid##??ih7s<7uF=tf;>UQ zodG_RP*N8{hqob>hd^^T{Do?lN?#_*Vi($__f6?23w=e`Qlt(Um`3g8FH(d_;h zC57^}f^eZ{s}}S_^%_3V=rZ~xFq;v&+|*1Z&s7M2-3rPZpsPl>OW{rcWi@C<>h%zC z?*{!a_}9RFTesNA%L}OUs8QkoWV;;CjwlTv$&V{`NkqaCWxfBq<~8|PSo%UL7Iat23V`&S4YhaIB0RoyFZp#+PZ_-H~OCxsOjGgL6M@(m$La zhnLU9B=Hi`O_|Ivm0_Ak&V;-ql{J}uI=G{M42E@bH+9lm7u|d~xS0&IJJCa8{*Nb< z$G%*f84z!Ki8Q#+W0=oS)$4qMcrpm zmuzxhG}cag(s064qYVAq>$;=5dEB~|*j^=TmpESPK!!|@oUGf_A@RCuCqrW17?+x@ z!F^Ub^~4Du!7$3eScVDFxaVnVz9+7K_t~UmoDyyKd`m4fW#NFsXS%r;Gt6NqiMD$- zc_Fn_1L}~2TjbHNd6uRwWhjr&cj`)$w>6$TCxD_&tZc}(5t;aM54uhc4rYK9ty z9SpS$bqw_k4GfJ8`x%-No*jcbxOd~3(dD-8Xb1JFo6n?96P35qXJ!}5)v+zF4a2UQn~ES?*QBd%9W2R*E&bJLG3;S3|t>#$;*@*fa}je=y>33 z;lB;|pMf5J-%G&!7@;2kb2&I%3O{5Bq{F`+{_leFIbb9(7l3~d_}77dSpnJRfHVC5 zOF&-*|6$Nv0Zaj6t%6&u+%WPODpanG90dn~vJ{vmU>*hL+i>qkT*%nP0!;-l=K?bsZXNjC47VIE z=>5;b-2}{aa6#z^TFuXSO3Y&mOU3y(WEa|B=N43*kK@PrIANTR zlVX?I_s~FpdzrnAZL8e=9^2MR`$5Wz%AhU_lTjbIqXFxLE^kPx2V1s)nM#5|< zpLYG*+r^5%%$}m8e(}42c47Zdz2~Ri;j`^c>_p*zoUHT&#ZG9__`M{>BJ$G=8bbM> zz)1v2ewl+)#dBpY`$x*_DIizK6_k@YD0LEjflHMq@dd8d?}-n| z6915C6i)eP>SyU(l0KXKT%k|3jGw?K@ClqckaRWaFQv0+E@j~B=(+st{W+aSJNP=E z>S!;24Wrli`WJeGuhG=R*Jbn;Ut{Qh_`00l;cG0l@byJHLjRy~^iRIV(?@(=DWs4z zLHLA^z9a(NTgel)2+>s{A|mu%Dn0So7DYl3$RE(bb zjpA|fIL#7U#a6mWRCBL=w%8`N(amDJ*iLh}|6W74sJ&EZuK1Ps72PU+Eq+b&#BaoZ zZ|FAhTk%^e5zmNc=yvft@jJRhJSU!`Z;9WF-_v~Y2k{5GQ~XiD%IU@j5LL2gCuoH)UeV zL|U4%IHi@ogAJl|vkpvuR$s?cZ%Mt2F^Xak#m;QL(i6tC{U^2Kq59?` z^3wz!UWzY)qOuc;JWxE=i5yqO%aQsPDAGxvFr5LKiAi%4PxIxZ(#F%|CzUsz<||1h z&NOuCpqZ3JX36n2C!MdaCXqRjW^xjl6KSqaB6A|mlq51srqEJrny)3*^8l28hGf9| z9u*|jbQUPp&PoG7bxi`VvZPc~6R7S^N_A}l)jdh63gfBLK7||(GV%)}{dGxoKEQAj zhF4J%>DyC%J&E+~siq~7zCG3TNu;-+b1lCvq3KDax1a&dO;g>FMEdqrGm=Q(p6VM( zq;F3(Gl}$SU5m1Ei(w%4E+hJXX3|>Go~}4)y=YH&W73+@o^Dpsx-rmDN|)}Yq~+e8 zZg$d=Z%=n~(z0()Hz#T74|FMop}Qq%$+oAPo3w1()7_f1blcO-OCq1o=vPzfdT?73 z`I6C90w}!Y z0fj5zH|N!Io!r2wZIN49S5L~Pdx39nk!?nbvk_C#}p%&y44zGjpcY7tO?A2Z;yQ2%D1Lig-o?w zzF`$w)2(7_4*nmsN*GgWEwYwc<#LO)(kf=^HC6@FY_uwsq*j%RA-7u9d}mp#8k17O z-76pNMm|?gCw+%s2lo#2wyZF`ZTc5LjY#Z>^a52lC+im5h$LvwB zhdA~E+JM;C>9N3XbWOjF>OX*30hE`O5u&Xq}-Z#VYkGuDexO>D~US z=>V^;syI4LxdV`#TSvTVan;1}bZF}kR_{L7T4Qz9oO+cTvmI>(u)A2z(S3wFjdlc9 zZp2C;1MeQOa7ng&R6a_C?;av>SKuy^_C$LkSzH2tW#nV6|D6U$K49ISm-heC4$+V} zo&!w3xS&_L4&-NWCa$Ty%6AB?LcbH1vR`r?e1r(KFVdmLvJAa9T)784Iw)Wr6vfe< zxU62@olDTrhY~cjt5e?epEsdH`JTgX2m?CRX-~^d^~r|wHOrNxZ_>#oKetipnr%iG z`YI)VZ8rsdQfIXFOl6qXXWTQfuR-r~&)^cs;;WEhdLQ!7!rt1w&wmgF_+3a{MGQ0g zAcelDISqYUa~k@z<}~zi%}M0n+cl@5&udOYlIMRR7#+!eYZ zG$Ztl&^JTHq1mB1p<6@W3YCTygvua;S5s?@rWW)dM<+{SrxezjQaBT2R{fD&?vV^I z5_i_e>ncy(`$ZEM}Lh@xJwi0-B9)az+~ zy-=^apW|Vi=fUl?<~-xOmxr0|v$Usq=x+MX)3Dfm8lG$kj;G6pQ>@Fbr{7n)?79R> zmuuXo_?gho>oQyG_7KhlnVoW8hd$()BDH$@&Go!{pX#UIJkQ(tsgos#d+WJ;l`zaP zU$al0G|GO9dc}TEa4KZzn^Nd*532V| zq3aU#T`6=;20cda%+d4qhJQrro7p(F)>7KT{y@zZ;q3&CK(b&|L6;oe$1; z8Qx0zE_`2$v_x8HGWr%*)7fe#AOM+rA_UCcXYLk*^n`ok`4i$^<16zm@hxLm;aknu zI^PE0W`-@kt$eLx*bblm_oVM>hMnf$65npb)BpCce-B^IzwO4~p0cxeI&7z#-aZB` z!K-}V%>Q@#-tfK6VFy|2gTD8F4P`6GYxPr7srA3r`kz1G+w2ecqfUDM{&A9Rj-~D& z=-bEO=GLF-rSuQ!Fh_C!{Mr5y45QRP|5*P7f2Mx|r=oSe-Jj1e#Ki0DU%XyC|NK)N zz4#0L)8qdo=8xqlW}b5puS7}a+wC9aFEwF{ItuHH8scBdx>)L8igM|HtvZpc7IaYV zotAWu%hq4+U+E|R8vj6l1&3|)SF$cEeJlJG{wja9zs9%Bzk@Yc#{X4Vt-p?Wmienx zj+oy*f4#|3d@b1N&-XWQSv+a}H7blQ6;6FWLyWSCVU&?`g1^}fdzJBrSZB*j3M-h) z3g+U(o5Rp-{;lvg`CFWS6i^;ZIESm1oc=b}XB*45F(3mr=WUtFgUX-!$2l^&4WtIr z{i6aIoF~=8GLFkR%oOn5$WQ_!PS z+jE^{ax=A;`F50>#y-hSV;|+Fk(^Z`)7|`(xh+6XN6nmn(pTS_)NCy2er+l{&ex`% z$5h%^`I=zbwY$4*i6S(Y^qPSgcuQI7;S^yBSnKjf{LYX9-KRqLY0!N?*8Sad7IZ%X zy1y8*=B72LHPa<1hmj{JkDf(76DPE+IxQqp--(r`SDY5o=<*tH+LhP9)2O`k3aflq z8r@o-xV~q9!9LdXa_)K}mDc)fSjpPcNG|7j-LqE7c@Fg+w?q11}7?)8j+sEHju%tpmnE_WC5(x8H7ufOT}pEoD3AHGoNRRTLX#lckmG0dff^%AP@wwu!%hPFLf zOZjogtB>;+%dPlW=hct(Y-+xj>i^c`&Ew;nTVGsW)vBeBb8h{V!&fHDR?PG-U}R+V z$2h-#s$Eh&SG5zua5Jy!o=(Sry4%0)N;{cNBWN7cs`dY)%{W=dQfU46l{Bh`&tuB< z?2paw>PVUs|DxU(dK}@(F3%{*eVDCpnU)VVTBEp6!)VRagdW(5 zq}kP3gnf~6*JjS?_r>9+H#W@7-An9u_HFL_R)((WL483{-%D3xETqt!JKvMBfxgy% zS(YoYJOku)Mql(-B}qjIZ|kR@#Fj^13-ek}cZq$Nk)CP3kXe|SzUnlW`Sh{7uC|w_ zi`{ii-qXqMx~k#R$L_kSl;Y#d9>~fkzHb5fSL_wVgC<*=iBkgSRM3B*m;(RDe!vn*7f`ee^Q z=#EBXa-NF065Y{hY{tV%Iu$b>x}#O+Oa2-p>oC(k!J$t|BucK4>J-@3`t5woDq~`sr{zj_Vfp}K@9>k%A*oC;;`@gF_ zqzwp)kD%n>CFvC}Kpz@LxvD_1hEQdEg*QNvInc5s+Fv9gLOm*T|A zDvqtrtZd}aCjM8?aqC61I3!wsL>q@!NGWZZ>HzpL$aGPy0Pz)_7dn!yTxKN71s+N! zM;=F(Byxa<;;ZtbX!2POC0CXl%J&?Zi~plVn;ggYJTXO1k_ECz&XBX>WMN)p)^3_L zlvrVD)=la)l-S!_uj!OnJ#SW6>b0BLvD@rcu6JVIOz!GQy~nv;>uFYhc4Aj=G4t4a z>^}m`edMm=)N4Q`=4R`4qI&hG-gn%r2bJ(|hdTzYUM-4sA9`h{S#R0^Ja#D8Yd!TU zNxc%(s)RcO?l|T8`oSFz%wELZL(XbTXBP!$W!_@g=R@*g+#hxK@Xm56)ajvqxmNx_ zu9H8Ee3(F&>C$n1CZAk?Ex#|<$VXf%Woy~ovQ0#IN{6Q{eYF`zQ)`u%zdLLypr!#=6|xg3Rin~SJDpb=v^0gcj!zVJcd=cM-Rir zx>h|GUYDUMZPYuxuf4ZU=~cl;D`T}lpKQT;R412A!ZTQD>R~Q_6V-m5&3>)*hn-Sl z4R)}rI%`wyXg?ny44lnxzVo^S^Qnx>aT#C*xAW`x%}v1)hRuvyM_bsx6|kLgvoTwS zVmUpU71PN_sP9Knb3elB<)c{B^AYUhDArwn1lv6tg&&sj5wvu4DR$Jm)7c*N zf<}<{%&2=irB@t(pFN>izaxFhh@?Dx_3m`9`wqiY-e-3RA_*=^qj8E#o(uX+l}YSQ z;(vL@ufq!XpD81Kn!?d>p3;fBwK2BxY82^p9ZQkRhmMmo$=1Hmtj|$1F$DJ%ocJA| z4e)5UpZ!ic$)$X_i&7@W{tjXv@1%mxWB;H>vDft|_78i16#J1b$4*Br8sUk3{CJ!K zmv{TL??c+FPf&6l`};kLy`~%a&i3T{zD{d&EFPJsrhanXuYB$LtnqvF#Coo3Ht7s? z#&VbAbd9dR`&>v4WycARL4R|KlWJ#j+0DgSPI>%p?zBGRaQYw_t!29H{5Vf5gqEib z`&=B|>$XUL-u2$ah`o$@Z*|$jaQ~B>^Y><8q;FQArlaNr&m_yN`0UG+GN3abz7gov zgME{hs-^n5jMe(`$8r;FJw&R{n+g!H3S9$qe>==F&PIPy_%C<%E%Vo@! z$3}zihbcv%^S2gr-SD177Nua@KR(K9k8N$F*-5Z}E0ST4)Fs1yc(fhX<{J99KEZI_ z{<)yN4F7y5nPmU`Q8Mg5UQUWVs|&ecx|TbV>cE!_`~Ko&*uQV@T1rROC6zNf8Mb9} zGVBNK%a--m_Pr$Ky(6jq3Qp5naB4A1GtVc}LEBY5s&7#mOzJF~j(UOJ>;FZVt{=Av zF;M@1MFL23FA#5wgW`SBDoF-pRQ8txWu_b=vkhj193{u{eS*w4m??}4$U?@9<^R)V zu{bE_@V_DAeVHvw6gOGI9OlSUxkxT$%5u4qd5+-svI-7kO1V*1!aqt@$!b|6cQB_~ zS%<5hQy9Yc3fUkV*)5d&!O!a=UE}I>wX6Am>$vUQuH+P4noJ&>JIW(+r}EWg^5xA@ z=XueoAVtFyv9xR^cZWD!<+M?@$Tq(3u%yzf;sf1Qu=I+u!m_PYE8R+$bsVF8j*z1B zY|(pWnUmYrz>l{}Jr1PDSImibg{YM{e@pMBWp?t?yL!C_cRXk+JWnm0V`s*YJSW(H znZ2kAfU&n2K=XTjHn@t`Mb(BZfE}KohvOBcP#JqHFmpXSX zu**7*(Z&{8$98GME*m{|SqHmRR+(XC$i}30+2plLJ+h_8CB6IOXYc4^LJoZ5k1YFjUb-RQBpgU7c^ZBKe+S=*C;59dqj z9q`O9f@L0iEj6-nD%MuuF(T~4_@5rP^-l+88{B}g&b~Yo@pQSIF~cIbqfbK4&(zZ( z9lZ>9_eW797nSngW%p2ab;l3qjI)GIuxL~+`C9_Cdz zyCil`_ZG7$00;)>OIO!HeRt}A4!r|&I^ow5&+f=}qH-n1O-%DRd_ASq>g==0@A0h| zW7qq8?!wc*)qNA6;Mtq8yKAJ0wgR;6)S%X@x>|*M75}f}dfNcYXasgYTy-^3Gl!~6 z{nPg*b9uQP^6+XfeD-^Iv{0Ln)TTHHTiDdBL8JoGIiyWwIC?Qp0QAOxOz&+?tiNTR z8@8vV-{-3snt zY@@kUxWjFK94}qAJ3KspRH-(j+!aNmDq;4wfJ>v0DA&}464hU4cg3FdW^dTmSo`Sh zY!>_T2$RZ{qb-USyV5Ey1W!0<`Uz<=~Z)B z3so_%9EMymnmIJHZ=A@}TtvFte;paizwTd}{-5W~(R|_8JxKI8O^?>o-!a>q>b_$imr9)}7iHHceEevg}C1br@ zE_^Xv1JmuNLrF^|!^3L__$V$e50pxyYA2XimKe$)Tkrl@u5MT`e((SF8MF|QnkT!svW(Qdm}D<-++Dq~tUZ?jR4 zC6&ZlKhwi{EM_Hgnwl+T+Pz#)Yo_0>J$u~i-QMGWW;vC6EO>^eT%Yi?d%I(Hna~&0 zUz!?9%Zgn1BJ4|a?=i#BPRM}}2 z+o^tk3hF1}A@ou934 z3-93eauE3@UO6?3MqfSo`YbBCc1m6rExc}jD!Xfmjvb>2`6*1Frq9zwYyp?iSLhpT z1-BzCN&yZZz?L(DE@dnH68GC@(oJ-S2@NuwP3P0aG>R^#Jo+kqliyOlWkPLAp@ICw z$)$gxv2+#dx|nWOvnCK4qEz|}T|k%co5L5m?5?I8X%5|q8GBkT;wPh;ho4R3XbN3_ z%f0rwRO$&A)Q>((=hB6A1$~VQ>3X`A7P#RSoyB>-g=ysE!hC+eES&n)EVWxQ;!3VF z=g?qo8OC$jUq{nv9xeR;)O`z_O;!K?T6^ua&pvbZ-sg1EB#ql7xi?9ZBuNsQBuQ=! z#u%5zBqXobE2&p1Nk|itB%v`TB)24gX_AnTB#lYZkR&9j^#87BFJsPBy6OG*`^;ya zXRl}9)_1M%UbnN?+B#-}olU*q3s`M-4ZEJ*O!Z|ab_cs#?=`7Rsz_x_9ctq=XKmPR ztTW4GgV;UY>kjB{tOITZ76SJHk96;rInX$vP?*3tU<4T7y?ft&A^}(pSP$5L7?=WV z4@?F20ZswV0?tp*?A=o=2d)OL18xEC0PY6v2Oa?)S7;i*xb&<$`I z0XG4+0So$*d2%;!AMhaXDDVe`mNB4j_kNZQi~u6AIQ~fu&1GUyx zQ}1dwJHk!s?Ns6Q_;5anFXXHF7QUMwF-)V3QN^fdG&R~9D~xS_#vx&ds7MrbMHA6R zq>27wgcv8Li}_-e*d%s|L#AOy%|x@V*~DyP4wtj!V!1|clST5FWm{#fYF2%#xz*n4 zWepBw1%?I2*q!Z6d#HUd$bykzrC?I9aj-SDpZf)e2ge4d1@nR{gByc|!Gm!uE)rKM zE{O%WveEW^BKUxR_74@N=QYlV4Tm#Igz3b{A@yyoQ~M(aN`z_uS%nl1mI&`DwSPDE z2gr95COpopXRBWxA}Z_8C=_-@+zv8=9;s9wr8T|6|wO< zyP#BfcWn6FcCq2}7RQDYDwGIQdL%TCO`q~(V)vJyQ)+*Ie(e4V@z@_nC43@1zjdi> zZ9?s*Hq=&1^DU^5;d4cuN)>BqF7&xlIn5`0uH4J#M16kZE}t*hSUQcW==83Vf;g4j z(^~VuSnI2di}j8wd8NWRvEd6NrNXJP;fp$#3a^X}SBsAg*C<;eO!2ExrquqVzYsQm zAzZ)I@q_+#!KDBhN*P7#VZT)=K zp5k+zhMK4Qd~uxS`kHe!Z}mB;nP&a`USevltGTOx&vkV@Rabj#U0ohr+E%l^-=*6A zdaX3?_W81*J}2uZAbF|Jm$#42h071druyakONEcchU+Jk3O6eert4pEGn<>nVR!`PHCsP$mbh%D&DAbu~oe0;hOjRe3PSDmn%2v)NWly zv-XnK>6%yhe6#ktoAvc>*5y{4CYonx*4}=LF5hlRiB0uea$-~ImbD0%p;qeeOBeqt z3w>@|PxEM>Z`Ib_s$+kv_OW)_s&>nLzD-+yd)oxfI(6FXRBo@W=%AmW4*D7Dn4o!} zX8jCyO3}P7*4oace6VwWghMg4XbSbmJF|4A@7;N<&$qYtIaQ~8s?Mn{`nl?&J)`R= zpSvY$);6YT4@o;%;yI%Bd-o9~+7h(UeOzqq(0xjYIIH9HW5ek!V{J;`P%6B=RJhcC zbJ8QdRJbVi`WeyK_+%u+mIE18W1p*^g%eAKE5zO}qg<(QQmOmbFBP5>8}6A@VxEq_ zPVIHLQVP3~F9PNokH}hTX(&!%Vxq-JYFe53z@`c>7-aK6ajc zzkNSTuphJ^V&(0z_7qmh{>nbYYKN+ShibA*LP?<{Rxk8L=nHn4^M{)V=qCn? z;bNp1BPNQeVy4Iu3&nD=TC8J#31Skp#ph6Kd?~fZ*NBZ`n)5-F9u=N7}j_+OChaT?N{%o!YKKZPzETYnQg`Q*GC7ZP#bou07hW z&tX@Qwrj7pYoE633vJhber?y6unm;7L2cL9+O9*|uEVhFh_>q+oqI>Mecx*P zj%oY8L+%~dR(`Lo{6SmyqqgpZw(BR~E}Qvw+1$6wHhjBmq3p6v-!5DFcG;G1mmTo! zvTffkJE-ik<9xg9kZ+gm_;%T@ZWf&ra}Eon=rRO|-5X3-0jY?(TnqJ+r-uJ0&7_p?IGoz!kIARp> zqBB4GZh3^==!|c6RQBF1+8C!?RHt23=Urz1xy%OYG&bloHtIMx=-^wn#W(0AcUS#c zs*-Nhxq0uKx5YQ=B>$~?T&kjL0CdnAbkq-5EK5$>kXz>^mR%d0s%x9hh}QWBe%z8y zl>L}}#cGdM9B=Wp2sN3>JCksB$7|dZubFh3fmQi#T7N(vvcyEUsMQpt#O~DFBSKlp5bRt?ibz>;b(2l_nipucd8fO7AA&DNT8+EUC75J+qY_8*ZF{2Ct!1?`eInFhBD{f;?_wpi}Stno90*;SL*ky!EvAzleUNiob_6_mMj0J)4=6e_ZPono zzhLN(nr(Y_p>Dtu5aLzGx-F=``Q_lkT!;L8FtYzpMj_KQ43iMxn z?m;f$8sFMps4eiaPPiVw*FW$Frt|BCr{Rm`Jo5!^NU+;{^>KEmloj&txAMKKe~zPX zb8;QnNpDLRRC_!2wsv8uCo~gQuSc%oLjrE?JDzz9mWlX>TzG1tMwm4tF)LQLAJ)u0? znGU|~;;-6kbY}^7BX3ZI9pOu?hY~Lte#XHOn(c&3S}sj~hU~Zr=-!SMmwM+ny`<`) zLWkDhwCcbJ+k06Nh+~-H61G(s54u_>ahi;HU%$Y-Bfs~2O?S& zOq9%sj6*ruJ;ObvJ%>H1J&Qf9J&(Old(?Y)d+fyt)BOjh*G?Whu5N$ZvDPHc3~U=X z=7{%X&+9s9*M8dm;rN?=Fm~zC&TE^Sd{%kG?v~zOxpsT*_^$9`3f>FC57a|qLg~Wu z`TDGOe{#+f_p2|=Ezay4zY@ScMK#6e;nQGv?Y}QNc{sT=DV>)*iL>A4E$q!%MIev^NY7xs*1RZ567De*hdRS16h=Z4=)` zd@EG%;EPLN-fuC`t;;~LMiQ>6d!EFaS$~8GT@SP&zOq~dTplsIdPt~soDzM)Dc484 z1#!mCkdnhKj((?Xxe#$iWl+np78g!K&9@pHxw%W_(h@d|-S6DrZpbdluClJFJtscs zUGKW1w5zu_cigOb0&7oeA!~yhsT*7yE9cMWdFNB-;pb&`KHnG})V4Duw7z}S`jSRa zNmPj|8$K6NRy!+s?zw(MPN^rbbI`T3LG$wD#P4mw+eG za^ZI`ar`+ue1dkhlOl#khD<$xmr=AS$r|jrsOge;P?tOkdD;HOrGcI}y(7aVz6*VT zI7EQa9?HCQI^W9>kNQnE?{-2ijUK|DWlj_Ipw&AZmpl*o{S4;t4C-Et$`y`76XVUN zHSu8WC8@?KpaS(lavv2dnsuxW7)@D8vT$SX-Yn6+3v?60Txft_u~gtzJklEmOQ#A>4*joZZV8w6+6Z6ZhuCdE8*bLyW%O_m&$8hoW*!YQ-*`d6~EIkib^yIBNt8GF_UqtY`REqUz_ zpw#)v{%7HRG%d~9zVp@DKI^Jtlw`UUGVw@Jeb}E4S!>&_5W2jX@`nDK%};ocWT?kz z!cFM}acxz-jXtZN2oDUX21;({R+yd)w;~e4uhYH~W(*l|!0&4>69_}yrChzA|0`RAE7czYd zlK!VS4V)*FFm)E(g*%@w&os{;qnm)vOu$G|l2bs*E$ zR+{u_-7$!HcVQ>C`ZyQ3nX~`0ETX+!J5Z2@pK*;Li5B1iM!>p)?*@0f`UU~rIzMi` zk$C<254f!@jgs=Z4mDBoe-Nrvy%(Pl>#GdNcMyjwpH;8dqH2%0#Olo&3H*B#TjGa? zn;lVT_cR?=&K8s%{k$J6yz=fcd>R*ke5@?JH6MyE?UXb*G4lk?iVUkHuoZd?uUmvY z4$Hql^dw$bv0~~k=APN1F9E=H7v`0q`X<_=a;~>bhp@^Uc|1m0lHxt*IhQ`8odMF3 z>p{HCMwVX9pC1p--#dLYV|Xk03T;^{qCLLP#1tMjbk&NqUd*4J%qN1c7sjQ6Hfq*z zCS9!x?;b38aWrHFu%2v`Zqmr2!bu}8*9We;5LMwVJ6;|q4~ek_XU73#0RNTR>*ure zy~e%Uy(c$!iI%3Ct;I!S5xbtYMe9bgbu*EYVAM=eeMARbb-Q{``M&Dqch9gjcwO8x zq3SZ%IQ6me)7f(ikH+>TUD7i{rs1}}@*|zY*(=7Y_>Pf|$2DAC*fXi>T-U_;p|&N< zW1TIwi>jM6k9qg8_9LKUR~Mz4Y9Q2-kQ9{mel(`yPh7!Oe*C&msJpZkLkSa-_m zjVWhFf|uzi7dCcmYMF;^X(|{quVb#M(;BXq;bbbd*YBT7OM1@?i}BVOlavsxYlf!a z4q2*K9+jyIQ{sg-mCY`3@Q6uMkj1Qy%AD8uZ5>kyI_E&A(Rw|3YmcmreL8}BXdCb7 z#HQ($<9+KhuMa=d1l=X{`J>O5u2A(ojH@u-boou?dlmjD`90Qq8UBcg4KCi~y^9C0 zFM55+=K%Ow^_2+7?CM$Hw!LV6;PK)ElDh^ut}4BV*T)5Rc^+t->>Z#Ki&!^w#>blD8I4wt9o8_Qy}XKI}~z4b4}J<8>RsqN@pDwT)E z8DsQYB>B`gIby{5sYDZnYh&5hSG3#n@(IoI!0ao3rq`4EtTl*^_|EffA5b(dg=q!87atP1P8 zOyggM3Wl~si{0fC{{3!lrPb-w)o~AHQhS8PghwS(Z<<*wSH&~O4>uHNYFCyE`nODn zfb?tn;pLkGaIJf&x;99b=d)cuqxZXa%{044e$jNMb8+yt-geR6;w3|0z`lnHGycAFmJIyABx+T^?p|bt9c;Zf*pDT zI&6k>Ic$!cD{IP0V}WT5>Pea;zp}YevTxs+WvbPi#o!nS#$Zq|Xf9t~#&~o3yup9! zyV)H6&(zprrSJOB)EcqjHQr2ki~@sdm=xt~ufwobFaBL~BR z>9V(t!eVaqOQuqPNw{| zn5(Yn3ZHyF9Lt&4i|Vj#3bj?>`mPze=}B+Fa6SX5v@2bZ;;3euWK6ofJe-ARhG%yz z*{MgWmNe6OzHAw~S@0b=aNGQ@X2LV&)%F^@bQ-IyD61V?=#P(Fb$X$z^qc$T!ge}E z;M)4h)!e_Wfxffz(sXC=@MXV&)#@cRviPl`G%;|h=JqBvdT)5@$hZuE^efLGoMhJl zPcP5TO|v|i76ny8GIDgI{LbwcUSS$Zf3?3H;$O&=xldeQIX|{N*;nD#2`3#_YDeG~U*(}RCLD>W#QE?_sjp@T4~vF#49x{1JR951KW4oGz6)GUba^=6I8Sw59lmn7*KY)va&x?D9m_S@y;iX=q=xE! z>X+}Ab^pD)zC8voB*lC2`9U9kLW0U{BGfB8j_P#^AIoC&MO5~Xomx>VF6DB68-48s7qy|=nwMito&h<#gux5Mm^}+!IX2yp z`7JazqqWH5b9SJePk!ehC6hH2W9REVh(B2Vzl8gr{0VymF`L?6Mu@bXf#1i24~KD- zY_noLt^;SvX$rFVHgL)?^ksf#ee;TU5WNY_QZmnZ6df>z>izW+^0u7*lYTj0lMc_r z9N^IUbq;hQvOv3#TH|=`(z_h+PE6}z4Ak-0L26TyBkTceW;oQ3WSwb_$qHP4G4m}1 z)QB?&Fn?W0s43P8QK>{0UEq;m@MP2d6LM1CnI}c~59p*y;R(r^E-}!uF?@$odW0Kbt#l&+s=8^nHdI628 z^}`87TSX4Y)8%8$0-*9&=eK@1+)}07TDi5!_GI9%w6-A^agcf(BNJWg|Fqp<)~_P2 zDu@WjBGts&QZ!YKK;%a+`IM@laqdpqNyaSdjGBA_QMcPX!%EGxRHGg7{ ziO@~T6@;V4QGE(CpfXX|2^TdC8p40)g(*_phQb0rt_sW2oJWo8;}%D)z)h^mW2men zB*y5h;%P>sVY@1hMX8pIEb1u_yPq7(HT6$_V5GcLkEY_YB9n2ARW-$_N5tw_WMM|L|62ng7nj5(lB|&wYEZZWM+kImojwK2K8$q82Q9_mv;GtjJ zV+z3g^o-^B3$jJ8^Gsz<7zz&VLmM41Vcje;k*;U6r>n1AjBDZ3Op?nmxn-#jWgUB^ zzBwG4%H2iW+%P^f+YA}2-4)qH+WqE8bfMxH%oXB>SJ*4G`LJu~2!G+=nAjT3x&GVK zhH_29ygtCKP1Ef3%bN8m>o7iTWpv75SPY;To+=|DyfpRI#aJbYDmod7C9Va#(1>A^ zh((ebXFdVV*l1I%uGC6$B}1v1!Jc?gw+P!c$-EBVK6n%|BbWFB8VkY3i2J)Ev5Bz# z*Ma_mfJ;!0ay&_S2X*tnA!(FqJnm}8a8uNwwIE)h3i9AUdZE>-XhXF|**qe&`4M=hlM^JX{3&XPKu;uBkvKlgKGH_HaHD*kG zU1e#Xa>cD-Au5DQv)kj>xFz2#qt>)L5?v|`-OiHn4 zOIjC=Mc(LxSVE{nuMaS30 zEMW4N6qTf3rfG{^+3}y%bhPr-pw$FpzKPEw_ypOaDJj!TUHPi=Sj$C+O&u!NM7$&$ zN<7V)EVMFZW8M7K#?rN+4ZC;=IB+4~)OAVXi*4!RTObqTogp)bp(HbpX&S_eX{1?F z4y9R~K2GgpJ?3&Dv#)yhZk1|Z&^1s-v#hS0Umy;hUrax??$bUYy=B}K@{H-ocFXqu z$1mm8_s%iwqwzOkjtnD|&o=lcl-+hcw$&`i?fQ)i@KkfVg#Rw9j zfaxK%3S=RdoRGoX$N&~}C?{wuH!_5U3qe4~y3oH~B z#G1p4vEvS!5Kct`Q$tb}bbT*BLhy4&{aH|;^q~6O(O?#0C<(|hXVmYK5`v%Gj!1ys1%ZfG?Bry5U@g$pynqq z7i32vN!T41TCSiQREG@x4l2)ShuJ{`+5XZ*1G7P971jbTsUaM>+rq;k@fbS{AX`Cq z6etk@vdpRQyJUwn=eDDP86b@cb3&RJU_Qu=0{gGU4`5h`Yi>Krjt+=8*DA0M3+kz` z7H~-hkyT(9T!aI&LdF!>g%>}9Q6LNoYay5Xkh@%~pgLTr8i@SY!v`pWLX+U)ConMt zBi9RYM;Nr6YZX#Q3Kdu2_rJt~kSe(R0v2I*j6meV4+K&$kdGjE1s9=3Brpv`2o$7% zoa^;*2M3h>YY`rd57ANJ54xm<$mbph*AYW)K-q#1s8Cad+h2>YU<}Aat{1wfL0s77 zKM{9CdZib9&jukQrkc>DFsW9A@LtMm8!@_{x9@XEevqv4-vSD~QU{q5x6lEAScvlu z=-?JSKrLj2j4RlLIPgH0a|?tdgW{13Q6P*8e|{Yx7t%qh6#fVvd@3Y{`~;aROyxL* zOp!{tf({g>atnkHU)To`2T zC;A1_@ZP%fFr}6-rL^=F5vi;ZsTgWNf${8t@pu}awP3*T5L^X7H{g;8GM`fsSceUj z0)^y~1UnEwITSkmF3}*ixn3ymgL?RNIUkqE(@*s9=xc!&%nl0ZDfc*}jvSh-&>471 z1%XvS|HbuThYqAC_<#%*1R>;tRF3de4H>0P&@{fzz2mzWH0kDo8;wXcze^htj=n)x z5+Z}51EXs&9|30zh}cczY@`rdvs9&b(cGzVdqxa$=O#?fF;?=3Q*2PKaUmWh6 zZMA)6Jma%ia#5!^0?s!X5wlK;BBCb-KN!#GES6N)DT;&hb)jN9kf=u*V(_!^4DVuz zb)Dj0z&KxRxX447Kpsb#d@x0-9pyq{jV;x_odKtxGunV&(NrI7X=WzM8G{H>#SX-_M{~w<`ihTTH9f80CVc zDI&l@|Le=$n&Q}YEJWy#Y3t3|mHJ%8=>;~M$FWj9`Hw`MvT>#-)}dg0Wo&Fr0Hs9fX*^LwcZ6xjWJz|Y6WH*wWjy?1c6w`Dn=k?QDU z`t&lMn(8>d;5iZ&t^Bz`FLiw;o=N?`Dodkz&8SA9r?)@+-b_wM7fsvDUpAKO8WD?; z!URp|fzMsTlD8y-Iy%7BV^ZzW$)E!;(hg ztd1>l2qX1O%^Bg<{oTbiCJ6U5LvI)%9j4BaH>W7PR7)^fs3$PFrT%lxA9#REl6q&C ze|L9r)W3L*)@fsaLR61cf!8I1v!08;2pbu-eCOlcRCcspur@@?2-UDhI(14xF(~J_ zp7etS_Y+%N{xLo98W^2KResvFoeXrDqqR;|X}(Ucn#lIUHj#zX2K1RlZ=&2?vK#Z~ zZ!b=}uks_Tcf|}7Nl1(nN!h@+O!2qk9rx?^$TH6FtY#qI2~W`0p-;5Fev)A%@go4jvaD**28lq8!~_S%5MNRx+JRo-X(>>E}$nx>>Hyrovrfi# z=5NZo+8&v>{Ey-H(e`2YQT7q`F$g{oAQHe4pb~tPKtP2z{t*1a!GdJhdj=!$!3T~6 z<{9pu(C#yh+7~OQ%Z+n(k6}JN+TTAKi8yeH03zsLR`q4;s(n)bLrP|D z#oiPm6GDs+i=-fxII~?{uMk%co|Uwzz&DYq^1Y7}ACgAwQQr_Gs@?ihfX{O%9$vdO zX!KhD7A?^ExQzdH)+ZH^F@#UiBM{2=DLIqDYc6p;;*IGy7quj+#M>Qs3ErUzIgg_F z2l-sbeVNyT1c072Ex-6%xT^!FEhOM~|HK4Sw?Ha@TwWNfp73`#?)h`5w{`A%byhdh z<5EQ<9H(Y(tx0O^`RalO-S^rhsx{)*OOnqqsrX*QNgq3PrTu((VBvrO)J_WDb8r3o z*BbUWJ8~P&%$ewkKOcT0?SJ}T1Lu!}k_(WIx^)+VD}~I%qo7tj;Wt_T@%SU2pLDC$ znDoYoqcFDz1a|evf07vtlbrojU;(St2vfS`t784DjGaQ2IJOK;;{S!CCfx5=z3_Tz zg=jZE<|h67Wk%V6eTqXCpkoq@NM0ibMY`%y*2mKLm=u6(@cEdHm7G0@!2r-+fYF8b z?0sb>jrN`YOT1C3VapA_7ILus)sBC`s0g_ePOtx`4bL;?X|U%;^0~Gf-0@FgF*qzm z5#-b`(AS?L#FN5!6ew79edzW=zp-q;VH!{<>W2`{9S$JWGy$lzBIA@h`s%4iLk!!D zYT4P8-a`~DkzUl;VeKL?dCY)fBuH3=q70i&qaL;Ul|^3{W-^&zG)?kXB+cnJ>bI{= z`_hu9a55ic;8x&M;9Alv8}2?7eJJ`^xDZPgv%%jFyL!4U=nb{B>Wh8Nil z^_=rRr0xXY2VZ#KAYW16;tvrp@~~MjyeJwUHIUuV&w2F;^|{^)dD-*g-=!SES_n&pQ+B*ZorTZQ22Xh9qhT!$#9q|Eo>GcT07b+5SX}Z1iRK z8o>Y0v75i!ryHgl-m{FkKPbJPbP=iaCtV35Mf$={}na zJqeV1?(eHH>OPDgR4F*l2>{dL{0YgfgS4W2{r3Sy9nd_y^C=>$a+<@%w1gM_NJn-7 ziwQTk@zgG30 zBpHU3U!!$`$vIFf(>`=5k%%a3`dR{qAfa4}Q3|(TsK@dcZ=!{ZAHO1(CEkW-%k$4A z-|srLEdgzobX93R({(A7O`rsgD3&-QO+*=AgK%zY!^K6r*4Q8=eO$HCcYthiQn%kQ zE_$Cx5;hm@xf1br_{>P27TWfa-$EVUA3F#H{ZwEek=fgMcAB0o2ypO!l&KVcJfkv+ z4)qR3k$ooG9*$)}%|k$#)FI$sAe}1tb{eA~(g{2+Kf<|{EHMB6=wDcYilz`&nov@& zNU9Q1R#;k@yW`8%xR_x!T8b1GiLulFBKf&bzxInNS!R!eBplHroTul%Lc9e6Ny0^q zaY1|n^YVXq1Qul_#6pahD)Sv_#*hz8jAUyga1M!#X^ zOw9xG4WG*O#@f`YR>|A-)*aRMBJT2aoZUHs<~lvLvf&=NCslkBb>1vm+__QCXW!Ajm@ z8TWK)uYKRsu6Pjd$#K$Oh22?64pC+5OvnQ?l`E|_$*w|9IuXb*lh{XM<>C7o2E!q! z#rHI!#r{FW!j1K6ylRzF^Nwmx zaexoZR*ZQT^Kj1R=R>d5Vo!pp8W8RxaRly@Egt2$a6275y0j);CQEq=zVR>$k!Z=S=z*xz-IU-TB4aGnWUJJ%MpOZD=s@0 zby`hyUYMb>>i==Z|HbRP-lFH4;*J^M5Gz@7`>|Pwh>TSZDO;c_;iKW0W8~s&L4?cW z`h&^#vMILFqBlT^h=K8@3rBWM9yt1owxyjl)D4#e1$*PQh>y~Z0jcV>|KE9{-xeK4 zDaX-XS@PjY>f@K5grqDx&-6l*=#bOgX1Qdd;3l+4m7(mbvg*7HUf0v}cYYV(y3_bs zVr^Q^RnMJ~byOfg^EKMGxnd=?4!JAiaw370@qkPwW?r6low?t~Y437dk{F#6MWxJ* z+PGnW*SqC2i`osVJ7%HqpLugN20K9Bs?k`iTK$F}=MSAhn5nOOQdyqfVKH&W-L>1! zQQcKG^ffQlrV8bpVdhqRR7z?#X=MP{T#52FeD^$x zhu{>e|K{eMb;x zdZBt-pH62Z#Xm~R*mn3I%8og<{LH4$zBWJUd@M%SNndL)IhQ^Kcvm{?5BukWW$b%* zaQm6z-qR|NNG;M0Q_x;3MJFg3vD>m}bPN=$T_<(tuq&(+P0q5fWtBsOuh z>2;G9U6@fdDnA+^E_d<}?7=muw3zE!I~Bgkx}@1_zlv>!XOgSuQsQG z1_|cj0!jUJ{#-Z(Kvo(Q(bQ!z@Nv;d)zNU#(*87sH$7UVg|{_P&rS!4P0yS=Jw+k^ zL~{ZR`|T6lt;&*;MpJ#iq8XfL38?w4&ngJ^LeJ^2G z@ME<4ZbuvLthS(%Gnp-RE{gI>f&2*?f+F_?Q!I=b*?T$zz@mMbOV;tS zlN8Z@J1@4xZ7$dC$hMicRX#K7wQp;xJ-d+jvqiQyyo9VuA_fsBjJw#$8azwn3rU71 z?L)-~;I=Wk{7K@co5OW>7N;R!nm+KQ(Rn?zhiws4MOmjJ-DvUJGejB&A~dxB!OR|U`|MPkmbi*MPMLdhvuQ(>>!nkv$ohb* z9C>M0>p|-=GTIAn_F}|tX}>{g{uj?pg;16sZ3~SPzVM+%7Ob|o@}!F_(sgc(+*K0j4NzM9u$SP6x}gA-4w54tz24(7d8KGzgx*q&Sx;?-%4VCSF77L#|AwT zwy8!e<7G{+ag{yh3_Zl=t|x{Pi-LWSYG2b220a`FO!zUaX9?}QuyY1qjIFIEhc7d( zENu#a1=8?3+YH0aCCV4W?PRU*2bpPEo>gl9zSF(L!-qxGODr>1Gy|TCmh~eYu;z_7 z%ftaP+~q0>PZ4W)c`)9cCgL7SYV+!L^FCQm)B-9ISCG{x^JeJUHx4U2;>cSndVU^0 z>W2HG{K!`l&$#G&m};$h-o_`^rh_W0!)XnmM!MY#f8C;JEn>+f(TcKt`uZgT;T&z7 z!UV2``Rlnq7|u;6u!GI_6#uCS;RtnxmPvkUl%WkFaTRGg5UYY+sW?{|aEv!?uQQxg z2rJ~+={%G@%At^PH&mS;oE{tt+V}#-95_eMdt#=v--))!B`V=gEGmsY)Q4t@!OH>8 zpIu))b@m0O&r%m(MM>{u5nKCOJIAj=7KR(h!!+Z14SU zw!TA5rIOFihGg#sj<=&cy!umAwf>gm1SM(MpRMKs6*WtTLYcubAEM`93xM{4Rk zzjQq&@jF0cJx%Mm-0ARf0}pC>ik<%9Xj&{RwdkJ^&cyI#J#S2b%ldYtrrY_;K>IMY zKkw*h)Qj|2ejJv*$`%g6k0tiNu(0M{O(H>!Qv zGu%$cB<^J2Gdj(Jb_)N+hh!v<7Xtj=vdcldjgid;nq9-nZS8$1vC0Aak`FW!DYBT9 z|Cv(!q>d^~H^QDwA)WN!#u-(;I^I^!9?gjaxm+$CYp!{NmQP|w0@dYKLVshF?vggd>UT7 zrB93K>&uh)+0+;gW!6F-F0{~LIKYc%iZrf@`+#(Q>pusqkr$p9w*yb9dgojB(iw&? zcYnAKP>QV+rhri@DNi8rj~$z;dYD|<8QL7_YM=B$$*%L_LtUlQq2q`(@!`)zwOti{ zCOz@AuH7Uw9gh#zARyx0&f%NP4(_++6o#+w9kOaU%cni9Lprz`ncFxL0 zuxFQ=ecwC&XL+}I{`dL?&C&n6;WlAL0)m>f`YBi!(#)s5UEW6J**J30Z3W$c8c{P9 z!+9@BT?yQ@8cDvmEYfA+KJ|0R+lM%-A}7&6T%-lKlo$SU;qFb^O7bh44cqQr3Ek?~ zq&3KMjb~TxH3nwP#9LtNNt!20Mm=h41^?W%_HEJ;!kWaaVe$Gm#m>z>%?O|!k4bmP zWwJ?CIXYQ1r(~_Z3ZD3O9x54h(LplgK?!uoV22i;AMo3Kc>2h(wjnS-E^zX~%|TF$ z*!owgfM;&X977Y~^k9p_n#cjG{|fS2uJp)jnK#~9nE*jEDYFSr4ZG{}4#FSbl*8fM zZX+2Ol&Gr!)00BhJ$d!(Bl{X|HE1b=)K8wS++g`lzohj-+LMChrP+gwpd0RHB>$NQ zj%Jx~r}cJz_rwgK2d3VeZ;eiy`*tZ~Q?-h=#ZiS;AiOw-0qp+wyJ9ri#BA4lagUs$ zr%T52As}|)ACG&|SSGPxe>NWlQ@zItM!_J=1`1AmDF5lOZrUXgcR|P8+d|sN9Ay8T zd``7wKUyq6(S)3%4F6%`ccJA%l+aqBC5g-vNMkAPvjTepT^m&kJeG2mVd*~N)n-rO zdd>7}AnugPrgk3tDyhyt-a27xrb}anBF+0MfMERXW75kc)Rz9lMbdJ-WD?0~UEk4% z{B790j+i)P{Hs0B8dsN9UDZlfduzK?+K<1QA{)o5?(ips=G-Wz>l)e+2orU>>rDNG z=v1?Ek5!lB^A;hUjTF;VeHCB5j2^oCBFRpPi*^&88~hvg*7>GEN&Pe2s8gppmCElQ zz{}i}=!8?{uZ6#xpTnyT~NoL z!Q^72Ra2NW*nX;3l}lta(bm0zNb3m(py8^XEZ2DDw(Z&k0yi5lBe{@Xhb{WIh9vRI zi{(LUQvnkm&rYM)PNIpkXz8M;bqYkBhi`6Qh(V|hL8xB>)|Y123Bk8m7&>5d8QGt_ zG(!f9i|MYZOZ07`u+I8~9M4FHo9_?~QF{~MC>LYSrdBP2ZSF!ajJ51kCLac1ZH^xs z)y!8bp-N9pf14j&!RR&3`H|XkuGE*J@{^h{YLP8VvJ8<3C*lwYL#IY8e_Lc8;TvN3 zES)Ovi^4a>z^O8uj^#T}jPXH??VFj>W-Qk>jJqIXtiU!Zd_V}4KbH7&SnK&J!tZX_ z-4DkYdZhBIQqP{SKdO6LRvN^CrntN^j%7k!7Eejq1fJFSslDO~%dlsh z!nWw4FJ6Lg>TAKRiPYkbx=$;P<&eoyS)GmAANH&4M&*SkUXqsDBKTn)ui#hqqoQ7U zA03b1W%alGvzb|*N0DxBb>mxPcXTLDU-OLhl;=q0jQdUrEHaRY>C|iiTo8{FB*50T z>kh$omQOSMG2G|Y#3r7X-w)lKcC}Vm6{$KZkt}-Dy6m497U$PDNk1=OI$(a=-zjM3 zCrTZod90^&xiOmT_QeQy;!!k$T>8Pe?q+4D6U*ChDbHQtW-`H|<+RYYD92~CVGIG4 ztgkx>E*1}XXWcpN*kWSY!JuIZUX^Y(W)=Q(yR!CrffD>FrYxHg}3qJKZJAK3>xvOD4hNh0go*>hc8z7`(z zp^$z`9!7@6;G20=S~uY-Y!I$o9KapXE8e}NXTg<-NwV@cnZ-Q;#%4K?lmE5PIGpR7 zs6a*$rupIr1=5DZy11BsAE?)XZZ58B5GOlzE3YNuMDr{A>(&h9QTQXRJmtbqZ&J0H z{cmx`TwR<3;ag6otk-N!TU%H>Qe|BFjMJQEP+-?6Ut+|o$h7Q#@c5k7Ve&{T=a)UG z-&VP7N3q{LeNJ@;YAGqY@4}ryU?s>b+xG;GP?j(n{f{tFi&wV9Rc8X|&yP0W=!)>v z`Hd1&5OObTyWDyT?hh#yhe2)CnBSjn#3*r--yo6R4 zZ8q|ka+@^6Cy`^}%`}`U!Zyxqcx!h9`FWFv}sx7c#PZ*&9+6CMZa1FrzEB_e}~Sg8fH13 zdY#aMV$FspfO8AABk*zSmwZ z8|NY-hwkG7woL+xk`_Kg&J49HYDGo4GF|`dYOaT1ic?2crx`QKH2$`qIA!ABYJdMR zXgg$~@^W$%7m+koxl7s6d)C$__0sG5TdvUNg;#s$x0RCTU1oZ|$7^-YjQsRfBwRt& z&tmyZET}be{J4Qu9MyFDTi+wkz@vFpnAwD%YKFKIAlYoL*~i_BpL(?s`Hm7!C=1UkwKHUR~>WG zGIZgAzm(6!!TAWXw`t}WDvabHhgvhAl)_DUCS{K=k2FTk z?wWD+4_~OZ`Nfeo(XXCTX(~@SphK&xWR(B49;|3;3q{YhSri7+ekJVk(W0nuK3sw( zrPl1l#j#b+Glj`CCGxzVYPdFgpFKd5N|KZm@e}m3@W-m_$hU2?$F7N5NiyuDq=(q} zaIWqjR@+!zKeLs|2jslL%3R*jCCB|l!2ig_(Oip(m<02Yi?dl08?pbr!<8(k1xpRE z|6t?iM?-dWasV4xqanLxcqcE*>2P5FT7L+?O5qo|_ld)tx|M|rGkrfnz+8}wgTjyw z3BPvU62*Tiz@z2TT4v3P7&Lln_c0@ncAW^hT9?D%P=C7Gm|nfOZ4lt|;#xfpiFw*< zd#7fEEVrfa;cvdBKOGI$UzK{@+#CSzU2k^J*LE)U_MC6t==^-yon&j)%^2i&+2i8? z-|A^`+t%LSHi4tr?Q*7=7~t&g>Ea=0oRJBm`Kg#|a$-KF>-YLuh~vx}(2}|3I-$2N zp9xUC-aodGqgM2%riU!Q99%q_2*K zC4DoLF|+i&ZW>w?t(tJd1C!Pa^GC|J3M!MT(LR2Z zpZ!`9v)UOh`oz)WrW{8M0|v^2kRf(%oFun|#lbXIdT}I@-?RgoT0kv@dx=6!BCwj* zhQCkU`9$${KEgB21YtLX8GjyzW^n&7JWz@54BlvYk#mhF&~RO2nKvn?O7g z(u`B*KuQU`=mb%)v_mP0wcm{5OJ9&aige7Z#iF1;m|4~{kmk(7g-CoNAr^My z$nZP4?>>&B2Mwcy=lz6Ui^yD#aT(Ss?XF>zrAml`$hqd%LUckfhsQN0wfLWI)5MvG zCKED5hc%`5MVUO}lL3(XL0YKc*F4=&Gls)FLDW+0zcrTH4;2{-IEJLb5bvZqaYGsLhgEWXFE3G>QuT?TVSohyTlP?bRKpoA3GLkjX*w%>zx~WH%@c^Y&6f;R{Z> zp`3O|?C4@jJ@7BgzZmC$GW9$@ObAz|S9h3Y7fip^h~cKgep!d7uh@g1eO`DCgZsVw zd#dPRecigSe%HjO$n2i~Oj+*`<7e}T> z@b>RwuuI!j%ctIRQ|FtDyM!$ftm$KcqcLMnScd>S`yrREZbD1+Of6I(LsEM4;Xl%tg<7c5fmzFO_iG^8Fy(gTm$S>M(`aBHVW1X zx<@P+-i9D6jPkEs^o+uknj%x5cPrw!Wc!cOlIMXrEy68!(?VKtbEwPOR*t`E79JiC z!>EUK5YadHgKe-b%Q;x#$K3R-`;w9j&^i(<_rP$Pi*A3mwr{eAwFgV4(nV+|1BjAiRP?xv1_|t65W<4| z;Z1=BaB0m*#>U4~=pQaQsKlIa!H%y)6l^cooVV_onoH(-s9E6m?I7KO8h*+-zCkl0 zlKk=dktzM;vC5^KKXa?_jH2dtv<`lxDW7=$!B>%K+TYm4t;OPY^oW`aYnezwk=ed5 z1)7#S%U%`8in56-Tumt}9&vCFJB}$#ai)7*-|zwaHk0pYUM0n3@02!UF<+va>MBfNe~j z%zjX?u(5KmvH$<;(5RPY1>2(Y9KW*#CtG$ID~9Xw(}b|R&7D4v%d*Y8i0xZ+W*^+< zz{M}SHlEtm+OMCrB`{-Stu!fxgb+pHbboymt^NE-FxD+Hv{xU=__JGRD23n`WK8${ z5v}#RS>S<*fy}B0_Rb<(x!3~3vby6o%{537(ZGb<-fjDY-0hC%ZDitYsrcQz@1-9z z+Gi(|{C@yfK&Zd?;9LLEZ~W^24C7zBuv*`K{|6p^>|g!$qg@E2U$x&K`RI!;y!@u$ z`J7$_uggo>rcG!nU}+9 z$V2oW{<;00e&SPK`1pT&_~JK1`2AlGqxATbAA8{^{@|}X+FJi_wCAt?q}>=@#)bX< zto^?DkxkXUw-PPkG^pKFZ`P?htdDA@qg?3i!Xfs<)6Ae`gyDW zSFQf(iy!-c>{L|@+h z?i2s;$J;ml_fYzc5dQHyKH~TZUw`<^+si+^{LRsSBz(hu+BkuKUhNx~-v}3@V9&p9 z&qv{Z`y2nT-+Ae);ctcd(Bk26%Pw9BzsxG(OQWxZBuv7W?BB4d?=RUn&l-kCX`YV! z?@J;2r%(OHpZ%siTYAF}|LAjX3vUUhm%mLIf|pnjyb}Jt&oqqe=N@;ybSU?&oLWh& z)K*e|mAh7+(RHHI=)1QPTX85?`Yx=Dbw9UKTFG?J`?{%miN0%Hk5zYQ(_pR-em}0d z<(2z|`mXhTwY`_f%1E#b@I0pamBt8~_tk!fzDs?3y+<_1*2)v=uTkBh-PX!funf;e z`kv_C(`xViG`0>4EAO%LPAg|tZdmzKRvxi`@{a#Q`Jk0gTX~m?*MI&>dB>IOpSaTQ zU00re_{#6s7PR+y+xHJx`H+>5T6w|Bi&h?2d7qU>tvqez2^EL=6_$}<_XpD@)7mvtYKs2Pgwc8 zRvywCo?H1oD_bkQ*0LLsrnXuuzrWOfeZP0l%Fk#G9A|e_&+)NV{hPwSihB66d!vpIKBQm_1mT2T|NJToRjl07|++c_%6%j|8e=C*5B9oU7FwXT6_O~pKx&FyC{yspyITD@$z@^ z`;{x#SD#<4_q{xSZFz0|{~wFKt|3)cYF)n;zDC9OiSIq9%Xq}SJ@CsnjL1(4^)v8N@9(EkQqOwWSg^xwV*oF6-HT3PvjqQ>~5#`f=ruYCX9i2L22&2|52;n@59s-FGihUlGIpz{o}!{y&6MwG?pSMcfeZwjWJ=IHZx-NNbO zp2q0}*RcPt@@F6WdCmEMzF>Pw^Laww&*{1A81GRZZxZ~^>i)2PkE-rob)M1O-XwT$ z31@dk4`kj_`0+koH+n!DF3;bs`|~T$-lTB`o#4LazSdkf>ic!N9&o?bc;4=l!r}KK zXA6z*uxz!KYn8di+6yl$;n($|U$XKyt^6I8uUYv8wej+2T*vo+YqP^14X-yFU}k#% zB%Fnf*$`RSnca2GEQD29gd?*OR$*;+Lua;6ZZ#X!pIFVpK2O3=h0lk{<*Rm`o2Ag2 z^_ALnrte9(W44KxjrHq)8~YF8r^BDLmM_`&kA%;Jp9}8~UkpEB<@xY^;XP(IzB#-z zyes^$S(@K(HsYgyW^=wV{CIes*(9gd+vmbxGsy1S_1>U93-7ZUA2++}ar=He+{5Q1 zX2adJS`XRt>o)e|xc8{_@T6H*Pnd=Iq)$!-knh@cS>>s1F%jhR5*M z@b2)OLG@htA%p0B2Ez~9ug}|P&)YqJ_Cfo6C$1hh*!}8%i{T44mnz&gn2)WOpAB!f z7R&IH;ctY$ZFuGXTK^0CKQ>EsVdKxk*MQN#7kX~K3Z$hh7X57uwT8c zN^AYMHqV*$o7#16ziRZlw-uXNZ<*c8Yz0bN)1|HFL-v{5|H5iCR&Qq(ZD;pi3Qt*! z$IOPlX%ujOV!iAP$G7csYU91p>J|o93kW8L+mmo^{rh;n-nG%p!e(At{oX!1Tf55s zYwI%x1+{kP_11H3*Gv1nW$U*w7}hq%%3zz}e`>$xc5eyDPp#F$Mn1B7?i=W=?J4MW zWvg1-eV^Tj44S#sa173D?A}^ez(t1^E#}!-eaCKpf%c9Me=@gwYwInw&$+?wv)vk8 zj=$7uZ*4rAw^4X%&ttRHd+TS9-7vP%b6bp9!begD z_i!Z#4@_izMMfRoTNW}K#h%({VSPL18nhkT(*$*Lt38I2;`=K@uLauE@f+cqJ;itu0m2yA3xHv)I*zx0$jZntVA!)27-RN6(+Vq>tL_*pkpgcc z^pOL)0Qz*SkF9m4^@_1RF(4$gBm8Qx(i4oC0^UgTO*Hed@Q?w=BdZr{?K7-Fif__b z0SIziqX?^+U`_#$#i%*Kb%OORP(KpRBhcL?zWq+X+{RchVrq=B$Dqy}>lNea7_dfv zf+JuR*>}LRF{mQf3KhUX2}x6{hZu9swGxT#tjZ{24BBHG@~s-OWORTj$2c)oILBz? zLmv~+D_14Q9?t<;ZFfs3*Ex38ShNyp1`Zo{YJ*m#=q*Ekm6aT`bxO(ct3-lrP%9Nxr=Z*l+;d@^vxg?p ziLbjfa1I)S>#nRPml-Z6oZ@yqN6f}oI@T_3jOX9BTE~!G5p<0+YnR#88m()8;Ad*T zoLlGM_H(Os&3I>J-2XP@%~ZNZZLM#a?0VRwb7l1w#?NPv0oU!?_sP;^*VOtrwtG{9 zsySA&HUG1%>IppX<(r^ZOQDY337ainK2YE6Fj$9_W z6kFO=hhDe#w6=eTZ6eN6g1@hS4BOu8Ry6Hb$0mbz2Jwl_vy^n|tnIz<6-fOZ`f?7K zVO<^vmVA#)ferH6sr7Y=H7bFD-ulh0uS6rd>zn+BYWT%iW1aSf<~q)tIaGwkCzbORr6VKTdTX)t80Mwtk!ir@$XwU!y8ujuI;efR^yIc zIo@1nD?kw~IIP2Y2T+^>iV2>q4fYZ%Q-wcna5-M@gWunS)?R^sw%>1Bb7Sr1hK)08 zkz#LVHdn_?gC0s~YEBiD9V5uJv1C92{VV|=ub^+#;NO|JUW&D=!DlMK7prxS&kQS& zV7)U*6X(*-H+ERz(&+vKYqx-0UBDW0F1v!1O|f2X}@*m_%I2W_zC zwXIug`0A~;bC1%0`rdd@jW1b+(- z<*U&FCpmat13Xn|I|o0kwDX*bcIbP7J{H(_5isR_Eyd+4j7j(THAK$YV+9IO6=$B|SA$*(aL}osB`sv2 zlnUdNm|<$vTSI=tm`{l@7uY8yIQAHG>#>FfW>OurwTWgpRqYa3oom%*z)b~?S%ZRV z=pE$V&NWLsnF2Ef+GXgi0QHem&2UwNZfo?}gHO4CJYE6gm8i$*&Sl#kG)Sy$f#VW7 zLI*6@s5{3vC1{qI<2-WEcZ;?ic1ML41$v>(ak`zL)eaa*0BH{VrkFvBep>9f2ERE& z?%oP(Lu#E#bDrUT1I?+yx(+l_g6E{V$Nfk;8@OYE77gwehxO@jH3cqO?Xgay`S=q+ z(4ppkAQ?)~5OwO}ldG?Na_+b{g%m6f{fyzreMZ z2$oMHTQvg)r;xuXw5l4bi=#pd1G)FJFuu0xpXn*CxVS+i#VK=y@ z69Lu&7IOiuAeLo(?TUr$qxkia^k=7})q!ti(0~iskS#bUJr_ri<15*fCDtSbHuul~ z6WNJ1Fd9MbX0SVAU~mE*EY%9s(8<>5m;I+$$yhc*3QeV#tRsdC)!acIO<;q6oMTN1 z#{`(kK@XX*wg-(b(5|#!n}gpbg$3iEC-^l+ONaSH9;gidfKs|=3froH_LhPZRW|Pq z`(!IQo7;@s54nYoc@F;OYkwVfcL~iPhOXRWeKzphuWh8I?YSB@y7hK>37@aSa}K+s zK)+|;eJ7BJQ_On{s%oSO?LmcqD{Ji((O$j^4$z=Kw?fB&VG5e32-z@hafQ7 zlECu@+)uQt8Ka;VCe~-BRUBxWR}=M6sn;G7o8G_-w3x^u8T@lOFp^7uS4lvb^o!Q= zq{N!p1SJua6VN8%$RI^%Mafec>ML+0*qNlWP8gbK&t$TRGI{E9;4PLfw2}ub!I~u@ zk*}8?r%8C=HKq5M&jub(&s7gToe8V4Je2ez58k~Ru#M#nB6N{bJ)5X&=M2-^wv9;uF0{Q#4>_-PRa&kH$!6`}=_4-?V4_b}D^ z(^AgGZ7a;cIqpN@_2Dt-mN9s))0%5uEBGQhSydVA&>N7+YuO{IEL+Er%eYhfTtkj! z;1urbIs)H4F)rvj&Lapthb&%kAO)`$Dq zj$s$AA@_XL&YnAeKYj?@DMfGY32+^U9v|nGC$I$FH|gB<6t;gaz4jatu48b$0-ESt zQ90UiEwq9LnuGfaZ&>|XkT46({Q}bLy1}soO*4i?sqX$y=b|G>kQzEdDLdu_{yg^v z+<^7cBcgQ-xOUJuVpy1CD0eC<5Zy2F)ZyNHkAkZ76%V{W!ml%@ZPjqC-87>phvpjqyx@+tFsD^ zpq}pq_oK{A`z4jNkk%3W&KWG7M`R(oo=ls53h%{I_WA-A_8C04J$$_LKn>p4Y>U>@ z5Mbfmw2@DL;Bl)#X{2zsFdmmYehe_SvK)HAPVLsCW{-l4kQSz>a~I=Os@p*5`SGeb<6B%;ooJL#7pQugL^4^eOi09n5dAU@K_aON?6E3bw-34x_d3 z2{+IwrbZ)EK-pri_OMnG?5qS{hX%f)8rl;5Q$6& z)3~31_lC6lr>*a6@Ja1JX;WB*cMu(>cQ3}QJs$m-Jv}vQbLl$Ao|wt&bTiP$wgenK zc)-efoJr?<+OCel*KW&`lEb1|frHJBSLC33dQqm>Rg8C>LPIRIS~YCDMx2Eny++=* z4*Hx&>=qcm28<5jQDDS<3OlHQ=C?qVK;Li*E)xev8n=+4 z8D=%b&LNM!C3&9+6PaSJQDAI25#CaN;D~W$diJOVmD1{byZ~Ki47pSQ|B0+kUy}^E z6Zt_3=AgX^;e4iy&ZU($h#q&AhR&-io_sr1h96fs9$M`;fL;vL2 z748wIFK1(T^m5kI>^BwU*dFjOTTtszx5Z4d8XiCcuQZJ;pqin(q|4lhcC7 zP-{@l3_GudT^S6Fv_-n*U;x2QlSB^)>uc^G^bc`zqgY{H%J7wpP@!CY0?4O zC02?aO6us87!B^!+LZ$}tg&v?1LhdX^Sswe}a<#Wty1@64no+JItp)D{?9Gw7_O^$tCcG1C)iT3bl`9uPIaWM>*lC2YrNqA=<=4Y1Kb zO0}Sv9(<$3j4QNGpw&^Lwcv6s_}3IX*(qv|`EKBQUZMRAKGHom}j;C-BastfxQwvm$5Sl6djDq z*aT@Tpf00Fj8E6ve);zBEz;xh;?34Eu}G2K>+(chODGzd2Vzn4)o z2qPHz(B`E#WUM<&^vqntNnnO#1udJ=ml8dfj5G)v0lSx|Gzc#Nte4m{2pxY{k3JmQ zhdEZ0zLE$uzq39q(71HXP~?M z0P#d{Mj_G8pndH6!Ac&j0_(;VO%L9^_^@8Fw3SSLmst8B{Ytqs(g1upBsb)vBmPtE zpjh*y&#F3j&LU_|V_+hNpDlkq_$}$-nusPRSG-oFwnADEGXxT7x|#6yAeXTe-46Mv zhQDheMw>J#X|jF?2B&|aG8$>4_~-b-k0nQ)YfHmL`Yk~4WkGx*Rp5(Ycvtl)(GXOa}6!R6e>)``=?Gj*AIskPUiEaM!=n(X&2B}nQAZAW)Y1K zRFNsmbpc6KV1-IOSpt8$8nf;(#~yfH$U89yXP7`AVIEhDaVC=4L&SZG88*Nfr7ClV zn4y>|7vNkJM;{k$XJ&3OI=;oO?jX%*@fM&hX4wpp@f@6H0x#AWyMtPH2k%59TvyQE zb5ULiNy5ESK|ge@=`B|GBs>91I5&x%BR_Bj`Z%%chY<_e!P|edgl2aiI`PJItOVNG z1vKR)e9#wmbsBC$yE{g!4RQu6>Bz^30`;)C)`3|^W7&Fh}s#v(~UITJ?zUZFm$Ax%_(fzE%aEP4Oru3#2nujfPuD44ovs5 zu9nbx=&S2OF7J+e+INVTEns^rp}BU*kcxn%HLg#!Mkj&MyB@e|fQdC$YlBGhTGsOd z6nFxydjm+1fcd+K>U*4Y3!jHuY!~+Q+-%}Ac+p$!n-YICx5PSD;*reTb*{Y%j7Fw7 z3G;x4GwkvlItKH{uR-&kNnfl`H^wfam5@NsWai{CbUeQvc{cOqx7^2Jh1yCVI`JWD z3(hU5*+j~Kj&W9?l?>w<1ZH-T7iPd^g$RENUNJ;#DMeF_PrpC}ERC_-M)GYB`QhZ; z!$}3|v!j17WSvhB_I?C9AAx_=_+4PlowxPkWHI>DTHLY@jI9k(G0r%X_n?FhwnDt0 z`yajw$ks?PIZC&wA~KOAPX?K>k}O$CS19FkO67YG(l+;)1vAGYa7mnI!131 z+Mp#;VmX%$^!{JIYNLGHu4g)Zv6OA$awtfG^E;8&uo5(VU|z#W=QL`p41GmoNrxf2 z<&vkBKIwYn8q$_h)^}fq)z6_FMH-uDU1G%Z*TB|1FgK-vPjRAn0PTbnevGmHGh{D} zM6rLV?OdL!$*^XHqyn{-2(z07X4>)OP-Yb88gCQETGb8uTgqx=OFz$0O9EBMAc&-u z#DLt-qO@4W;JNpge|Y)r%Wq+akHO!Evnr#@Kf3&;twMe{dqWKHa$bH1 z*#Oz)H>H!L2l{s$uI1aL#WW6#7tk#^oh{06aX ztZSwnJcg#0z_M)R{b%7|gfcf!j^7M%*hCX{$l@*M#&C zn0pgpq#(V%3(VQ*WRdu2g^g6`gbjaVq0wVhZgiIvnQV1I|_rRfAA(VNMsq*We${z$8C<}T- zi#yp{?!SnPPo#)JNAPY;K?jVkFt?mp53bQoagr`qp=6}x69D}XWpnym!n;V1NevGu zUa&?;u8={V5Z zjGJ_lEDYz-sJ~^BAqDh%?y^RE(`oP=c?6Er8_-Di&|F<(zK3YcnXPiKJj^As zn0Jyb9rW`JKIy+dm)^Zc?n5ho?+Nr+o@Q#H#d}`I5w2WwKZ9kkLL7gnht|7+rLYI> z@a*#v*1%GEXlt~cThGVPjyLk_&Y{&4qLoHkfM+g|vB6VXOKIrzQZox~gMGM@J+jqF z>lnWJH8Km9f@FbSkD;GWk>Rlc4Ak?P$GSuI$T9leBLcBRKU<9FRsv%zGvR{v!4~_8 zKJ*^5-KngAzqKr#6=Ij>JO~wk7?=41yvvBt3h}zR?43Dw=oV3_W5iw>jl%4PB_Li4 zYe&HM3Kq`>F~23|x`qdSkL;GY;!ljiFxq#Fb=@m+umx4nPU8Gl^0o6k-2$x^^4xE* zf(?H26!-w&O3`Aj&=PPi;6XT5Y+$Dd$WHj4i4xj_-@gI1(PxZe3GIKbxepd7BT+|a%?!sL8M-a{CPX{+;ypL8#OH{hGCIhN z0#a0umD?!d%Ktf{X$!zjO@F1>?NTwF4RElKrMm(2YxF^jbB^n&Vny5^Jw{uAu2;b7 z9y@~6wLyHV#t2J|-vi5kLoCSGv&N`%{r4DcDZ6}&xvc|ZeKSb@9x&44CkN<(&G})i zy93+Ej6gQx6dhn$AeOj+jk?lY>GPQBzrzR>B;NvY+j(F_mS;DY z!u-kF4N(Xs|9D%$GD0gX`=>>*Q#Eov3>mn4!Tq)l~5* z(s-}6T!-Q0>r7mVal;kr?u5A(E72a{X66QWa0e`I6ggahv#ik{sXABmcCP3qc?(ad zEf>S;Dwl3%d@cw z%p4-$m@7iN)ITLq6Z2DA?V|=%RN)@E4BsfRMsLhRUI#|1m#9nc4}Cpz;c2aX#uEt( zWeL$6HU~yJ#bkHdPcv~LuF?qj;(4<+45x@^nkS>Ld+d+}AX;cImq$McDnVy|d+4=1 z3A+Up%fM3@4Myb-@dDl7-H5F*$5PW?5ITJNT9i_t#LP9>G4ihTfR7yMWHd7zwi` z_y&T#{6~ZJ>*MU8M=oLYB+!%^`FUI~k1-?Wz%%A)XF4cSnnk?rAQic1ig3!zs7_3S7TPvf45;djt&;4-!XmJV2NOD z)rbgqTc@`Yo)FLAYhb(XU>~Pgl?0Z~LKduJ^#~cLF?^9ukICh$u%aS(*L&0(E1pnc z>{k`fKZC~YwuM0BOjba3 zd1)BqcgtJPVdu5LVlD_$z0;x98#(-!+r_>bo||?F|7*aRj(~pS za6j;q%?TU{+cS$q!%{WQI-&$+C-N?zw(;F;52an>=i-E!p_ za5rt>gXrYdm;}Dlgg&`e(Y+k@-SB>qu{<2HEJ^nyCR)+4{1lAeQ6@Q$$PqzHvDVC_ zpTk=3KV(n0@^SIhg!@tGp=HF6p7UBWqj#VR!`pJ`pXU2Zm@df9S$TvA2HIXYwb`_LV{ z1%s680dpPr{)s90e+zk62ENTDhS!H@MtO#qXL5Nel39uqja0+8=Oe5EWeq7doKvd; zvwky0bNN=7Ht^jW!+8~+Se*o(YNnsA0DLL#P)Yplv}N~l7dp@t8(hW5vIk}%U|$Y9}_ z`&1DN#+dmYfmZ%FM!d<(bNPE?XjI(!+%b%7q!^{ac{66C^Mnge?2bjr4J2cY*lTi# zY^UON%pPSFJ`Oxx&a;h2*nfA7J}~mp24;9Ns?Z~cDVD!^I6am~TGB^aAVxs>$fyv~8_JMJEzP~F8%ravPsKI`?06(JUJ~l2thn_!!{uE(19YaGLK^7lD z?j?|(>o625tOmkitc+Fi$a1Lw~uIfm`?3;kEJ~TI^QlknmJ|El%HRuTRulci2BX;lcdpAb)Zu zFE_KZGWk^t@epPrr1ImI(qsl1n~Sd$Scjnovr6y|u@FhJkZ;j{n!*>$^LxyyiLdNv zLO`y~sKJnZ!ZThGGz-RXN$>RE=aOxVf-oavdSy}&m+rRzJ=u1Hy|ji^#CJ37ArpDFW(I36LmQsQU@mQgSR}dI zRIo97rv;RJKM3LCO4Z;cT^LSN50FQJ?~KSK0dmm=-{G*5=b7h2Y0 zRIss*0?!%KPk-t1{S3T+rThl&=QVaaImZe<57+n?foJEA5B|5iz#HT1b6Af@;2X<> zKa#$$skJ$Q|1t#TDr{j(wt;WSs*$g;l6^S`%u9Jrm$3hPLAO85gH|+sHA_gqJ`DNH z^b9(uI}XfqZ(v2X;BXuG?A*FN2Ho)VKYgk*`A^z|7k}y)YrlZ?e1UNn(D8afH4B|Q zBIojYtOY>}k5484SO;r-6K1mJmw_jwdqGY=4&Ujugr|spo~^u58_3TUuy+L6>?iQ} zz5sfB^1y6~Qu@~@44IOAmmA->=lW}el7BS(It;28Nq9#U)UvBMdk8utJ2Cd^1Yh6m48B6jGZ&8h8BYWh3A-qjaJ$STB^b?bSd+4nf_WTTQt)7~Wc@MtQBk=5Ve1GmC z$JXHC1+w5Spv&ioTHQupF7@yDIY^toN83&j%c&)4Jx1=icZJT2r-;~F5g|X9-AD)6iJB6wS9z&l0N_TVH- z<%V8h*Sc=tt*>GJy=wD)Pe-O%xy9qBYX?YjV zFW?cY6^~j$qhh@F7}{$O9~w2S6*NQIP&4qc8r*0acp{tLO6F#F@=YJx2&E$AKJ&Z4 z*$sIOH#ia4g&{|WZ>lWegRXG*TA0d%5`h93!69AwZaD^K8rka+c;X8tJaX{yz z%%x)%J}o4A5DP>cHi3EKvoO3{I0HNj%wZ4loFv5Jt(w!2lT&jGqSx6<(6KIDy^w24+g~x#H`_h{ke;3+9A8oK+9F_hfo-~{V zzHM%bI1q8xDh|xErALTKxz0-N#b}*Jgzh0{x%gj{ookG&+g6rG-K)N@s=m5cclEt? z_qy!MV(q=S7>NdvM2vz5f-(NkKyuOS=q52JCmy8Mh9?^1cEt@12qe|j3I0PZeHkfvqOfNEHM?hC|qphxt6_W>hV~{z25V}d>_~k%UDF}AS}&S zn#dw^r|2W>^h_8vDu_=56@$jv+)CG&>c?9>f1MNEC)LJq9MGGnG+*b6cFkphS@V5A z<4ut7T01hl3e+1j8ijH!n%q<&S31T(R|BsO`&s$twIbXoCpKPIKQk;<)Ot{8a8dWgB!#Zrndwc^K@k*v;{p7t|+=X2z7f6VMv z4SlXElH1)jCxCi}exQ}UK6qALq1y6^D|%TI#UB?rM ziwy0V4*VYRrP{v@J!X}kQ5m11{oc?R^c;yITXY)m>35O5_R!1*X>D|@i0a^%mUFK? zwi#g= zZ@JqO%9Xz*KLlRIT>imQe`9d09iD2wt@&{?#ic+k$Ibvyxd$`zNdGq4r;maf!@2g_ z2=tDoLBE3&AA!8e#@}m%jjscy;T>AI{dJ)<_T1tfqkUD${_M2pj{?@vMo)XCYv1S$ z`&b)Y4Sbbz*FLVaJ67@$H%8?hT}K@-c4l|SpUK-ouXCXpgeFyqf2m!{N}+zS*5`T} zp_Mp`^eQ;hTG^>?5?A;JrF+TX=bMCXe^9JBk=@%V-m%g-(J^b3lV-;xI)9-I75a>@^eRQXE@g=;JqyrJ&xoC< zO;=BLtqedJhf85!lr{I7Z|73=I#&kpSpG&GFo?$LjYn0(1I>X|z&k2`I}(>?7w{i0 zbr-9e<2Gy_e#k1)(X0sBzJzU zF`H`N9_wAy08ez^BaP<8A>wc(j93fZ^aAy3)Vq(g-p^z!kF=txyq#;lvtDaqjI%iM zsvCQa^@8399p@1`j@FecCWBcS4fg#z{^@0qfAMF>p9#$jjE_-;>8Xp+l{1K^Izk;o z`yU*&_SuAxRojeWPgWlev{J~OtRj`1=Z>GjQ-ae$XA!LQRM&{M3mrvZZOo%`ri3ip zNo41;kwyq^6FjX(eoG>=fqf_N7W*a|*aPiLwUH{ScX%!>JIRGqr}^cNcK?a`pEbmrf8c$0w8Dt}5(lRHVRleUW+i^>O82nUUy8@p ziqsfSuMVFk)qGO@pDZh=XQ4SW_ceEPC-BerL7#)JcbSfH_c}7~2x^}>6Zb&Jmke19W8~OpcJUc{_ryycIY&GU_`MVP(M|NdB9cW!ZFJ9brm?jd3qzsaKt>!D z(Sheb>gY2av2lbWtDdPmZp(VsF>#!T+yv^CJ$W%JM`gOsV|P5yz^pJd@Vi<8|AYHW z)tHg^*{spN&?D;iD@U79IHj9pe==#QcZRPp4EWcfk!?j~+t~JX60sW{u1@`eq!Z9n zoOohCvS*(V9j8X`){$EI;qieLDvm^XSJximT(s;7$_G@1veu?}6=;B=4+Z0a%8S0f z*Z1fQJX+ZWvHW%+%mRzF?Nu=gba}c$8CZgn2io|_O|@tD9Cx4+I$1P*f1#sJOug>b zn!!z=8!^>WZ-hvbZBi`OX;4Qp_1?3#jf62!uJckDtTv`YIVdv-Bl|Jq$h;G5vpVPv zgccyG8MW5cOz14LOk0f+9kf=;%fgwP1kCBQ-EigMSw22QWqOW|5-}sfF!6qN&lIM2 z3Z4Y}0&GNjK%r!xQG-+_m*7VZ|?spbJrQ(y;)mfiy?58faesrLdsY?M znV=xcjOO)?u8IG^NwDu07$E!r*UNSE2TlLh9P zG5hg$+TM*iTGy};dio2aJAczkt!<}K;~`hgn#w&1?LWGH6}2o_pF9mJ2H<}s<74Qj zTSfLJ1eu|8#xYZ)jaXlHo?uSXNjrZ>d9wDCOqH9|I%W(}VVF3YJFypB9d;Qww&;Wm z{jJ^sd9ZudUd=G^Dz9i_@gv7?N5%~s#iSa|mouRUvPetMxq(nE_kRI<>fG2cwX_Se z&zhgCli3-C4eq>CbcGo$jyzVBq35UH3bg2Jb0B(=eFo`?RLS$N-7D*{Z1L+x7O-XL zR!iRPL>7J;umK*+5{FnMz#`o&BvzW4+0f-5u8u)s^zjAWA?BW{pk3c#Z7kA@_J1qbf&T0;62l%z_5ioHy3=I;a=x zY8KZXMfPL%vc3^W&o-J}fP4wwQqSJY$Y>ZVT6qs7tHXGWyt~x4;Fb2B^qqS0t7qPk zxjViyvIXcFiGL29rC^`nPS_7vp&fhGbg^vNW+d|Oc&%VTdk4!xPi*d%6+Cbj353(N z1wL?SXv*EOSfU~emgp7|7cK6)*p z2u3dOIPTfOU9kDy+chsH!5RMqJLx9w4uj_PO0F!wnlZ~-JS{}dI`ec zKueBVee!f|-6NyT9`Q)A=2E$~i`voNsrDa!!b2M9%tJ+z`R+_3ycXJQE8@{n){g!n zJB=PIZ5UKqY+@=^skJ?{Q_aGuZD(KWv_yEblk1r=7~bDl*}uy8p=WP@>boAXOX-5E!pI$s62Gmp=50uF?0s8^r~xomP)*& zG84%`&4Ny`$uXi{6oxPQp|IM~1SX=E3Xs`zh}90;m${3!6uKde#-2zy%qVzOjpOh0 zpbiwRajHC5LWGU6%;I3{XOSJ#VEL7w&VLj|p}LS6Oov=@4VC?}+8KgZRmspIp>H7^ zKw^qLucE2r#zcxn-gPI!Up?>8sXa*a7sUt^FKD|EsP@B8ToTo7>+&f z>HUFnHQjm!QTfPNB#utrt&Xfk=8Ujnb6?N1jSe^;rT%d=hwtItiA)c;XByc9pzpo6EgW2V#t;1rDxo-HjrHMuqSEkZ z=koW&$RIsSCIfk zK)Szu0I}{=cO@f)IS2BA_mP!ny{L@I2Da*>gQZWV3Ed*Pk#(MU#dv!i&l|3w?OidW zGxaNH<_y^%V&FYK(Q`(0tGJIx4ZTi%~;JHhs~bTog7 z@^XEtIGmBM(P1CIXU-)08b$W~>_w{m@-(x@1@*vq9^?f;ruV&$x^b`gpM5d23)0xp z7Vsq1Xg#A+{HDhKX8CPl?hdN`Fr`|NoeJWBIi)D-N-8=bq-sXx-?JxhqgY5r-ta3p zL-v|vzJST9!*66bdLEB%WCXhv=sSP&)WGx97k4}hySE>3Z^{V5{BK3ad99976#iDS zn+D#W2gWqm530;Y&Pp_q$^}_r*R|44SDdfj0mBoM!Q<}TU5)x8mgv3eDa%NN#}STN zeXwC&&-F?44^OsbE0MaSy~v0=Jx4O0H;U|XqNsrGKJ%%t(L!@d>M_ywm`#6TV9ZWr zE_(_HiJB+Z3)G=&qx!H-OMis(bnRQ+VHD{%Gw-v4aS)jeV8lCK_t=cMeW`P$3Q5}| zsZmglC=U4%tocI9MdXsvyLqgB=&y@`{!r|NC#oQN6nphdFWu0KhWbPGJ%6a5%6t6f zb$4Wc-JRE8*S}BhzVSp+neuA$!9d5-W%pLs*yc-_Z;eE9dV z^x7Y)OX*`(U%jsDy}o<*4IM3ybmjLi#S_TS+^9x~`nK{ro!lQtp<%C{>X)h=+Ur$5 zQ+~dO19uN@kNfrAKaz#VR@fau)ycX2(_@8?$EJk}M%>)ZJ*j+G-?>3YhHDD_+yRziI!uEK@x>sXu- zcwpz^j-068{Yc+0y|I7SIwSSD$3Z_&X+8xp5tyO1{G+L2Upw2`MPw`%er0yfDwS<} zt=i&yp3BpybS>w)`V(Cl>^!s;J7T_{={jq7a40N;$LfwY6CbZIZO+BxDYolaGi#!% zE>t=mXbc{TMRFkqQmHdzHk}96>3dakHJTe^-TjSl`HeJVYkhxypsI<&Whpg7n`n&v z3$JOfcj+XGnrzFqYNWk`J*^WcfOJ&1S&uk#`_jMCpHl4KyZ`NX7*i?nYQ`;9V4@LaKA-_BQdex@N5`)T8UjY*;+Sg66lL zd6Q`D{cl}kvoJd7I$B7TRIOE7a{d=F^?u!!zXiXgj-}M z>$q3nng;4+jYfJC)ML$E!BpnX(%)T+4N0vec?O~}?Z~_w`+N1uY!t7)?1|nlv)>Tf z^2sXi`3l>SRnPP+5Nf)c3(qvCmxm_ z(C3aWALQpyCzv==jPh4o&!8_9au$_i82E-0b6tN&kqpk8AaatKxKU7t!rIH;PlGt} zOee=Ui|p}HIRcoliLtcMvJ&5w-cGsfPFtooT5^;dpARCiznD$k<6tq+y6Q~RDH zZ25jh+cH+6MGdzAejg}dQ&J2n% zlR#UUYR9vnizX_p=n|tmvlhNNaeS-_^p<~7@vZ_bUbK2<=2z4EajR$72(@ZG}=j@hIqWT?Y}sq8Ly{zU7%&?s*l-rs#TvI`)i-aiX49UR&jeC(l!X%;-@%sg#k<*?xhJT_!{rAWcAq(>sPV{M6oVnnLjh7? zKc9Gfxk~IvtvgxiSRzShnlt2PVCr?e$9Dt0(OFP0TW}Hl>b>5B zZBE7C%xiz_>nv6_qmjj8v=l*U4iTfV#-5lYj22X!`eJ<(BbzyN_4g($326vkUs{E{uN~r^c5=ghoM6z!UG}eX--1gXn>Fv^z7i3SNKUc~7Lg zD0UR>leSR={cScH+xRB18oES4HOut!CqT^Ar&sDN34Rr z6EoGn(Vqkzi%BevE68$9gPbyo=tMnQMxUwBg#ua=Gpm!N8b5z3ne(WOeW(M>>@>Rq zI`?zqf@zGsXQv|b#I|Z?e%{g;3SGHzB;)*^xiXipRjzQW=dsZ@*SgR4-M#N4dtP;f zO^g3~Z54-oP|sB=o8A)E8fyegeCln@^hMB{5}lF@o#RS(Rd$~Xjrv;1iZ1RGJ+?|y!$*ufy(SuJ(=ix%b*((sznR!irHgk=9Lc4DEwS& zHYA&Vd^ir(bPM@5(?Dxx;q|)=H0D;em{WU6=*54|G#AkqDOUU~XAkoAnr+)WP++Mv z?o=jk9A_O10i@z-+PjJU$mE;X0Y4L#(Su70 zv;<#ba(9K55o#6W^9v`n>{C0byACzJJ6&I8G_w&dSZm#HgqTr)f!lcz)O^8f}Ywdn`Yq7K6f2^^j?)55AvE3<0Fj7`y=zX7A zcA`%&boP^gIms)#h4+o$he2QKWTa)SVAeCR+fNTZDlC3vt<{uS&w6F ze1R1qdNB?9H4P)xrcjq^yxP$*OS@2P?PZ{V1@gbvJ-2CU+A~DgN!5?Y#gqfLTb`0aQ6k#sW z!0cPZ&NjC_Dq7a4qOWZk7aF~Lt)}eUHFFF*mA;yQUp)05IE#fpbrI+&oX6N$A)|fx z()Swvuf9eHU;C5a`&6%~=Pwb|wBUc`eu-MqoopHCWD&ojm*mnm7oWR&vMm;u*)#KTXUz0{;vScaznqR6Gn0crrWgC=QZsq#9S1&bS67^j7NWaDM`@P6uc`5BKd8_g`I(*u zYN)jkU@~8aj@i;PiOBsfP}qNNYke_7#7l^%)!r+U6;~^I#97MKZUXlE(EJr@ahUZJ z?`>FlcGu})Pa*z`k2$oxA9(*tJ+`w*{rIuh($wco7IC5hG#!RMX3uz^d;~nIK~%5Y z1xKyCH%+`}O%7{+sHZ^f;=N~pVi|RosD)I4b~1fL4o#P^^2n&Cy9gV#La=dUy zcxtuK`$m7A`dWv=#*Jf^a1JwnnVo)Wd+|@@p~A()A}oU5b98#d=ACQTB)VI)mFC`! zPK+W)#;{Y3_rkaXJ4#o$o_5liEb+|8KGDw7XfCr>rd}5_+w;_>$c_-K)JyeEohjxH z*SsBBfkF0-c0BBjR7m4FkiP_Jj-|DOy4hS&=A9zJmx^T_ znMt%3w!JXR=R|y*of$?aW)WS8_X1buNJrn8Ewhy;ekoseq>R&6F>id|q$6&L=^hz^=`j#%kzbp1V1J`dHX zjgCV{kF7tOogJ6@d9AxT7OUyfXWGf1MCCg>LGFC_8{Jv)29JWyjc3*Y+W6`=uI(pw zxYk)X=GNaoRUUB~8^>FYHOgpn(ldD>Z)B};r6Y2&FUz>^7=w06D)dwP)w9(F1HsTA z1$_z6^w)pWK(U7%b>&#kDo`<-38&rb7lRy+>D@^rA9G# ztZNdJ12!Rkv9sj?lh%&tuyd(?g7D zX54>V=2urEG>SS>%Qy9n3ko^1wJ7r+<)*$?1{Kc*%oWaxNz6nYps(W_NC_(YDc^a(XvYPOQdwC98k7 zknuk=Z{v*nm)KIVz6`^M{Z zp?v_GP&*Qs^_Os=(BfG|V`N9{D6?S&BbHG=w$(hg{{~wtI~!6}nryk=C%rNjMQjcJ z(=H~)9|hr^2#3Ps={uITlb1>*sXKp62K>8G!0<;$Y#<+K8nyjQ{Kl1i&hcUHvulm* zsgc{`6R8Zn^%21FWVwhpkAfPsv126@Ve{-VIy%HD(1|?p$Zfo5W+ih!vO;^{aRs%G zJ=&c^WHNPuGOyUN^+^SZRPr4})}pKeu0PBZlwz`8wd)bBV4k3;(@%<0s-3SDNKTE%2?omrijA7k_uGT@WiqnSAcZ*TiuH;&MBAsOLJyPRQ?C z`zZ*orzm4{_iu^+9qY=@^fXTI-dmbGe~*d|~Kc26@Q2u-BD7`MMbE zSNiUWuCuVmA1J#33Y|&M^-QSm)EMN_-A9h)vzF_)l$}~xN$}eH)YcK+bFK1)@_)cv zDOXN)baW2OC>-lkry7R~t@S~b-(Af!hajZbdF?=PwwpTK*v0?9X?il!Y=6Qwi7PK#%=94 zoa!iNt}@_BoCMwSP7fZyLmg>*u;^t4Jd%Gh4pdLKu4_2*Sx?N~KhqJp@{O$R=74dj z9o-6pk}t2d`)6b|^B)VXu3C3`ez#`ciDx=@bNByG(>{Kq8jW&<8`XW>*neW7y~`d9 zw`^+6I2Oi6-KPBYNHz>Dvm@I{`f^wHL$N0#<$CU;N+Zqe6Wg!)5QiH%e$f}NxOU8F z;=9XTIQyga?LDVf5zL>0LJPa*oyaKbB6`Lf8Iy+5l06pTHjj;Iis#%C-yc1!+B@06 zQH+ACt|D_st%G&PwpRzt*MEuB`z5yn*Cql!SR)iPu?Ii~q*&UGubSxTSX_y6_P2ui zWEjt>fl~f|B|m$n?ysm5SCLujMs{-IwX+n?8F_y@(h6lin%ToaB`19^(E8}$0Z^aJ zlj1Ju6U!5&rkd#T*!H*4EIrlwJGGsg+Y)Vsmm1l}m8y{nhiM&K=YL7ovb$GC6_xTD zWNNScs6w#Hw1Ujs`{WYgudJh?lAwy3&kU z2|1AuzmhfHYuw9yUVjJ7nAbEWN4l4#`8n5Gr|=fHvQXt2Tsay5AN(TdnN!Y=rs%cC z>)Nr5GUAttxffe@B~KE6w~`NisyjZ3g}pO4S;g|~wZpz9gt!T66*%;UF~{xKMYhnEB8HGJI=ZhE24NrEv=%p?w;Bo_f0q; z)3&^&M8#AcV;58N5>>ZdP_F{+ZAYs8)RFwN!@aQEd0Fmo`X{4SWg~~5?4$(V|BoGq=sI2l zTWsa?&mFa>4_7ulD?R1Pe!)gFZyP8$P+f5qgUHNH6?8gTM@E8SF(gYG+z)pZul#AirAQ<; z6C3GDS>c)R)>!KE<#iU+f6!y9tc4TB%7*r$%6$%<3qfP@Q|E(!bFYjhRQ~@kvhJUZ z+iRY+sef{iJT{c1$kG$*$>;?P#XCc9e=Z#Id%vdpx@lcE1_}BYjRlSjepOd znpgh*8(#y*cygSk#)&2JTdIt2g8G+*?cp@g$tidKNPHK(p0V;2wRUK{+C|XAyeEGj z^+i0Bg>eVi10F|qStH-R(6eS9(cfTtcxKdEroTfKCA{7HUTZ7a6%>)MEPan>s;;Fz zCw~)l;hDlShCwk`q-|i%$TSv* z=dm;@VOufE>$U*5Xgf2ml%63ce4nxo54 z`YC_E5Td-4_g$Dz<=<=nc6F$J-ybUD%YW;&yVs?C_Dfm4vuNyhu^;ceOJ=nJxCzCN z;@_3A*r`j^QfC;-^DNw>!j>#^;6hfkJe7y~%fmp^f2XW3eaFYj4;`t3pY^{H(kijT znY_oY@Gt!!rk-aLX9`e*Nxt>ukp0Z}i2kRB9y#KnX63~B^@%h4D9{WY-%PH0W`FcX zwy(+P9YivEK`etv1@Amo*T*F`hx+oupPTsIe!#iy2lYh9J`+3-yi=4_sm!KN1NzP| z=TPz)`Z{25;59CUQ?LP8AF|j(W2F-9?gZ5qeP8L?_lBBA>H}u?slh8NAvNoJ&Tgij zQQ!aGkHr0}*o3YT6UWF1WGH7I~a|g*&q0 z`3d)i53;TJJ~QQH#_~$22&2v`d0`nT#YUyV?7)b)F)pcN=zVx}z^&B*Ck%{u#>OEN z&rdp2WEEAucWD%x*kvp)f_;&`NV}ky&arc(YiC%uT9YefE*r;$w(^O|)4?xo``C@q zaHDu(vR6|5m7ga5)Yzz#UVo&?GTcU1(b1=`5n`riF}~ulJd0IOpE#9QzZEu3F5Pud zA2?D)O07H`SfNB4hzRd>7hT17Yt?7WHIGqZTN_Vb1buc;aLnGb7eOD~bKCWTD9&}h z3wtUvs3(Q3L0H{jxUTb%DtTiY`T$s^I4#B2UDfQ54yb% z-TnHZR*B?&D84ejJ%9dA{6PF@{M+~s@n7Os;(x~fiTC4!R;#saowVL)eO~MHTVK%n z^48C^{#EN|TR+$OH?4oy`o-2qTOV(KQTxlDNE~)~Emb>C3ktzw`K=x8M1;XJ7m5Tc3U8 z**|;sGtYkZ+0TE$5C5(2_}Djo>?hwldhh(b2k*W4-aGGo_Itncz2E=dhd=)2$G_s^ z-|+E|ef+<_-@HG6fA#*+`&aK@zyJ8<+b=)wQ7z$^{a1uWkk<3q7Uyz^wSR``lb61@BhRrBl@M+f957`K6LX{H(!7Aw{L#%=ErXS z`Q3>A%zw>)e9-%(5&f&LjOdSOM1S>ZJncO_dwO*@qQB$mH$VNz(+}S6y>qD%{cF#@ z#UuK!pZ)x&#}~%OzUFR3HyY75-g{dk`X!$!|LOK0-u~F_58r5P_zw-9a-~PGVueklQw;#U! zL$_ae`eE#71&GY^9^XI3}ch8TXA3fhZpFbZzZ@+u{?)&fl%Dcb( z?k~OjkKg_AcYpBRZ+iE4ef0g0{_01+`v0=`?ZJ{<<$c}foIZ~}eNMk0(>?FGcjmtD z?tRRx&F)i+*!<<%Emz3b}puHJriakaWyeC-=w`}&oCa^*u;e&NaouDtikPhI&tSAQP6 z^5~U^uRM6=wU;kkK7aZ8%k#?zmxq`8m&?of<><2i)$FV4E5Gpc$DjVl(;t5Nr=Nby z(~ms;(CF%?=FR7tf6!cLu5S*SGtE}B()1ctANl9RAB(Sww~I%_E5ysi%fw5>3&bUH zw|BdDn|HH!(YwjJk$jYF+8prLkAMG%k0;l*p7(;6+;Vd>8r{1M>o?YJ>_*O>v*t#w zK?G}VxO@#<<=hIdYPqgmb0)~X|A|}I?r}fu9=+o|PVdP*81Tur_wN0)OK*8SJWX!? zv`fqqF-x9Zy5-fdWLDA1Dl)6stRl0D&8le|OFSF0X7CUh4dz{bO>t&q1!b`Pbhf{IJ%?QsLOH*%eEp}i;~hjD;|*@c*wFWxvUOGql1ntcKiKZdw+kcZ#x&;eHIyI zv-$k+U^-hA#l?1q5_Wy*=%A9h*`bh~10yGgS-si$gk^Egd_LbR3QA#OFtcJlKY#`5 zt7=kn9FNDErhZvT9Cp&T53=6Ybt^jV4!q4oj%LH!HNV|z?htgR^KsCtnf2j(v7b-Q zsjL$P*?U!x#^pzy<$oPX?|1%%xgvc52c5%Fti%gADjc7|PJvsm1vtu6FXf%sk79|t zYq!1D53BudrjXXS%v~4DVz9ZBILo`sKL}&?V9bRPemb2U+M&(JFfe6i?CI1`NYX?o z&GQsh4Nqvk(ny}_(CbgTXR(Uiya};FNl*DDPAa0BVL+={<$spW@|^YCV1~Zc^yCm` z2;%0G!$Wq@^Dl)}m7d#*A9^UBF7Cej_+E1lI8Ru)TCuD|MlqC``5J|TShIqSbK!!n zc#Pt^FL+*9SJHENRQ4P1u%Rli6G|nb_kj4!m1$a(p+H&H-rXO8hkx8MDX`;WvCmpv z!pLyc15j`wg@0HtH=3bzMY-OS>;0@V(CF?gyl@js%BIdyJm{igBO-OraoS(>ei$SN zTh3vk`#EKkgY6f+VK*#Z@Vq3x^G>Jzy@3bexaPd*x;?V-9qUI{;TcFUK6WQ#=6SK# znmf<|cbSf}DB&WFwUB8q*Ip*7+Q&s5W8DwkxEEY38Gnn5NP9$8L*eE9Bw$RZZsO6R z2vKw{Njd=vmv;uZAAH%IGXuX`&=W}@9;StHujzCG#~v2CGh#fh(k!CctWFC>35k80 zO1#=9`ARS4Jc^r*n|>@teh}u`<(0F%gP^g!>79V>XA?GA?3eKJwn}g5YA<6EioC#{DiilR)Z zaIlXx<+IJ*opF=rquFXV&1C8#V@rI=Wsh_4;Pe>#UUkvi|Vj!x;dj^6bF9HL=oooAd!iZLJ85a zkzl<1N#MwT<#>nt4|bZSQ$|Wf<)Z3#tGB!*j-vQ2j)Ru_Jp$EW+sqaOJNAKvP0t`5 zo6N1OFx(72WpwEj4^{}VOh!eP>s*9^M1KY9WJN(LDpe@pk$Z@F;HP1jU_?C{2p*+b zvY`GjLl_~SQQ0AQ5Xgc>W3$s&ZpD*Q+ zn5)>^VUTvSvaUKN}`EKVaV{?Nc-yKEjvU&eQP&Izn`OIm(eQ2q-PhZp9N1VS4 zp7GgJdYhi;?dx8cMXtzl;wDk@OQ|2FA>)Hw$jrvL!Owr_+}lcPvVT5=AXJ6J$sZ1$ zeEO*;Q(1cX8grztNgpuR(anut@5j2$KM4V9a{x}MQfX@aSSfy zTC@C+?`OU|*P6v#$#;kIUC6`A#G4H-6ZVwObbkF!2Yn2P`np-8Ux7Sdgg){hZ^Dtv zqdx%Yej9Mjw!t+Z8q9wwV+*S0QyWb4sf9Y`UC1M_A$#veJbyX}2)(V;p>+MOS0|aG z$vue|aLgmky~*}!0*Ld%G!^pwQQ!mg=t)8ScxAVW3rh0aP~fM*_9VhWj(&_#q?rgj z(}i6-`aS1AfZq=RZ=JD{*`qT+T2Nk?1@9n8F^76;KUx?;8O^6)4%p!FSVvlh(^bMz z+PK&wLQ<+Gsej56;pR1VX;He*!D+Lq-!HiIM+%WU2Wb7GOMH-QBPIl|Cm`44kR%1i zxSIi_AZLjA4(bj__dCv4fRjDTxzV`|7}GTg^V6~(8d;AeT`q%87t<4=VTYy2^Y#Va zgo$MA!-3M8@oKml#wzrK{)`CS#XiIrGZL#nyVV~oZK z&m)Yw7y+FS2uph%A#kv-fzM2wjT75kbC$UkhP8^Fsd=8w%=2{iu@G=D@uHe` z>sWD|Z-2+@XEsM_97oL-=QN4}#@gu1!!iIBciFyC)h_5dYt)NF3KeDiER+#WF! zx~y1>iHvsk1CqpCzbVW`qFPjvLyZ1Yd)0`I2sku&cUyR@Y;xu8XG^v5XfL|77bkSE zQ+G1Gj<+pOCVEz2e|GSW`Auf8l5lg2r0vc$gB;NHu4z!n}}s^ z^W{Kiqlr&kR5MB$*(Q6{y>)S+M$ zv=Jg-AU@|TPHYY~_YwO(RKP=%AK)-1)Xl+X)E?FbDE#fU#$n6Z+t@WuM`y2NO{BFN zhkst6wVMkbj#fwgboDIgnl%bgp-6UmX*|8O*%VxCp3l50<}Zn;7cxI(y&Z`Imq0zG zl=Ftbv&gTUUK$wMIW(%16- z$c-EIGn|Efy`FeUwppi(O+m0w{joxx-U~Eu(wVNaO<=~rkeYF?N+b=6;&zeI%C)}` zcl0fAfv25f>F=hpftIb=TN#(M8)i|q`Lbw}K#^~TecQKeC+1b<1f zpH_vRP;#b|_2)2)s#zWQRLh^MLWR>o(;4@odNLTMObGsA6D}TYLf7Y!>j%CPkjKC8{D!mR+-!L4L95Z+YTG^=IN2soqwqrpd7dsMr?6qRbYQxi4rM>xaS3=L z(_v7gldeVpHB-#dEX{gn6Q2jER)1JYA1?&vkTNOH$|ftZQatB>n}%KOV-{=>;xjVv zsPr)2Kfqh(83A`5VAqR+WDpYHXTCnnvb2-lsAU%R2WL{|^HptTg^vCNV)!ZNEYw5r z^Q9ZJc3!r;O|3^CEoqt=0dmeU~Vvwz~ysk5%6bs{b4P!4&&h12gv%`RvL^6k* z8YR1x3d%I#9YEf}3QB-skylsO_d8iHO{q%#X6+#IBpr@!qY?Ie;zhQXV!MJY?-ZQr+=nM>0gb0J45yl zC!?GmCJMVznQlZ$r`Q5aNRjLLUR75kjtdOzYYtwe83>8 z^M$)gSisSlx+q6C2Z#=$?)6m!_8p{2Si-n`;k18V#d66n{2vgMaCPbh@y?H#f}7WQLZu7m(zNWvrcKx4qWl)AC)Ml7MSp z#DkSVNPQF&&QM5$jtZ0tiZTnT^e23nYFQG`jZ^XS$Yoj}FYfnCMk3`${2kP#K5>Ki z?+NfrP9+;|#JvhM!?{i=_2M{+`@YKvgR+YI$!vDpsENHBc7JwCOrKL;T&wHbd6|wk zJBjf5IPf`US_CqT!(Ko3UKaz44@*C4)}|pQayPk0Z01nnHL`b~fqM6C z$XOB8irax(-3v^_Id07^kt=u#OcFq0Ta*tE+OpghLx1ZwOF(rxbCos}4BapQ@g(G@ zrX0=wQP&T(qCxizf&k!B+$5qY7a^OhZv(#-ql!{D=oj5Oi=#}v4!g+Xgkcxcs>;*K za|54H%`TvIiQG}SLA)gJs6X|D0=#(u68V1RyB@>YK)d)7?-?ia1QG~&I4%Snl~9iY zs~HV8M}JzV&KbxswJtlmam-w#$Ny2q0%QG7(4aAP+X@3rN;$PV+(eiZL*0PMOuxMl1Rss4}wgA^;p_2-6SDtmI zTYo*qb#Ei`N${*vxGoEC90(WL@-54L*X>m0cn~#Joo4zzPa%MU0b~hvu6F$y8LPkx zs_u4x5GB#90gTeD>DwTpJS;J?95evL^fB9&IR;1bwl7|^4FNz+_lJ<(hJ!Rf0k~Eb zqGn|@nhm2t^oCy1jjC~f68S*byjY%HOMe1_tNFlO8+P>H0So*F)RgC(V1Z*KaExqQ zaC0!bhJoiNhkXWEdk3TyfL?{W-iy%aa4(0lzfnX=4s z#xQLN+cH=z4wkH`by16Nj5#5~&8wv`h7Q9!hd+beOlc*MAC^fR4-pAPJ!I~|*u?^P zQISMK%v@L;ku276Xa7tU`Ejo+wI3@tu0#YB#{()E=rj+0g-3wT{BQ$uV1I(jVV>p@ zlcS7yX+JBg3}fYWl@47*O_4!?OF5t-gvkv=Py|H=??DWxAmj*F2%Sf$G6=!k3-~+E zuK`Qg1Eyn<+;MnXTxOz^wQym+u&sdUeEAupHmMiobeZ-SEp_-5OC=+;Uqgtoaz7`? z17;QuH>Oh;LySNHS4AeHG=Hbl2BUC-@I+@M;!zPy2MTNbFvdb|Rg}ep^(b(&GmXTY z55`&VAa$9St|&x+2Xp@RDm}X4On$cFadlf(|x@qHpYJLF{2`;$t^hPPo<7>;s|d41ZD`G{kjP;PXVd z8VYa$8A^8noBB}HDHQsoN^=Ol$Y(MZZkE8dSr~Z443 z5T!tqmXrc3QFOy8LtS5w+?qX5_)-`Je97Y8Y1@ciP*chl%hfgxTD)i8$g^eIvQc57 zHdLx!1HyAU&^5v{lzb%&5) zqjE7?<4F{cu&jZ@H(A^(RJu0Ew>L{yP4+>uWCCW5LGME7BvDC#$n_rNECs}C;2cMt zkNuO#@<9STRv_sV_|*A)_x;N4*_jJEX3cs<_oJ8>i#5`$hH1a%Do z>y-g{aUf@7mF3i11tdjjphqS4t9501vM?RrzptEv(|;mJ+XY45rEZL6xf=OGn!BRO zqwheLdCD0&w>i(hR%aK-joD}P;vfw}0xFHET9{p&w5sfkmI%FE_9|wdVScmK&ouG` z6vHhZ2ExP=iAy0E;;g*KrBMBfNJ!7ixeFKq7Tjbli6%od%r%YnG>;OUtw@@^MGUt( z-Tt_6k$?0lV4|Jv68ui#V!Yu&{&o`;aRFdn3AQpUJMmhXcZuw8bIGW14f2$o9|f*z zx{l$|A30x#$hzD45$A6nvkr(Y!>*Pk<#3rwOlrB--k6_uNp`IzQdlO|5)?~0+8hmf zJ2X20QKQF0mp|?Tt7L9u@EfL*ccLOo08C5Hg@05*fE9o`l@gZv)D2^v6iKS{zGeZq zqZ{xj@_?*L{uYj0lF878BI5Ze8$$JEl8BI=+Yf2knL$#jvmlZ|2wb*H@c#+c(-0zi%#f zn3mIJoukKa%;t-h_m#_z>9nNQ4{ve-O=RE#9=J;YF2EQD6vO?1D}Y!b&mutPh_U2t znqnyUG=sUiE)o3B$?7x(fgKvU3qeaf0;DiH?B^jy!(ro%Ar+?ERTgK7m!DsWpfq>_YbXeU5_lOgF-n;Z zvq+;?_$*7xGC+wRLGm}<*aR}nSDb(AOs;jqmjO7R{%^YBA2Da$dD3`QM~Z+Uxqp$a zEY?@TD$eUQFlDNRc#mMxzjePX>Hw+X`Uv^k*9}+ZYlK9IrM(15>%?}Y|IGO#$OaqE z#Z#SlYU9Bk-e!QmEP?H{%;(2g!?2@c!2Ct21E`RYs|_ClbPJ>|^P9Et=6aB*xYO}m zlQ9W?0n3}USrGUtE^!*^L85ghdw)07SJ_>iq*VBgCSiXiqu%)JSdR`j0E2>0cO%Yt z6M4a^&#Hn`9}$05am2B40Z9z9jE{Z~_~6r!u`k*jwLCermnO#qDC2|PH(K(yF0zkkd5EobK3>fH5L&#p}ADSH|;ePU4hmrh5_ zPXTP!!ZkX3iYHQf66iOW*MIjZ4;3qWYb(P@0yL1oUwINROkV5*VI(9|0GHyCViIr? z&|qCnyLq@$_p*MhyCeTS!0W^9y~58*iS%^NF`3LqS?|oVu`6*p4k6Au@k|aGXEKN* zKVWeHfz$=?27Czw42ZW2=}Ul18OxW;*>|1u&U4#Z-8!PY==}sO^ssG3Ike$7YPrCD~chd zeZ>kwROEK#E!gYye9Y?Mu2Q_&U5yE3bB+QT-GUe=ez4Gq1ihkaJKzM$;7XPGUI0bm zJmU!Yxkv0TVjlfh=YPA-zj0Qb>x_Mu_OsJ!bL@1{TDUDl=F?>xV|sdeKi?pwf~JCs zupM(gx~>3Hn7kNtbLVI=S51ik3J_pvBw|~raN}o|BY?7yw_JqxG zQ*U9-QxI|_E%hFm28v3dP+hf2mt1KUOV>e7n z2>opdmX4bk#o!h4XGMZ(rz#?-Ow|S^08v1$zc>KoKHiM$>1+kD?x2pV=_p7w31J17MPufOR?ZlWy~DiC?D6Q_RQRk8yuXDvP3RCr-Ug2C*lE$3uX51IYp$Yx%>t z6k3G=%A+3=;N{?Hz9ay8#9br_U9Nw9NT7lUIShT&fmwrP$;LVQ~H!wDX3bpXdtR)`0Mt*c?%m_L7eBkS+%o=qVkKm}p;x1*s( zf7|&rsAlIZ|FGT76R6al!J02yS1nSV9*cck$IVn{MH^HfsaTz$l`7$KdSR?I(6~|K zQot@H61k-A?MzlHWu^p=#qNd<%C*hlUbjae?q3hs6`#X|N*6#7=D;TF9;6G`i}Q#u z+3#;nSIU2KxUmb|+4HDGfW!&~c>{r+N zSI;QIwgY>3aGbrMSQX1jwoMPSbi8nQP`wTX4{)SU{0hn*Q3;~&BxS?Xt%!L!i8C6lXuqUTHljY`w7nwPasC2q zyKXbg2~25G%4EC*DcAaV%T1%Ja^VXr5u#Gh>wno>w${SdI7nL~E;edm7wKfVPl+Ir`*8@ZgzbapL~&&$%VN?T}`voc0Kw&}^4 zNz0{Xzg*~*4dO=~4meRTe`~g0i;fyLb@P9}`1;Zy$+GLLclZ6?x4)M!_pGeUTDzxv zx~pfEG}4Slvi8*qS(dDk23rnfki5v)7T6HBK>@NL0D-{5$YBDIe_$dE4t^M82rmS9 z<0kVj5%-I{NjIX z?njw0if1yyeBc~Z6A-N9aX=;&f0;NeO^YF7m6`?9X-d@82T0mhXPmGmj49*Ov+m^4 zQ|2|}s?NFQ2DGd{NvSeL`zX;VkhR!%o!$SPo@X4vs)wr9;K{?rZFY+tIO79h4JtAA zC}ZJjaQPv3fT!>JHk;j~%jRlG;QfDtPi`-!%eKvL%$6GiTTm9I)2^+nke(?Zq9IOp zvRG6Hv63ptDZqp=8LMJ;^4PePdS{EKHL0^T3J;bwnQLwx^m z67OzIu6hDBB$cZ}rE(}${>v&+eG8LIinDNgTT)2bLS)(F zkk;=ACXO!p`Jvwi{`1d(MO-HL`n+8B?Z81>_N;aIWj&-1zrN=eeVL*eco7#r!Ek0K zK*$iI+x4<;F5kT^(R5l(>m`3MOR5;NBbQpsFH!C=_u*4!)ZQwJQCmvdd|f4W(wZCi z8Tc)TSu!rcjv(qy786zAU}MsM68V>t-%Wltx#;I@`to)RlD$bH-o>~1ASUX4{)vh! z7WJDS9Z##OTx?81%5@rw%xJ0P6C6BO%$7%&;fb^;PmjIKow967vC)5zApCIx?~shA zjKJ^nZU%szHAl`&(%BP7f}{xeb`9@;@;$Ve@V1R-6~Max5wvL5SD_#5-~-w$ZXcN1 z>Uvw`5cAE|u*bh>&FLJhVuC#z`@-k;{n)P0y8_7XOe;q9=p>%z0CrHFu^g1ZI^fv} zA$EKQbf$hB)H1|3ptFCSelTZ3Y6(ux^3`#--kxr9N+D{kA;EkEUYK==u&4p%eW(4G zfFIvYp8g{WXtM*QtA0%f#Hoi>_I^_D{RCe7*-7vqF-6Wszzwn4z5uiX)&gzGFE5n zH(=({V@rhQTDHUyW@{2>JO20m-#|(7E3g;a^mZjx%WJl{;w@zvdC`cxFF(TMB^H*CCUOCZu z2C%Spjy_pi6o7wYVVu^-flwy3QSB%4%7}J30&?6O-MY-VVDd8!p;-;S_6#c~eqwr% zk&>;EfDnndecb=ebTlWv(fVGVq6-MT0jB8;jP!;g@%84Q9*F)dQyzAgmezNQU;}+ zcf9o|20THxGj}YdE9Ivb1|-DUtesD)qw#bEYMqhK%uDKCQwI#I?3bKu?2s|+iZuSth@Cda6gw%CrB_@kgQr)`OJQ7z8N12r%PS6vlbI8MO7J+n*hK^ zeXv!L1`JxzQS$X;Oy#7;=r%$mknJj9N|*%O%>Ab6Zda5F;vw~zAc=O6hz-?D=#0P@ zbWSCB&*f;^groJ6+Bv0U;p3;!23T>dM=t?yUJiem^!>>PlkZ6Wbn=7AU)psy4~3hD zsL&oD_XvNr3*6n~dY5y>6@P$V{r`jM9u9TT`2%R}Qd1eT_Vp*?$(R^3f1~!S?p(H= zE+_M9V%_bt^Q{_%T$>XjgJtARK5vM?L@M7JADnni*kVDIr*sVdW!XE@EC6km))h82 zLA(J*mw=@R7k@^!M#!Zvc#yXNp8Vj*;#_?s)*~^tMI6HLjUIQ{jbIBb&m3k(e+V|o z*(}#_P6M=50E!;c3FwUI?EYi$!%WsX6!U`77Q__7-Y-;CPOzol4{VnPPhg8>poFC6 z$AIlQkBOqfQ%r*8NITK@qif*xUr0U+(HpbdX7j+YKOitU-x8Z*Ukh2 z^aRjqAv5>AMUgopfRE*`saeK&{>;QV;p&kDeiHn7hS@~&a6ECO%FixiFExf|cz!-^ z9OLL4@x?7HvD>^(|5k z=6yTys()VsEaD&v2aemjVm+YglU(B{W1aa%TLuNzB^hVoB^&yfrqpLZ=1KD<$FWFyWobx2LOBq2OH~pUh|66)5in&ZzCp@ousu`Oh0rx| zKvpvSjz9{nLN^(aSWkEr0})2bGET@jOyjf#1_&ivAX6BT8!s=g@K0afVUQ=vFuoZm ztS#rRse(uLT#*sb4*X4Z zhT%sPg)r7KfaYrMs(3mF!Pa?pbFE40KLG-jrCa011}SdyLKfQ1&R6qU4Vl(l7C4@F zN*4xEUuO@2H z@&1VWzYDDP-z4YBtCAOz4<+9T{4R3aYokruZ9ic!c=Ch6roQ6_nq_CnQT?0w7GfYQpf`a)nLwx)K~Vb$R#ALNrqiT zI(;Nq7J@j+B<#us9~t(c9G)Lzuh~fP`HbF2V#* zG`m3*q4^xBk$*i|sRF2EKQ0JcMTZ(6!v>R5w*Pr?leVG>oTQ&H^uu+@lL%~CoQ-59v*bvT9ol=nCB&5JXC8P{C zHAY%_K1!Q8noTGR7B^Y?vKulb+1ae{MLWT9N&wxHvMOAe6{&Z1#Ta0kb)C0aJrO7a zO;^oZpJ(p|pei&%!2oRMF9INyN~iHGm*k%WZf9fln^Snhgk$Q>!kEtCVm6zEel|c0 z|E&x}Pk$O|wGp)MPXhLj0pq~CQUEBKeOP6bfutm%ACOE-)S5Wp%hG<#w{%zlbqB1A zqiX~Q{c;SOPG%qBMu4Qe&6Lm{Cw<5F50c+cej!;US3R>iP`T@x>7mx&AZK=!$g4hz z1h03;55&8@0oJDK$&H)Yquo)Fu8z88DC5v|$bWgTLaOg+sGfNc29jc|GhnpugYTfU zQe1tXB}&cew5o&wVJK z1AZg1rXb+n)jIU2b4V?%0{;l|SVBQWG{$!jkjvHSV z)0foy3>^l_0S+GOvboZjV76Xmmy(qrq zZ#5?MzP|Ys#?g-T9QKGs_#SayJJ%5S~^tAIBq+it%?s`eA9EmDmL9HPH|b7I0-`s%^?NjTN;3 zTIchC@N+?~uKhZzl3!zceAv`xCw9Kt414s5HV_YN@c%H==340mcz@&d3Y@5` zXTda95glYT2Is}pb=u^44M+_<<>Qc*Ou1OC=L;vj3B+mQxhu=2OF8&}(c0x*+b&Y! zbc*01WWzKoTkMSTUzbiHx*#v`(x+03)+5%UABv5Guv)dHEeg4OJdLem+ukW4%{0|h zAfEYnS&7gFmSH7*g%Nj_XMYn3DTb)GGirF%241B!LqfR}VT71;zyKVTJbwW*i%%RP zv2f!hwVcB<@kWdJ{ohOeSMu|_S+3Z=h+!A&vpZuR#)^8I{m3d6Pi44SZs()6E3#A{ z-8|}YeB?)~Q-pNs75Z)oM2_UkRbkM0GCNs^a&q1=nj+q9b0)Go@qfPL`~L^j?Y{t@ zzMH%hcviC0vb({}!@fQ|$JO^pu2pQV^+$LdJdW4Gyx$XAGiF38L{P=FEoVMelq}Pt zy%F;==ydjpqV6ERAfxJIox7m#p>&LC(ca;u;mUlFXzy%2i`QFqHnUjfKIQR*dXDA% zxDr}#%a=iN^<=cJDSuT05OYyXFdHky26p8*@+ONUhRr@Xf_EQk=NsNv0mb`ioaU643&&+WZyIm}MC*{1YZgzU zYN6|oI`;^L-~(T*YL_~vylclmEAvO4(zam1tICB(o+RQF2!CHSe=Uew#iajm?sPuN zt;-szQymH$IM29x5#F< zkJCq&n>Mt0Q-3oGIgw1AoKne)Lv2yQ41eoNv{gu1wSO z5g}@!FnK-bT*LgUi)@AgmZ*J!zNffd$VNY5TgUWMYhdL{K-SOXn?=LfcCGW}0ze;- zePh{WH2O#45w29if1&LrI{W1oW4x}*{~Ne40O_WQ+_A;17Jck z@R3&@RQ)dh-QACS4>FQh{5p0FmfK&8Fcbl<2HyN@MLHb=@_RmNId@IGeyhg53Jia( z5`Ve$({Vd8-ei-K#>1smo{eVO8_>dZRziS!@fR4d{%6h#S2ePJ11NgPBqTj6B)47j zY@SbS+2~?arY=u&bpkmP{3dF>d|^`#Nix^NXQ6*N`5(!@PMYLvlD7;q?fc=@>w>MX zPn5eyn|?enlHYrKA-37Y`C$eJyd_Gq_ou_8w6f(4A-iVSbu)xNNr1;Lx3e~H&rXhK6(`z2 z(3|&jhh-PAd*rf&$ZuuX$YA~3M{Ed+sw~Cz*lNy} zw`*hT+ZPK99?{NJZVN?>*@8j@W~RVekoY8{Y&wdq_&Z<_nvebpNJmq}x+Ycbv1KXC zQsL>{5Kq;P*GHF6zcL3U3Grl1`hQWHl`|0Vgfox~-wpDYgp%@a@*p0$z_j;-uOweg zej5Dz`F`qmQ(sSP+juf%FNYqidRJcIVi+un)NrU1-`j0}FZID+{+_N@lzY3`jxZ`) zV&T0a?ZW148l+b@;V+Onz)%+&92F7$(&M@BPLI9Id~^3|O_3bW=+muxvVUOJiRVoL zHi5u5T7g$kaFQ}BtCOqOm5gadsTH{f#g8UnF~Q?t6@-UX0W|TSkeLPDGi$gtpsQmP zu>1cR^v*8=I{vZbTZSm;cW$`VA+q(|`Kg0<52;|NbnKfRv3tDlM-67%9vtPm(Kc5* zzlev3;j4cr%HvkbvSPsGW0&-{2oir>nK7;EuG(zVRc_qaNvA1BVWt+gudG`x+euS7 zfq@1ryEFhHP$;{L(9N>41UZM$-;S5qU37?c2pJ51#TCK1GXnGwn2EHMNuVaI5RFQO zPBY+XRJ+a#tbAKShM9!i+_i}C>ZlxVFE&Rh2GuFK)|z{wt<(H1*n(^M_?dseDX`i9 z0y^TdkEyTSW9Y+{+~r--ldT=94F3!-tjZX4oBqt^j$mBvR6_$#_XB{R%F=lUzF_OH zC<&b%W%Y3v&d-*|VG5jcL20U8lVg-+>0~mYXtv0f+b8mJd5P0}bd=euIdNST917~4 zY-ED`JIsPF32+m`s0C`~2&R9t^Q_)X806mA9zq5Y5n|z(e!ELaEZR`asYi4f?aAXY z-B0n#6{UszZm0v9$s+?@-2ctwbIGqIk0ozUz9IRh!SDKPT=#>&o3Acm4#aDZLc_6& zSOD8yDYQ$-f)BmANIQ4c%{~6W>jsHY0L0q6Op?tDxzo< z?1nT&K?xJnrY#NVAH3WM*k*!pc~Rt(vx{X0iCs|GS%C98&p@rbSlL$e2>l;=o^l1c z^!580QNF)>4IYZ2N*v3?LzVc@sOlRk4}Z;KZw{l_J4y0c@5+txAr;nAloj3`pG?Z- zs#4@+o;S45xAUMUpi->HeFjglFEyZfU4(fNA4 ztg3LFW#c0UT)5D%XgwA@1s-agGU~asT~r-pDa~gmD!F^

<{);>O*s|?wf=0-S@ygoTAum^zH_h=5LyGWNneRz!gCUOlRXzQOjUjNpt}FNfVe-M+yei6-*D%^zJS*=!T80tR~0cFH+yEZ8%F0l z?tCZ??k4gEY1&`4a@EK4K&l4^{qg8i+~&x~YSL_?N#~R@^R&3Ze5o;@#Jx0LVOf)^HKGZ?SmKOs!)aM%^#W8;W}ar?)mD95=m;tc;q{^dVMR<` zyA0?6sdx#=omF}w5H`qgpa?|L!p4~bH$MtKmtve{JhNt!5gJB>8Z4wxcKnzI9Yo_D z&=vT=7m|OPyd?QR@_*svyOQsFm~jvAwI=}&_`rd83$ZUL$FJkLqB!t zL4>NwYXMG{0)JXT?0JYW;9I4`E{qN237`!ED6c>aC*|U+wmO*r3#!@^C@ty zk&Z``bx};RG!^PHU=Hl0C=`>HI$&x*8lD4$M%1OTtvSJDh|Awd{%7*9lBbgAhBKeB zv>E&F`_t<^e1G%;c$Zy!MzLcSS52f}dp{i<`Dzcdo9$0EVSF+-H1L+r%W<{ZbVth( zBAIBW@hYSnS?&GZ6FQm}#>_yW;+ym0=*l`D+-*7K!Ig78wMys2(;uLDZ1@V0y+sLH zuq;3aoQ_Y=#zn2oy`_QF!&!+r04vQzyuVS$DZTCUZhve+_-3NBJYyvCrFiqv?P z(-T5@ynhP{V0LLh*dPIEgG|Qf$DJRYgu<^Et%bxfewRGX=5w${vOB^5#pGv_Cz99p zTq-VMXfF5b8&n3sYke3Hxcl&d&V8Az+Uz2AsQO+-mVMP%!v0C^ia4lQTQtpK*%v^0 zvh2h|4l`*cDr2e)X6v?Kv6`;3d++qrsAXyAr+KC0Cz*~w z<^MV;-8|`bx5T_07}Xp0Q~D1V@;AE~)_#I9x_{q;X!^7ht9=IrHY~lj(JnrkpGd=^ z1%HfY1dQ>xO4E!fd^AV+w0zlUTQQp!&895YjgUVOcr~Up*wEG?XIB4N#xjt>mwZa3 z+By-ur*9#U<|_yQ6bt)0RGniqZ76*{-hftmNKbq;^W&_{8~mNB^!eBk{_$o#hoANR z!4%egy#fM?<0p035b0kAjc@|m>l>r;x_=i-+WQjz)ebm!k-mv`xaKAOKf|S8`=A)g z1P@%MpJC`b;)fyXXu*S%d|IkHP^lP40JkY{A4YKszf!^~O>49X89EEDPLTpR2C{ux z=WIG(Elg?5ZGbnQ2kS!T?SiAXXC${W_EVT%s0{^!T^zMt=W`%-&VS5+_nHviK7&%`tK z;IWe5aa%FB%}5`SZI++@wlSov!@^*Q-vrF4ifIsNE&!6U`l3j2AFn$Idm5tA`K#7x@Q+<>KF zhOq)o^E^C{Cjw5Dt8&aq3PQv&kyhxIVp30z(ttxil@ z?YyD!F}7tYSa#Cchk2IjBA4oUh6tcqAY2&tlc(*YuZ_M1UgKWhZ`;42sF=KuH0&#{ z4i0e$DqI#r?^9^iOK$GLD=)766{XtT;;Pl4p6g5@;|ju<2h1+&N;jo|$I=WLn|2^= zcC9cu*NaLd2!GsaCs5}y>5hEqCneFri=W_N`H!|8zI(eMI-MS`F)b_N0g2|FLFuHF z31hj7PL-xha3N*xwOLvCZ#S+Ar59Q1V!Qn&)+?%Mkx-s5;(7Rf0@A++R{qBQB<^Uw zE)K=f^#Hc7HQT=Q+4m2>-9P+(5GRPof0nb84Ve9AgMUePoVfagQ^a>&BGqvPKGbUU zaR*?|#%m&F#)~k^gZD*)^%71D05X?m4GP39Kxby=3?2@Q(n?d%XTbmf>)C@R0n_hR zlhP5|&C*;1Qu!qVOu@@lZqri=UYkrn1LJc>rg~%F2e2n~V$W5tmxc{|H9kjG572Ng z@P{X_UVm}x@tezY0A1(xFVh^L5D*7d2Npo-7Fj5prf`&JiOT@nF;@0Lq>vU*DsDg% zq(cdCF+jV+4A?Lsi`z!{WzGd) ztZ^KIxfWEL`L@amg4!1B0y5bV#^5W$v`~I?!+)BJVYvIepO^d_a3aqQ8KUZ%rQP;T z=0IqB?smBC*q?l*=G7q@QHXdrWf`?(2vZHleLslrpG#}WNuryS2{l`T(TsBfVlGP- z1;?Na!R1qH)1u@$*1{WOQd9?lh&uI1nykE6g>ESu2G@+xr(9WJCBZrYR|T)Wl*-CP z(0^3>CSiO5{#}_EZmFgOOUl<-ATsPgmLxd7kjt)#MQ3*x8X<+8u#$g>jxA+H9(ja; zbNL2X>m8u$XM051dzxMXE=lMs6dw%sCF>m`R(yzGogZ>2z1xr9@f@HfZDU10{P8RW zv~P+~7r;U5fb>$(ADb|dm2!HvTR37iz<&ni>ktMtNgJALf8CcZwqJ8y$bZ#IvI8>lR%YaeWS=Ex0JiL9T@ zY#)7N^ay0)At0X*_x1IIo*WW^d-nLU_Os}(;p*4d3*$r|!~K6A*P%VH8lu#FhJUdh zMjMEKW}Ps(%Hw1V0WNrPU+qqkOhf8 zl8j|j6uHlI+G3LhEn|QG+l?UBa*XpZ!8!OJ^$!*BnaoipwCynSm?cL6BcMf%4AT@8 zjm&d|c$SkUsn;nLM!(f6zw|z}X@3SsJ}rF8j9XJInMhUz748(rwsS6Ji*S*_pPL7q zYApb=_j4bsXq4}Z?l7DK-Y+C6A zz~`U!mNuwS2?CJcGPF`<(PcghO@nM{_3Kel6GYo`fia^SjD8&R($HYRQmGg{rmh5R zZULyo@oLK)QPjb?uZ$Dk0Olfzt*gWenT_p`B7e66g{Vh*3eb#28acr{1{b zNefnaleaFV3hohs1GRflI3JwLs#B;lZCL|APh5vh zVdV>a(dB2)X61a1STN-z@kMrG6$s(+sm)zGE!BhB^OzR(SluxBxB_F$RmergJ}VSy zgYoOLrb-1}RYeHgCQ~>qBEoUbWOCyjvI2j>6!(a(z?lFl0e^jYstQG|IoyEDv2Us5 zGcSG1xn`*^!OZX%sH=;9NBpC&jJ^q&`aa;1q0e`;4++NyzBIMfOXB?JmmM8_nGOf3 zscrxf zs59J6vSw)kssMLmgk@l(60icb;)T|gA=z%8x}wm0-nIs~J#EJrQO#Z zV5tXEdVV3Qt7KICj)Sd91DI@O#%t#Zhu+v3L(O8eu zY$~#%DU(?A`hKZOs|1|At_mX@CE(x%Hag7$&q{~sBreuaE{T&zK&7RqoOd?CE+-`8 z>GCEJ4S27>_@5e=>JxCh6;*$UzP&7~LXufCPEu-`NgVyi9#mBNTVb680`CX~T_-pV zsprz!xCsN3EQO0tUnPOTX+mm@)Oyb7t7{BQCIi$qn@4UDGk)I$%>9=Bq%T7zG1ycM z(tIy+_hGlsaQggkAN#E%L(zSGC|`l&+XtmDA^A%X#`fjt^j8R~kK=#Lo<)i$iV=~! zsU@x8b{VTuLqf@V9w%k8)agXkj7YCbMW<6;Si6#wb5yFXe#T0bDmZuoqF69I13Tiz zCBTZRRxVZOb1IF!5*XjROL>}8um=WiUtz(ucq;P()3n|c2ynijih7bEp;<#dK$v9> z=hL7K(;XFprQjXy<3&LNhD5QWc9OuA6o5XMCSsc2&+D&Pmypc}J5(SyS(%%dZZyF00vGsW#dc(^Il>nlLQVbag4|5l$jzB%->UVpspRq8nIkUWn$(Cabo ztHGRAoXZ(Qn(^m<;X#)l&IliWxlhY-d>8JdnoApMw=ll=RH-szbzP;ICbAeOUgu_$ zMF%}x!59_psIhyA%gvD>wK3AFxo7iud*ZCnP%E$Hc7x*3y!&eWhMjrLcCYN zKA&P(8>PX{6f^^itDUr~X;){Y3RQQ1WtV_H+CY;}fo~*Oh!a!BWUyH|L$pm=3qac} zEke}W`FiC*_NOgNBp3~@#A1=pY9at+CFRKl0 zG#}jt3>PaT-ad5g3;^zb@^l8OetFY}B*yune*1hM$=+M)dN2Dum)~9tRYOC0@UJey z8t9|c+j+9fUG-p9Yv(*1iAbHYd|im8_1kf*kV&mFSv|RJ8t=CbUibc9Op3=;w76m2 z&D=#!A^8MZ!Q{uCi4E#Ux`KoqsyniOlkGB<0FpleI-v@C z3r<6B&%oSw3==O`@H;ram5R)R2@;7D!?vTZz)AflKwWPbeRTB6(Wm-&))1sRKjgah z5aQYxgYB?0;AQ21eJkR@zX@>{zPKAc^2=00b!}{MY-JJW)#a(inR}xA%PMnf87H$g zr7l98kH=+Q7h&Rm8r3#U0ao_ZB0h};?=DFrv{myb+p^m_XPvf=AjQ1!7IT12NjyYA zTsAjG3mWUH0U6NZjfr5ufhAS946^1qdvqLZ=qdu>S%Qr><4gq|Cy#)U;_vc4HGWvA9i~T~T?e^t%`5Jxh4RgKQOYtjNNi~#e z_9|WWFZcCbS7je?5$6#}U&IVeecq?aYj}b0K2H$%wW3Wi0{df|d0Nfj;DoB%Y?G@@ zWmOrtaNyQ|!jl+TcvJzl37q11Ty@4OhP$NbwuA!EU1+f3X<)gcilFAWZkacsnhRD4 z!fJtpx?|@VaJDzImZ+zv2?8WCzh@PQd&Lq1fSqFZ9$sm4If;X|Z-doT>G5sl4*C}Q} z^H%rMoWIrY$~zm~+tRj@Z8zTC-{k;#W1?5{=sxscl1&C~1KzOJ9)2cZqN*?nwJ|4gtsiolV`SjRpYXmlgBKhwURkM9l2@SgcT zp|%xQu4}&xbs#_cXvf~Z$Mo30SRDCTNSacFSzX~&U<+6jgC3XnWk}MJaMyYO!l~^P zMt??13E)f$m77G$WLoI9qFG3-yJM2pEBfw9=%!j4mu1|fAci|O$9d3HP?VIVtMdAP zR08dZD+5;(N~ywuaYMcKNGXwUDd|+bmNMyYR44&jbJODKT068C{oy_ouAn6?Z zBdcx%BvtNavW|NGKIu!^^=HcjzS)38Q$Hs+3wz(OU!`30quLsTW8~(`Su+vL_dhzqIep} zL5w{ZTb_5hevBzrMG7%1OTkxtC(73W`@~$}tA@E=!z1sV`yuzz8@{@aLiZSdrwR$DT`wpCKru$uvi^+q>zmcrX@i-ON@B6_g&42W6Rrvsca2lR271 z!T0ja=q!SCatq5jZWE$w$;!ohjG^Ga&?1pcN^x4Kal-S{LRiU~ z+adqCPpMRwuDZYPZ43$aMNUNw>^(RiYVXTx|M{bhUU4$fWt_szORTcAT>~u!0wU*IFx|l;1D|S!{uNOE@m& z`qj~N)VY)J*A|E>PFlb^CbYMKX+93l_XuNpcZ$eSf~y3RP~0MU0N-K2hRh%R-sr!K z{=;Yr2=85^=X)N`FD~}sk0Dlm7)dq^>pf`1<>g;Rau)#dUiU2bP~5nNrN++-_HlekhN)q09-H=l1#eB7K=JA z{R{KyYcUTPk2g)IFc65Nb+cO}t0#5>J1jQ^;ITQ}WcKLGqu(F>yV0zlc>A_}zF+U_ghKceMp9{syEc zAeI%VuL@J%AtE9MN5tdBw^tVl_~^u8bsIHt^W8{jpHx>$szTty;CR-^ptq{rAzgK$g$J zia#@SK3rT&jrCYOMm-MqcNj%@Eq?-9Tn)}{U#9Cz3-f>4GARP6xPrr^tKNscMo`D@;>j0eg>UeS4FE>nz z+viFTKz7?d;Xy9_mBxNwVD&0-Ja!6W#zmuS)%dlz}>@FQ-F_uAqBo5RxybHkK+Il#Qw?g*rk(; zIngmiM769k!u>3H0aM9x#0xK$cURM*J3iWN7BfT?;ahOx(w*GbPWg#q**tERP)*%W z8u{JPSHYssM^7JW2`*vV`B0?#l32vmxm1JVUenj%T&|hFJ<~tG_{FUOCJJvjV@>TP z#&%kNO4C+(Y{3y;ZUDGA%fMsD-JZy|b=@i-@@|53NEG^RUMVK{QN}EnfQ^CY`s%Zi zG3D-j$JpmN$FuJ&8H*!iy3@)sA!9I=(~Roi)#7ZqoZPKD*X)1-2`cMt#zgYi<7pC7 zl4zG{)258;JR2%cGth=V>gy8UILzDI_cC06TCZ#3e_j5Ez~8k<>^=~CF+@-Iy+2ob z&cx5Un@xgm9o5^TVqJu)k)SPIH_xVbl2uV?y`D(V<4PgxZ!KL8RJ@Awi}J)UjyZ1` zx~&|@0kz%{TYQ2vF-i~jTXmKL+9}(6z$u${Ja1B#-E87!Le>Bbu3~Wq0ct3W%#Q7U zmMLJ3L@gwPhahWAG8CH<1tM@Bv1csKAGrXp|F+8wg}pAtqc}MK%fRQw_GOk~&>6l5 zIaRMTb?*X)hTQ7nb8S9d*zVSYlP0NaT3YM1O>p!@S{u96th_y29w&94TicZ?Sc=OD z+iH^3a2BLKrQz{SiPvTE)~aa7|0t$^G*C4*0)e1yyog;1a#tl3+599ygr<2hndxFx zQ|d991kBX<`vC%=8bG01X(G~xl&M%po?zVfetd28jnNnTX@k%1H!xhMv_s_f+o;6l zK(^|tOgZwiVQJD}V1~m4XHoS(`VOmbs~sTqIGmdi-MbwChg?!)F?WI> zz37^$0z(<94z3qW&G!NlR82-xF57xDo*vn0>dQjAe6tvrlXZGOqfKe&iw#>vB6Xq$a3&i!dotV+CFF6U)8>87eZt2k01qpLt=a{K)iW;y8W z$BcvDMRZ^D5j%h9 ziofzq$k+f;K(4>5tXXxjZ{e!$?b|teAzoMYUj+;92)XM3lsidddli{1eK~JX zyIxGK&1yM2I;sKfWa*u_#^`52}_%QTJZtKyi?pJA)f*i zz-=757^L^$9=HG+2jradutNZp6|R8>y-6<}{AO^S6D8x^Yk?^P!-jbq8+7JP3EES| z#U;Qf(UTw_1lL$9Y31tXvMrAm)!f&&s(vEfjhqO5Jk1lr!AQYZm;^sd1)v;)4WdE8 z`+J=SBf_Pi1U!j<68#37KOFsU;LQ2xWb|0Sv*mhRcaZt=D%!#?>u~tcz;V9MOm267 z>u5T+=jB{ZAKSKy2yYpm0VkMD40Q`-tEv#e38RmFnWSds=3=gR!XGT-nxW~P<=kbn zNgUn4fxzFK${IAg$fF;B()tpbxiNhTb{EyLp173D#^yDEUwL6s0_lnXR?g#e=06g%XYQHY2>Wd!u<(<|1yjPFE zTZUN zP`{*qNnWKtF8~mGOPy4@NO&q_#p))<+s7(>1THWxhKvQ2RGK8#h*NixVrgzY5eJF2 z$2S>gU^inHH}3Wo>f~lU+1`#-GUi2NWrq7mR`f{!8g%l_qYqwA6xv;Wj8A_^wZABC-}wftO1sde&P=jri74>}U|a31BCIi8h2VTLz>EpQ7W{}yZp3NnKQA?o z+S6feG?@uu{BAW4u`|;kb9a+4AmEZ4UVaK36A4x7kpRD!3PQB?6VNiC%YZ;9;Rk1b z=>%XS6>$-%uNbHrIRZ`%c40XhjlSO7g?%};T@tME&%tIAUC(B*p$t20N+^7 zZck^{055uiIh&AKMMP%S;24B`Z>If!JnG2q(eJ_g{jE{kcN`5;)c)6VFuZ4-lPrS6*XBII-NG0~h( z61@TjCfns5!xeMjUBEd!X|-U$Q>_SD7Fl4e83mC>(W_4%JsN#;^qc+OkJt8pRRa5P z#9*j;cDdc7LcU)owGYBvAA7w&YcV8Chs5dUGuP$lq)kP8vN3U8^PSk^@440Y79lY? zuCmO!(~uVlQW-$*53)Gve34U-5#o+nD~12*C@*hCvDSRg*^cFZuQ~mQQMJBf zOlu#)af;a4Ry_LV=nqE!b~NwjKD@r?OE32JMTo<#T^f(;$)G;87XL3A;q77bZhXF> znQ;Keb^r3Pi}&!WhEMzYvtM8!V_nPj*fY(aOsUPOx2Z9+CHSdO98-c~7C|C2UZ+SV z?9;4qZKB1KjA!$Z3*q>GhJmvo(z6#?>8RsVUTNakpOb|H=k^)+6AoZj?vo5uGO1}^ z60kqA&!#`kTL59ZH3&|UB=bP%#bUv4O}1qsX00+szi8c@6+X>#Psn>M)v4e&Ej0<} zZ*e5f0v=BCYojj%V@N<>9|HFrwo|<@Xzs8ksc*`vd5o&_edy(X5P2T>{FLQ)bU4;}5D&y}UVuCOMGf86Wqil>d8YA|9+4|C0*|O@qv*&s5 zGoLzDb!xn~?)cv8H`S$^9%#CohVBOf8k$Ko2#f#+fef+81Tv20*s=i&g$QT(0f~}7 zj${-mk`pVILhM9;iZj?!WJOUV$BGSx#2DiQTNz%~KBwxw+a3S8-S^$9d+V&d_FCV! zMomyPTh}AtKdfQ&IRWDKtKxGEMF@#>PB)<7PWrbqFj#(0YN6~eyE{+U)qGqsy#3*d z(UXku!}Un{w7O$rdz^B&)*!X=Vxeu*trt!j@2Bm$G_=}(oRO*h+Du0kHsF#y&lb6I@(X;ZW#v zZ^mHT=hqB>@X6o^dW6*>ZQ|Oq#xS#%tz`N~LEYLorBVxc)uL9n>e$Lojh}!BU3cgV zwyV2wGg|Y0DG?yx*rbg{l%hLv&Pg4|mL8;~ZQCq{>d%)eG2Wb{p9$2|<}Bs5(1}V$ z_y0HGs9y#j5#{$3=-dlEqWbVIHon=z+RaecJrL4=T{d*jxVU(b*lLF2_?@BZs{x|6 z*5abyme%wLOvLx^#rPjQeDvAPjD?2&%E_D6>aLy_VSBVhLTSPUVdJ~cM{Pj3^WX!@$|olDs6 zdbwgD5Z~?Gi{Eee*@r#A5SvSP@bgM#^_a1LhErPcGER9eN09;ocN8d2aq|@Jcb{^b zF^bZ>I&8C5G0iZ;ZLFs!N6U=H&E+*%#t}j?GlIOMjB(jn#;=J30T5-y+>6FW5YMZl zvM3lHPe6{g);^RNY3~UrI7TSz$i~2ZS8+l%Z~-Ift1t`Bt0FfluKuP}0*iy=Kwvt5 z9N~WX{OJgQ&FLiTyq?-;t)5u8@8$jf(#N1?$+NwtejxcsA6wa8R$upWYX(5DN2j2C zF=e~URqrC!+g)bv!2&uS6LR&Svwe(aD`NZXrL%>v7jTl*uh~4bT}iJ$6-WCaq$*~d zP8T+{@cqM?6oo@B4%Gw*$0Ua5O#ya)M24KHwgnbVvk|jO1NARCwr3x5Ay*0%+&c#b zZX;Wu{2yU5{48}9_G86eI?2JhXxg+6QKqEOaKuj$EI6?DxInvD10^|6ajcQxQeSJW zX^Tpr`Uyqo(?o*w3wi=p;|ro)ue!79Zw8a`8x9PWZ5o6}i3Viyo#b1fx%1?I4%mV? zH7xdgd@T7?@)sh9e?|Pa9}?0RDh}!HJ)w^_V`%EGn;4hk)h^4q4~q{8;Y%A4J<_%h zh(?h&do>1wR!4W{zNJm&_;Fop90W*`+)a5b z$plX60y?JFS^>-{oCR8`bizM>UDMH6+S^JWjOz*F&+r3opCc{U8}Y6QS)e};e+Ryi zXR4q3UgdEX8K6~=rRFiV5EKbDhi}a&3pJI`AWaN7QqxMnxSVyEq=@yc+|$*3Nz2ph z;dC-?5o3mp1@M0IGfsDI5l52<`Hl*FX2O%n{ck1TN&Y3Az)5lg(BY$hyY23S_V%!8 zGYB6Pc#nET-!c=+wtHDdQG$qffo9%2zN4?U#ls$z4w!}%rhEo-a2Ei@Gi*xF&{647v_Qbm8U8GPkoK(5U**af#BSt9 z8+tqfCdqzYaV=+gu1s?<;-gtxQvwjQ0geysQ*s3)HjPuMt_8w$XjEMG))K1Zyex~@ z4<0g}D=|TFUOE6EU{v)_lwnd~z`m;%<+2q4xJ;_N4+glZyZ^_@_dt&x0snI)+ZVf? z;ZF98DffY$i-BK%_22AT;^4Lp0j<5DT&_8p!x0e1O^`Gcff$j0HPuoht=)m-1?V=O%D5mr z&qbRZPp#o3F72|62ppo`L z=fp-_=@N{3cX4Zbv`e2I?dP>$71#c)mz&5h28(!c_s5hTp8-Ib=4rha%4C{=*{e8W zL6#DYXXQhG6OUDqwIu>SD#l~Z5duvDEAQB=gVas!Nh1x*IEp2>SZWP#EQ|#I3@jYY zLW*qLJPGt$X|SivAz33vNdvF(lQ^OuH;iY92|$%`57JRvhmbRJH-P&R&baax!Xb1k zXC*kX6_{R@9uv?^)M>|?vxblIaoMC`U0gQrbI@^r^X}J^Me^Fde|vYiuaqeV3_YwTf(H9So)^qq=;5+d$FT3lL%&KY%U^|mqJX(m`X=w4!#*6At34pgHHB{ zd)LGB00<7~aC@b!Xh#BL1>G-zZ#pbB;@!h6=66?lmosocB#RrY-b9!MW`*F^Ogd9) zGgI2SoCKG*DS)-tg8DE9cL8DT)zSqkFrp%Vjzv*V>sgM)P49}-h(j=6OKYa<;~B7& zbn2e;q3=|#8bwvez&4%1JELj2lJmM ze*&_)p1cKQ^@$|8xKfO=TT*k`xPQ0zewQt!5shpf=)<5fS2FK=l^K5D#jc7&Z2Dw> z+1=f%{w`9P%W5=gM}C}V$A?)tot4(vtZXQtVb0ZQXLF!((vy!-#KERGREGLQH&rJ& z2a`rJ+tkYI`oo^f6s1~W;Y&qO7mxr3O_kI5-7_3}#TFD(AUZ7OVDKCxiD^f|{7#>@ z5ynsJ+FUagCS1~S3P59Qa-5!loLQTHBF}KZd3KRzW-*0H$3HEXhPmIiP@kL<(cr_fQPUJa{nJU3U z82jAkqy(tr4kq4=j&A^*keHBM&DMn2di?hQ!Ag!hxNh+AucPrf=0wbhAaqoJV*Kps zdAoeFJ}Eq)R-n^1@49V0pJcL0v-f#KBWl3+e;c9XU%_pPn^B%mUW|9@qPML5@L&E) zrGS6AebjG_*&X=Ka8!e3>4Qn20(-P@#P>BU{9+$^0`U43dGe~0iIauR@{&maKGK|R zY{;$6DcC|DM4aqRs~RqjF*;;_tC+&j8GAG%bQ;S!JU)-}(;XM%gYdZNR_kuvVncqI zk2ObH06>Zh7nhERzR`F#i=~;E*PX^!*R998qbvdOUz@rh%5aNV5_VsRM zF_TA~GoKXeR;S%EmBS{P?x}cbQ)v-@w|zXS5LMv99;dsu~r{FdGpj((*qOlksnB%h#vmKujS2F`(u=g%!P z1z%<;1qi_7)Bw40B#z}%Zuyf!Sw8Z!YdP?h@kUn9WX0t1jFP{aPLW*`l*YZYBZ2U= z#$AEXNA2xAEe>;ln=I9)pPBPo@K^sL`K5juT~cp`9-0R#vnzUjkTBYth3bW%v9H=y z7V^kzfdEf7)k2+r72Sv**2O$E@Hz9lr3rOwNZrKRX?bpM+nA`!Dtx{i})kA@g!2v$d}JWLB)|`svUKMkeEu z%vVp`8I|Qt0`MSbxC_nn1bm$>lvoy{)itolxmy7GQgxeuH+tLxFb5M?v_CF0wSF97 zrCA&?3I_aMXAma2jVr;pYywfLVa#IQh>i-58VXlC)*4ARqUc@=Sf36Rd4G_6Gx^s^ zmYl{~tG&$okVF)@*nRk39mQ3V57i6Rt$sI6UlOwUvuZ+k_1EJ-^86YJa0nzegs#e9 z+M@7wBM_>8QxG;1<>YP}8((yWDY2Sy1-9MIW|M{VO}(6B6=(6#@#L)~Fc|>w=NDtM zM(iE%!YRObhD$JZl*wjv+YmM%11utB%yJ_hYZ{anXNzW;wbw@k+?T93QA)Em=6v}5 z-vtT$2Apu5|NiG5%s$xF!^AV&m&Ob-*~b+g)N@3CxI8@cuJw64B;ST`PIbwgV?=k$ zcU7w~!0=gwv&xlgLdWNmlsB8{3Qn&DekXy{I>GA3z`?~CZQb$lA}p&6`*jOP?kbNP zRjjvpI+>F$?gZ7NNjc&Zc-o0rl<4`iDAIuJJ-+1T^Mn!#MjB8hP;P}O1=dO8a&^}> zqukklxFR-B=Xo|xyY(o}Hvs&UB0vQoU5Yhv6i(#}#JbrW-kipXo4CXR{D%?0B7)8e zD|2sK16mdLul+9Y>$fF;CHaY=*LJYr`<>c5VeTScn;mHZC3@MmzX%QXwTrvB%n<(V z7iV31jNR~^%`U@!_fE4fvh9B`3_GiSZdQ$d7`Q;-xlPF1XN4pZxJ_xQY2`v; zge49Ad{M)-Rm@8+fDX=Ld$WG*Y}v+*x5vvI(MWI*0Xv(4E#_pL^Ky#f{5?4LQXtxY zJhaH_vxhQ_RbM<6=_`)A%L>`A|7&FB)5-(pB5|%jbm1|`_X5p0XK2>2`;v?Ow5pBR?6K-DL(>OwevUKZ#S~aHVvCj6xpmjye64ib?P59` z9~IN?%??O%(flZ@b>JU#uNjr0Ar!xV%`l*OpgNqTgj}~I25#v4>YRfk^9P4b8R8vW zfxi65 zDe|Moi|Sxp901=pI@T7H4;ux9H-Od6JH?!OYuw4XIx5Os@ouIF1*8C2F3&ylE;lXT ztjl!i;ShtRoa;9Ol2Jx;Po0S~NGzwqA|iz&WJ@QxRBD_WP7HT81Ry{82dFnnCjHcg z?E6Y&l-&I@Hq@0QR)YaWF;oX}DCpZkw}` zPJHW@O**yw$?J8*7aUkzrzv|*S;9b>=SX;=rZ<{4KbVBWa&q1ZxLwA7gS>Do9aO{~ zfiU=W#>ROwS!S3|Y*+w(WPQzO?EC$d>j<|J^6zI;_ZVcuP-me z)ga3&$nmzfKYbdx8T4%%f&EJqmC9xqL=!C0hGEp+nyuN|SJqA&a6z_p#Aj`JFXiE& zGDaHhjnJn^Q$gD zTCSGexwit;wF3Setf64T-hdevaTP4UQVceNbcBO3VeqplMj8`mPZ9MuJrM>NLq&

djE)I9x+; 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 ICNKVf0E3F@8UO$Q delta 323185 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

TX0I1iWo#~(mhv{ycvzG2 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�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 QjV4Kq5ZcU`AzLB;4}s#{?EnA( diff --git a/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/cfd_para.hypara b/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/cfd_para.hypara index c344658..f903a5a 100644 --- a/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/cfd_para.hypara +++ b/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/cfd_para.hypara @@ -8,23 +8,24 @@ // Platform for Hybrid Engineering Simulation of Flows + // China Aerodynamics Research and Development Center + // (C) Copyright, Since 2010 + +// PHengLEI 2212 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ########################################################################### # Default parameters for Grid conversion # ########################################################################### // gridtype: Grid type for generation, conversion, reconstruction, merging. -// 0 -- Unstructured grid. -// 1 -- Structured grid. -// 2 -- Hybrid grid, include both of unstructured and structured grid. -// gridobj: Task type of grid treatment. -// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. -// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. -// 2 -- Grid refinement. -// 3 -- Grid merging, merge two blocks into one block. -// 4 -- Grid deformation, achieve unstructured grid deformation. -// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. -// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. -// 7 -- Grid type change, convert structured grid to unstructured grid. +// 0 -- Unstructured grid. +// 1 -- Structured grid. +// 2 -- Hybrid grid, include both of unstructured and structured grid. +// gridobj: Task type of grid treatment. +// 0 -- Grid generation of typical case, such as cylinder, flat plate, etc. +// 1 -- Grid conversion, from other grid data to PHenglEI, such as Fluent, CGNS. +// 2 -- Grid refinement. +// 3 -- Grid merging, merge two blocks into one block. +// 4 -- Grid deformation, achieve unstructured grid deformation. +// 5 -- Grid repairing, repair the original grid in order to remove the negative volume cells. +// 6 -- Grid mirroring, mirror a symmetry grid to whole grid. +// 7 -- Grid type change, convert structured grid to unstructured grid. // multiblock: Multi-block grid or not, only for structured grid conversion. // 0 -- Not. // 1 -- Yes. @@ -46,19 +47,24 @@ int gridobj = 1; int multiblock = 0; int iadapt = 0; int SymmetryFaceVector = 1; - int gridReorder = 0; int faceReorderMethod = 0; -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. -int axisup = 1; +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; // omit_no_bound_bc: What's boundary condition for the type of "no_boundary_condition". // 0 -- Interface. (default) // 1 -- Physical boundary condition, used in Hybrid solver. int omit_no_bound_bc = 0; +int omitRepeatInterface = 1; //----------------------------------------------------------------------- # Grid data type # @@ -87,10 +93,9 @@ int dumpOldGrid = 0; // from_gfile: path of original data file for unstructure grid convert from. // out_gfile: path of target file for grid convert to, *.fts type of file usually. int numberOfGridFile = 1; -string from_gfile = "./grid/rae2822_hybrid2d.cas"; -string from_gfile1= ""; - -string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; +string from_gfile = "./grid/rae2822_hybrid2d.cas"; +string from_gfile1 = ""; +string out_gfile = "./grid/flat_laminr_133_85_2d.fts"; // ----------------- some advanced choices ------------------------------ // iunsteady: The Grid is for unsteady simulation or not. @@ -103,9 +108,9 @@ int fileformat = 0; // Parameters for hybrid solver. // mixgrid_uns: path of unstructure grid file for hybrid solver, *.fts type. -// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. -string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; -string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; +// mixgrid_str: path of structure grid file for hybrid solver, *.fts type. +string mixgrid_uns = "./grid/rae2822_uns2d_4.fts"; +string mixgrid_str = "./grid/flat_laminr_133_85_2d.fts"; // Some parameters for structured overlapping grid. int codeOfDigHoles = 1; @@ -119,31 +124,31 @@ string zoneInverseFileName = "./oversetGridView/zoneInverseMapping.inp"; // 0 -- Not. (default) // 1 -- Yes. // geometryUnit: Geometry unit. -// 1 -- meter. -// 2 -- millimeter. -// 3 -- inch. +// 1 -- meter. +// 2 -- millimeter. +// 3 -- inch. // exclusiveCase: Parallel projection exclusive case. -// 0 -- NON case. -// 1 -- JSM-C2-NPOFF case. -// 2 -- CHNT. +// 0 -- NON case. +// 1 -- JSM-C2-NPOFF case. +// 2 -- CHNT. // projectOrgPoint: If the original wall points need to be projected or not. -int anisoRefine = 0; -int geometryUnit = 1; -int isProject = 0; -int readDist = 0; -int isDeform = 0; +int anisoRefine = 0; +int geometryUnit = 1; +int isProject = 0; +int readDist = 0; +int isDeform = 0; int exclusiveCase = 0; int projectOrgPoint = 0; string geometryFileName = "./grid/jsm.igs"; // ----------------- Grid Deform Parameters ----------------------------- // deformationMethod: Grid Deform. -// 1 -- SPRING. -// 2 -- RBF. +// 1 -- SPRING. +// 2 -- RBF. // stationalGridFile: Original grid file. // visualFileName : The visualization file path of deform grid. // nDeformStep : The max deform step. -// flapAngle : The max flap angle. +// flapAngle : The max flap angle. // rotatePostionZ : Rotate postion. // rotatePostionY : Rotate postion. // gridSlice : If dump slice grid. @@ -163,10 +168,10 @@ int sliceAxis = 1; double slicePosition = 13; // ----------------- RBF Parameters ------------------------------------- -// numberOfReferenceCP : Number of reference Control Points. -// influencePara : The RBF influence radius parameter. +// numberOfReferenceCP: Number of reference Control Points. +// influencePara : The RBF influence radius parameter. int numberOfReferenceCP = 40; -double influencePara = 25.0; +double influencePara = 25.0; // ----------------- Periodic Parameters -------------------------------- // Notice: Rotational periodicity only support rotation along the X axis! @@ -178,9 +183,8 @@ double influencePara = 25.0; which only support one direction. // rotationAngle: The relative angle between two periodic face. which is recorded in degrees. - int periodicType = 0; -double translationLength[] = [0.0,0.0,0.0]; +double translationLength[] = [0.0, 0.0, 0.0]; double rotationAngle = 0.0; ######################################################################### @@ -192,7 +196,6 @@ double rotationAngle = 0.0; // 2 -- refine structured grid. // maxproc: The number of partition zones that want to be divided into. // numberOfMultifile: The number of partition grid files that want to be dumped out. - int pgridtype = 0; int maxproc = 4; int numberOfMultifile = 1; @@ -201,20 +204,20 @@ int numberOfMultifile = 1; // 0 -- Not. // 1 -- Yes. // blockIndexOfMark: the block index of mark, only for structured grid partition. -// cellIndexOfMark: the cell index of mark, only for structured grid partition. +// cellIndexOfMark : the cell index of mark, only for structured grid partition. int traceMark = 0; int blockIndexOfMark = 0; -int cellIndexOfMark[] = [185,30,1]; +int cellIndexOfMark[] = [185, 30, 1]; -// parallel Strategy: -//! -# 0 : each zone is assigned to the one that defined in grid partition procedure. -//! -# 1 : random assigned for each zone or by some else ways. -int parallelStrategy = 1; +// parallelStrategy: +// 0 -- each zone is assigned to the one that defined in grid partition procedure. +// 1 -- random assigned for each zone or by some else ways. +int parallelStrategy = 1; //----------------------------------------------------------------------- # File path # //----------------------------------------------------------------------- -// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). +// original_grid_file: Original grid file that want to be divided(PHengLEI type, *.fts). // partition_grid_file: Target partition grid file(PHengLEI type, *.fts). string original_grid_file = "./grid/sphere_mixed.fts"; string partition_grid_file = "./grid/sphere_mixed__4.fts"; @@ -232,11 +235,10 @@ string partition_grid_file = "./grid/sphere_mixed__4.fts"; // 1 -- perfect balance. // maxproc -- perfect imbalance. // 1.05 -- recommended. - int omit_no_bound_bc = 0; int npartmethod = 1; int parallelPartitionMethod = 2; -double parmetisBalance = 1.05; +double parmetisBalance = 1.05; // numberOfMultigrid: Number of multi-grid levels, ONLY used for structured grid. // 1 -- single level. @@ -248,29 +250,35 @@ int numberOfMultigrid = 1; # Default parameters for CFD simulation # ######################################################################### // maxSimuStep: The max simulation step, don't care simulation is restart or not. -// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. -// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. +// intervalStepFlow: The step intervals for flow variables file 'flow.dat' saved. +// intervalStepPlot: The step intervals for tecplot visual file 'tecflow.dat' saved. // intervalStepSample: The step intervals for monitored probes variables file 'sample.dat' saved. -// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. -// intervalStepRes: The step intervals for residual file 'res.dat' saved. -// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. -// 0 -- no precondition process. (default, mach > 0.3) -// 1 -- carry out precondition process. (mach number <= 0.3) - -int maxSimuStep = 20000; - -int intervalStepFlow = 1000; -int intervalStepPlot = 1000; +// intervalStepForce: The step intervals for aerodynamics coefficients file 'aircoef.dat' saved. +// intervalStepRes: The step intervals for residual file 'res.dat' saved. +int maxSimuStep = 20000; +int intervalStepFlow = 1000; +int intervalStepPlot = 1000; int intervalStepSample = 1000; -int intervalStepForce = 100; -int intervalStepRes = 10; -int ifLowSpeedPrecon = 0; +int intervalStepForce = 100; +int intervalStepRes = 10; // compressible: // 0 -- incompressible flow. // 1 -- compressible flow. (default) int compressible = 1; +// ifLowSpeedPrecon: Precondition process to accelerate convergence for low speed flow. +// 0 -- no precondition process. (default, mach > 0.3) +// 1 -- carry out precondition process. (mach number <= 0.3) +// Kprec: The coefficient K for the cut-off velocity. +// 1.0~3.0 is suggested. (default, 3.0) +// preconFarfieldBCMethod: The precondition method for farfield boundary condition. +// 0 -- precondition far-field boundary based on riemann invariants. +// 1 -- Turkel's simplified far-field boundary condition. +int ifLowSpeedPrecon = 0; +double Kprec = 3.0; +int preconFarfieldBCMethod = 1; + //----------------------------------------------------------------------- # CFD Control Parameter # //----------------------------------------------------------------------- @@ -281,33 +289,36 @@ int compressible = 1; // 0 -- the nondimensional conditions. // 1 -- the flight conditions. // 2 -- the experiment conditions. -// 3 -- the subsonic boundary conditions. +// 3 -- the subsonic boundary conditions. (Useless!) // 4 -- the condition that the velocity, temperature and density are given. // 5 -- the condition that the velocity, temperature and pressure are given. +//flowInitMethod: Flow field initialization method. +// 0 -- The entire flow field is initialized according to Infinite velocity. +// 1 -- The velocity near the wall is initialized according to the boundary layer of the plate. // refReNumber: Reynolds number, which is based unit length, unit of 1/m. // refDimensionalTemperature: Dimensional reference temperature, or the total temperature only for the experiment condition. // freestream_vibration_temperature: Dimensional freestream vibration temperature. // refDimensionalPressure: Dimensional reference pressure, or the total pressure only for the experiment condition. // height: Fly height, unit of km. // wallTemperature: Temprature of the solid wall, minus value is for adiabatic boundary condition. -// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter.Common dimensions like: -// 1 dm = 0.1 m. -// 1 cm = 0.01 m. -// 1 mm = 0.001m. -// 1 inch = 0.0254m. -// 1 foot = 12 inches = 0.3048m. -// 1 yard = 3 feet = 0.9144m. +// gridScaleFactor: The customizable unit of the grid, default value is 1.0 for meter. Common dimensions like: +// 1 dm = 0.1 m. +// 1 cm = 0.01 m. +// 1 mm = 0.001 m. +// 1 inch = 0.0254 m. +// 1 foot = 12 inches = 0.3048 m. +// 1 yard = 3 feet = 0.9144 m. // forceReferenceLength, forceReferenceLengthSpanWise, forceReferenceArea: Reference length, SpanWise length and area, independent of grid unit. // TorqueRefX, TorqueRefY, TorqueRefZ: Reference point, independent of grid unit. // radiationCoef: The radiation coefficient on wall, it is used to compute the radiation heat flux on wall when the boundary // condition is radiation equilibrium temperature, and 0.8 is the default value. -// refMolecularWeight : the reference molecular weight of gas used for perfect gas. The unit is g/mol. +// refMolecularWeight: the reference molecular weight of gas used for perfect gas. The unit is g/mol. // Generally, the gas is air. Sometimes, it is experiment gas, such as Nitrogen, Argon, and so on. - -int directionMethod = 0; +int directionMethod = 0; double refMachNumber = 0.73; double attackd = 2.79; double angleSlide = 0.00; +int flowInitMethod = 0; int inflowParaType = 0; double refReNumber = 6.5e6; @@ -321,29 +332,27 @@ double freestream_vibration_temperature = 300.00; //double refDimensionalTemperature = 6051.024; // The total temperature, T*(1+(refGama-1)*M*M/2). //double refDimensionalPressure = 4.299696E09; // The total pressure, p*(T0/T)^(refGama/(refGama-1)). -//int inflowParaType = 3; -//int nsubsonicInlet = 1; -//int nsubsonicOutlet = 1; -//string inLetFileName = "./bin/subsonicInlet.hypara"; -//string outLetFileName = "./bin/subsonicOutlet.hypara"; -//double refDimensionalTemperature = 288.144; -//double refDimensionalPressure = 1.01313E05; - -//The velocity, temperature and density are fixed. +// The velocity, temperature and density are fixed. //int inflowParaType = 4; //double refDimensionalVelocity = 1000.0; -//double refDimensionalDensity = 1.0e3; +//double refDimensionalDensity = 1.0e3; -//The velocity, temperature and pressure are fixed. +// The velocity, temperature and pressure are fixed. //int inflowParaType = 5; //double refDimensionalVelocity = 1000.0; //double refDimensionalPressure = 1.0e5; -//The MachNumber, temperature and pressure are fixed. +// The MachNumber, temperature and pressure are fixed. //int inflowParaType = 6; -//double refDimensionalTemperature = 293; +//double refDimensionalTemperature = 293.0; //double refDimensionalPressure = 8886.06; +// The velocity, temperature and pressure are read from file. +//int inflowParaType = 7; +//string weatherDataFilePath = "./WRFData/"; +//double longitude = 110.95 +//double latitude = 19.61; + double wallTemperature = -1.0; double radiationCoef = 0.8; @@ -357,41 +366,41 @@ double forceReferenceArea = 1.0; // unit of meter^2. double TorqueRefX = 0.0; // unit of meter. double TorqueRefY = 0.0; // unit of meter. double TorqueRefZ = 0.0; // unit of meter. +double knudsenLength = 1.0; // unit of meter. double refMolecularWeight = 28.9644; // unit of g/mol. //----------------------------------------------------------------------- # Spatial Discretisation # //----------------------------------------------------------------------- -#******************************************************************* -# Struct Solver * -#******************************************************************* +#************************************************************************ +# Struct Solver * +#************************************************************************ // inviscidSchemeName: Spatial discretisation scheme of struct grid. // Using this when solve structered grid or hybrid. -// -- "vanleer", "steger", "hlle", "lax_f". -// -- "roe", "modified_roe". +// -- "vanleer", "steger", "hlle", "lax_f", +// -- "roe", "modified_roe", // -- "ausm+", "ausm+w", "ausm+up", "ausmdv", "ausmpw", "ausmpw+". // isWennScheme: If using WENN Scheme of struct grid. -// 0 -- NO. (default) -// 1 -- Yes. +// 0 -- NO. (default) +// 1 -- Yes. // str_limiter_name: Limiter of struct grid. -// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth". -// -- "nolim", no limiter. -// -- "vanalbada_clz", clz supersonic version. -// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3" - +// -- "vanalbada", "vanleer", "minmod", "smooth", "minvan", "3rdsmooth", "3rd_minmod_smooth", +// -- "nolim", no limiter, +// -- "vanalbada_clz", clz supersonic version, +// -- "weno3_js", "wenn3_prm211", "wenn3_zm", "wenn3_zes2", "wenn3_zes3". string inviscidSchemeName = "roe"; int isWennScheme = 0; -string str_limiter_name = "vanalbada"; +string str_limiter_name = "vanalbada"; -#******************************************************************* -# UnStruct Solver or Common * -#******************************************************************* +#************************************************************************ +# UnStruct Solver or Common * +#************************************************************************ // viscousType: Viscous model. -// 0 -- Euler. -// 1 -- Lamilar. -// 2 -- Algebraic. -// 3 -- 1eq turbulent. -// 4 -- 2eq turbulent. +// 0 -- Euler. +// 1 -- Lamilar. +// 2 -- Algebraic. +// 3 -- 1eq turbulent. +// 4 -- 2eq turbulent. // viscousName: Laminar or tubulent model. // -- "0eq-bl". // -- "1eq-sa". @@ -410,16 +419,16 @@ string str_limiter_name = "vanalbada"; // 3 -- IDDES. // uns_scheme_name: Spatial discretisation scheme of Unstruct grid. // Using this when solve Unstructered grid or hybrid. -// -- "vanleer", "roe", "steger", "kfvs", "lax_f", "hlle". +// -- "vanleer", "roe", "GMRESRoe", "GMRESSteger", "steger", "kfvs", "lax_f", "hlle", // -- "ausm+", "ausmdv", "ausm+w", "ausmpw", "ausmpw+". // uns_limiter_name: Limiter of Unstruct grid. -// -- "barth", "vencat", "vanleer", "minmod". -// -- "vanalbada", "smooth", "nnd", "lpz", "1st". +// -- "barth", "vencat", "vanleer", "minmod", +// -- "vanalbada", "smooth", "nnd", "lpz", "1st", // -- "nolim", no limiter. // uns_vis_name: Discretisation method of viscous term. // -- "std", "test", "aver", "new1", "new2". // gradientName: Gradient reconstruction method. -// -- "default", "ggcell", "ggnode", "lsq". +// -- "default", "ggcell", "ggnode", "lsq". // ivencat: Variation of vencat limiter. // 0 -- org method, it is independent of grid scale. // 1 -- new method, it is dependent of grid scale. @@ -442,18 +451,18 @@ string str_limiter_name = "vanalbada"; // 3 -- Harten type, which is default used. // roeEntropyScale: Entropy fix (correction) coefficient scale, default is 1.0. // It is used to scale the default Roe entropy fix coefficients. -// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0 +// AusmpwPlusLimiter: A Limiter to make "function w" not change acutely in AusmpwPlus scheme, default is 1.0. -//int viscousType = 0; +//int viscousType = 0; //string viscousName = "Euler"; -//int viscousType = 1; +//int viscousType = 1; //string viscousName = "laminar"; -int viscousType = 3; +int viscousType = 3; string viscousName = "1eq-sa"; -//int viscousType = 4; +//int viscousType = 4; //string viscousName = "2eq-kw-menter-sst"; int DESType = 0; @@ -463,7 +472,7 @@ string uns_limiter_name = "vencat"; string uns_vis_name = "test"; string gradientName = "ggnode"; -int ivencat = 7; +int ivencat = 7; double venkatCoeff = 5.0; int reconmeth = 1; int limitVariables = 0; @@ -475,9 +484,9 @@ double roeEntropyScale = 1.0; double AusmpwPlusLimiter = 1.0; -//----------------------------------------------------------------------- -# Temporal Discretisation # -//----------------------------------------------------------------------- +#************************************************************************ +# Temporal Discretisation * +#************************************************************************ // iunsteady: Steady or unsteady. // 0 -- steady. // 1 -- unsteay. @@ -490,51 +499,57 @@ double AusmpwPlusLimiter = 1.0; // statisticalTimePeriod: Used as time period of statistic analysis. // when the value is negative, time period is treated as infinite. // statisticMethod: Statistic reynolds stress method. -// 0 -- tau = - ^2 -// 1 -- tau = +// 0 -- tau = - ^2 +// 1 -- tau = // min_sub_iter: The min sub iteration of unsteady simulation. // max_sub_iter: The max sub iteration of unsteady simulation. // tol_sub_iter: The tolerance of sub iteration of unsteady simulation. // tscheme: Temporal Discretisation method. -// 1 -- Runge-Kutta Multi-State. -// 2 -- Point implicit. -// 3 -- Full implicit. -// 4 -- LU-SGS. -// 5 -- Block LU-SGS. -// 6 -- Jacobian iteration. -// 7 -- Line LU-SGS. -// 8 -- Matrix LU-SGS. +// 1 -- Runge-Kutta Multi-State. +// 2 -- Point implicit. +// 3 -- Full implicit. +// 4 -- LU-SGS. +// 5 -- Block LU-SGS. +// 6 -- Jacobian iteration. +// 7 -- Line LU-SGS. +// 8 -- Matrix LU-SGS. +// 9 -- GMRES. // iSimplifyViscousTerm: Simplify the computation of viscous term in the Block LU-SGS method. The default value assigns 1 that could speed up the computation. // Otherwise, the viscous Jacobian matrix Mv should be computed that will increase the memory and time in iteration of the BLUSGS method. // CFLStart: Started cfl number. // CFLEnd: End cfl number. // CFLVaryStep: The number of step when cfl increase from CFLStart to CFLEnd. +// GMRESCFLScale : CFL = CFLStart * GMRESCFLScal^iteration. +// OriginalTscheme : Used for LUSGS and GMres hybrid computing. +// useLUSGSprecond: Initialize flow field for GMRES. +// 0 --Initialize by first order Jacobian matrix. +// 1 --Initialize by LUSGS. +// GMRESInitStep : the number of iteration step of irst order Jacobian matrix or LUSGS for initialize flow field. // ktmax: Dtratio. dt[i] = MIN(dt[i], ktmax * dtmin / vol[i]) // swapDq: Communication dq between forward/backward sweep of LUSGS or not, default is 0. // nLUSGSSweeps: Sub iteration of LU-SGS or Block LU-SGS. // LUSGSTolerance: Sub iter tolerance of LU-SGS or Block LU-SGS. // ifLocalTimeStep: Time step method. -// 0 --Local. -// 1 --Global. +// 0 --Local. +// 1 --Global. // isUseLocalCFL: use variable number of CFL or not. -// 0 -- global unified CFL number. -// 1 -- local CFL number. +// 0 -- global unified CFL number. +// 1 -- local CFL number. // isUsePreTwall: use the previous temperatures on wall. 1 indicates yes, and 0 indicates no. // visl_min: Minimum value of laminar viscosity coefficient. // turbCFLScale: Turbulence model cfl number factor. // codeOfAleModel: Arbitrary Lagrangian-Eulerian method. -// 0 -- no ALE method. -// 1 -- ALE method for non-moving grids. -// 2 -- ALE method for moving grids. -// 3 -- ALE method for deforming grids. +// 0 -- no ALE method. +// 1 -- ALE method for non-moving grids. +// 2 -- ALE method for moving grids. +// 3 -- ALE method for deforming grids. // wallFunctionType: The type of wall function to implement. -// 0 -- no wall function. (default) -// 1 -- standard wall function. -// 2 -- Pab3D wall function. +// 0 -- no wall function. (default) +// 1 -- standard wall function. +// 2 -- Pab3D wall function. // RKStage: The number of Runge-Kutta step. // lamda: Cofficient of Runge-Kutta step. - -int iunsteady = 0; +int iunsteady = 0; double physicalTimeStep = 0.01; double physicalTimeStepDimensional = -0.001; int ifStartFromSteadyResults = 0; @@ -543,39 +558,42 @@ int ifStaticsReynoldsStress = 0; int startStatisticStep = 800000; double statisticalTimePeriod = -1.0; int statisticMethod = 0; -int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2; +int linearTwoStepMethods = 1; // 1--BDF1; 2--C-N; 3--BDF2. int methodOfDualTime = 3; int min_sub_iter = 50; int max_sub_iter = 50; double tol_sub_iter = 0.01; -int tscheme = 4; +int tscheme = 4; int iSimplifyViscousTerm = 1; int ifLocalTimeStep = 0; int isUseLocalCFL = 0; int isUsePreTwall = 0; -double CFLStart = 0.01; -double CFLEnd = 10.0; -int CFLVaryStep = 500; - +double CFLStart = 0.01; +double CFLEnd = 10.0; +int CFLVaryStep = 500; +double GMRESCFLScale = 1.0; +int OriginalTscheme = 9; +int useLUSGSprecond = 1; +int GMRESInitStep = 1000; double pMaxForCFL = 0.2; double pMinForCFL = 0.1; double deltaMaxForCFL = 0.2; double magnifyFactorForCFL = 1.1; double reduceFactorForCFL = 0.5; -double ktmax = 1.0e10; +double ktmax = 1.0e10; -int swapDq = 1; +int swapDq = 1; int nLUSGSSweeps = 1; double LUSGSTolerance = 0.01; -int order = 2; +int order = 2; double visl_min = 0.01; double turbCFLScale = 1.0; -double csrv = 2.0; +double csrv = 1.0; double timemax = 1.0e10; double dtsave = -1.0; int maxale = 10; @@ -591,10 +609,9 @@ double lamda[] = [0.5, 1.0]; //int RKStage = 4; //double lamda[] = [0.25, 0.33333333333, 0.5, 1.0]; - -//----------------------------------------------------------------------- -# File In or Out # -//----------------------------------------------------------------------- +#************************************************************************ +# File In or Out * +#************************************************************************ // numberOfGridGroups: The number of grid groups. // gridfile: The partitioned Grid file path, using relative path, // which is relative to the working directory. @@ -611,20 +628,18 @@ double lamda[] = [0.5, 1.0]; // aircoeffile: The file path to save the aerodynamic force coefficients convergence process, write data for every default (intervalStepForce) steps. // restartNSFile: The file path to write restart flowfield variables, write data for every default (intervalStepFlow) steps. // turbfile: The file path to write restart flowfield variables of turbulence , write data for every default(intervalStepFlow) steps. -// visualfile: The visualization file path of flowfield , write data for every default (intervalStepPlot) steps. +// visualfile: The visualization file path of flowfield, write data for every default (intervalStepPlot) steps. // wall_aircoefile: The file path to save flowfield variables of wall, write data for every default steps. // nDumpSurfaceInfo = 0 the "wall_varfile" write the informations including heat flux. // nDumpSurfaceInfo = 1 the "wall_varfile" write the informations without heat flux. // nIsComputeWallDist: Whether to compute the wall distance. // 0 -- Compute wall distance. // 1 -- Not compute. -// -// protectionFile0 and protectionFile1 : Two continuation file of the data protection mechanism. -// wall_heatfluxfile : The file to output the MaxHeatFlux of wall. - -int numberOfGridGroups = 1; -string gridfile = "./grid/rae2822_hybrid2d__4.fts"; -string wallTemperaturefile= ""; +// protectionFile0 and protectionFile1: Two continuation file of the data protection mechanism. +// wall_heatfluxfile: The file to output the MaxHeatFlux of wall. +int numberOfGridGroups = 1; +string gridfile = "./grid/rae2822_hybrid2d__4.fts"; +string wallTemperaturefile = ""; int nIsComputeWallDist = 0; int walldistMethod = 1; @@ -632,10 +647,12 @@ int cellMethodOrNodeMethod = 0; string resSaveFile = "results/res.dat"; string turbresfile = "results/turbres.dat"; +string transitionResFile = "results/transitionRes.dat"; string aircoeffile = "results/aircoef.dat"; string restartNSFile = "results/flow.dat"; string turbfile = "results/turb.dat"; +string transitionFile = "results/transition.dat"; string visualfile = "results/tecflow.plt"; string wall_aircoefile = "results/wall_aircoef.dat"; @@ -645,10 +662,14 @@ string protectionFile0 = "results/flow0.dat"; string protectionFile1 = "results/flow1.dat"; string wall_heatfluxfile = "results/wall_heatflux.dat"; -int nDumpSurfaceInfo = 0; -string wall_varfile = ""; +string protectionTurbFile0 = "results/turb0.dat"; +string protectionTurbFile1 = "results/turb1.dat"; -string jetDefineFile = "bin/jet.hypara"; +string protectionTransitionFile0 = "results/transition0.dat"; +string protectionTransitionFile1 = "results/transition1.dat"; + +int nDumpSurfaceInfo = 0; +string wall_varfile = ""; string sixDofFileName = "results/sixDofInfo.dat"; string derivativeFileName = "results/identify.dat"; @@ -659,7 +680,8 @@ int plotFieldType = 0; // visualfileType: The file type of visualfile. // 0 -- Tecplot binary. // 1 -- Tecplot ASCII. - +// 2 -- Ensight binary. +// 3 -- Ensight ASCII. int visualfileType = 1; // samplefileMode: The dump mode of sample file. @@ -697,21 +719,21 @@ double upperPlotFieldBox[] = [1.0 1.0 1.0]; // -- vibration temperature(Tv, 33), electron temperature(Te, 34), vibrational energy(Ev, 35), electric energy(Ee, 36), // -- number density of electron(Ne, 37), dimensioanl density(rho, 38), dimensioanl pressure(p, 39), dimensioanl temperature(T, 40), // -- gradientUx(41), gradientUy(42), gradientVx(43), gradientVy(44), streamline_u(45), streamline_v(46), streamline_w(47), -// -- transition intermittency(intermittency, 51), -transition momentum thickness reynolds(MomentumThicknessReynolds, 52), -// -- overlap iblank(iblank, 81) - -// -- specific heat ratio(gama, 56) +// -- transition intermittency(intermittency, 51), transition momentum thickness reynolds(MomentumThicknessReynolds, 52), +// -- local CFL Number(localCFL, 57), minimal CFL Number(minCFL, 58), +// -- overlap iblank(iblank, 81), +// -- specific heat ratio(gama, 56), Knudsen number(kn, 60), Damkohler number(Da, 61), vibrational nonequilibrium number(Vi, 62). // Important Warning: Array size of visualVariables MUST be equal to nVisualVariables!!! // Variables order must from small to big. //-----------the optional parameters list for the wall boundary condition---------------- // nVisualWallVariables: The number of visual variables on wall. // visualWallVariables : dumped variable types, listed as following: -// -coefficient of pressure(cp, 0), -coefficient of friction(cf, 1), yplus(2), -non-dimensional heat flux(Q_NonDim, 3), -dimensional heat flux(Q_Dim, 4), -// -pressure on wall(pw, 5), -temperature on wall(Tw, 6), -density on wall(rhow, 7), -heat flux of translational-rotational temperature term(Qtr, 8), -// -heat flux of species diffusion term(Qs, 9), -heat flux of vibrational temperature term(Qv, 10), -heat flux of electron temperature term(Qe, 11), -// -species mass fractions(Ns, 12), -x component of wall velocity(Vx, 13), -y component of wall velocity(Vy, 14), -z component of wall velocity(Vz, 15) -// -slip translational-rotational temperature(Tts, 16), -slip vibrational temperature(Tvs, 17), -slip electron temperature(Tes, 18), -absolute wall velocity(Vs, 19) -// -Stanton number(St, 20), -coefficient of heat rate(Ch, 21), -temperature jump(deltaT, 22), -Grid Reynolds number on wall(Re_w, 23) +// -- coefficient of pressure(cp, 0), coefficient of friction(cf, 1), yplus(2), non-dimensional heat flux(Q_NonDim, 3), dimensional heat flux(Q_Dim, 4), +// -- pressure on wall(pw, 5), temperature on wall(Tw, 6), density on wall(rhow, 7), heat flux of translational-rotational temperature term(Qtr, 8), +// -- heat flux of species diffusion term(Qs, 9), heat flux of vibrational temperature term(Qv, 10), heat flux of electron temperature term(Qe, 11), +// -- species mass fractions(Ns, 12), x component of wall velocity(Vx, 13), y component of wall velocity(Vy, 14), z component of wall velocity(Vz, 15), +// -- slip translational-rotational temperature(Tts, 16), slip vibrational temperature(Tvs, 17), slip electron temperature(Tes, 18), absolute wall velocity(Vs, 19), +// -- Stanton number(St, 20), coefficient of heat rate(Ch, 21), temperature jump(deltaT, 22), Grid Reynolds number on wall(Re_w, 23), Knudsen number(Kn_wall, 24). int nVisualVariables = 8; int visualVariables[] = [0, 1, 2, 3, 4, 5, 6, 15]; @@ -739,16 +761,18 @@ int dumpStandardModel = 0; // 1 -- Real cell where the probe is located. // nProbeVariables: Number of variables want to be dumped for probes monitered. // probeVariables : Variable types dumped, listed as following: -// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6). +// -- density(0), u(1), v(2), w(3), pressure(4), temperature(5), mach(6), +// -- dimensioanl_density(7), dimensioanl_u(8), dimensioanl_v(9), +// -- dimensioanl_w(10), dimensioanl_pressure(11), dimensioanl_temperature(12). // Important Warning: Array size of probeVariables MUST be equal to nProbeVariables!!! // probeVariables order must from small to big. // probeVariablesInterpolationMethod: Interpolation method used to compute the probe variables. -// 0 -- Take the value of probe's cell as probe real value. -// 1 -- Interpolation from probe's and neighbouring cell to probe. -// 2 -- Interpolation from probe's cell nodes to probe. +// 0 -- Take the value of probe's cell as probe real value. +// 1 -- Interpolation from probe's and neighbouring cell to probe. +// 2 -- Interpolation from probe's cell nodes to probe. int ifSetDataMonitor = 0; -int dataMonitorType = 0; +int dataMonitorType = 0; string probesDefineFile = "bin/probes_XYZ.dat"; //int dataMonitorType = 1; @@ -761,28 +785,26 @@ string probesDefineFile = "bin/probes_XYZ.dat"; int searchCellsMethod = 0; -int nProbeVariables = 7; -int probeVariables[] = [0, 1, 2, 3, 4, 5, 6]; -int probeVariablesInterpolationMethod = 0; -//----------------------------------------------------------------------- -# Turbulence Parameter # -//----------------------------------------------------------------------- +int nProbeVariables = 14; +int probeVariables[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; +int probeVariablesInterpolationMethod = 0; + +#************************************************************************ +# Turbulence Parameter * +#************************************************************************ // turbInterval: Iteration number of turbulence. // kindOfTurbSource: Kinds of turbulent source. // 0 -- Original. // mod_turb_res: If modify the residuals for the cells next to the wall or not, default is 0. -// transitionType: transition model type +// transitionType: transition model type // 0 -- none. // 2 -- gama-re-theta. -// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition -// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not - - +// turbIntensity: (valid while greater than 0.0 ) turbulent intensity of free stream(*100) in transition. +// freeturbIntensitySRModify: to use SR modify in free stream turbulent intensity decay or not. int turbInterval = 1; int turbOrderStruct = 2; int kindOfTurbSource = 0; int mod_turb_res = 0; -double turb_relax = 1.0; double freeStreamViscosity = 1.0e-3; double muoo = 3.0; double kwoo = 5.0; @@ -790,29 +812,28 @@ int transitionType = 0; double turbIntensity = -1.0; int freeturbIntensitySRModify = 0; double freeDecayXLocation = 0.0; -int compressibleCorrection = 0; -int prandtlNumberCorrection = 0; +int compressibleCorrection = 0; int transitionMaFix = 1; -# maximum eddy viscosity (myt/my) max. +// maximum eddy viscosity (myt/my) max. double eddyViscosityLimit = 1.0e10; int monitor_vistmax = 0; -//----------------------------------------------------------------------- -# LES Parameter # -//----------------------------------------------------------------------- +#************************************************************************ +# LES Parameter * +#************************************************************************ // iLES: Create LESSolver or not. -// = 1 - Create LESSolver; -// != 1 - not. +// = 1 -- Create LESSolver; +// != 1 -- not. // amplitudeofDisturb: Amplitude of adding disturb. // disturbstep: Unsteady time step or steady iteration of adding random disturb. // iterdisturb: Add random disturb in every sub-iter or only first sub-iter. -// = 0 - in only first sub-iter; -// != 0 - in every sub-iter. +// = 0 -- in only first sub-iter; +// != 0 -- in every sub-iter. // ipraddisturb: Add density and pressure disturb or not. // ibodyforce: Add body force in source flux of NS equations or not. -// = 0 - not; -// != 0 - Add body force. +// = 0 -- not; +// != 0 -- Add body force. // bodyforce: Body force in source flux of NS equations or not. // utau: friction velocity, using in DNSDisturb. // sgsmodel: subgrid scale model. @@ -820,23 +841,22 @@ int monitor_vistmax = 0; // = "dsmCom"; // = "wale"; // = "sigma". -// deltaFunctionType: = 1 - MAX(deltai, deltaj, deltak); -// = 2 - pow(deltai * deltaj *deltak, 1/3); -// = 3 - Devloped by Scotti. -// wallDampingFunctionType: = 0 - no wall function; -// = 1 - van Driest; -// = 2 - developed by Dr. Deng Xiaobing; -// = 3 - developed by Piomelli. +// deltaFunctionType: = 1 -- MAX(deltai, deltaj, deltak); +// = 2 -- pow(deltai * deltaj *deltak, 1/3); +// = 3 -- Devloped by Scotti. +// wallDampingFunctionType: = 0 -- no wall function; +// = 1 -- van Driest; +// = 2 -- developed by Dr. Deng Xiaobing; +// = 3 -- developed by Piomelli. // turbViscousCutType: turbulent viscosity cut type. -// = 0 - mu_total = mut + mul; -// = 1 - mu_total = max(mut-mul,0)+ mul; -// = 2 - mu_total = max(mut ,0)+ mul. +// = 0 -- mu_total = mut + mul; +// = 1 -- mu_total = max(mut-mul, 0) + mul; +// = 2 -- mu_total = max(mut , 0) + mul. // smagConstant: constant of smagorinsky model. // waleConstant: constant of wale model. -// filterDirection[3]: filter variables in i, j, k direction or not. +// filterDirection [3]: filter variables in i, j, k direction or not. // averageDirection[3]: average variables in i, j, k direction or not. // isotropicConstant: constant of isotropic part of SGS stress. - int iLES = 0; string sgsmodel = "smagorinsky"; int deltaFunctionType = 2; @@ -852,19 +872,16 @@ double testFilterScale = 2.0; int averageWidth = 1; int monitorNegativeConstant = 0; -//----------------------------------------------------------------------- -# Other Parameters for Hypersonic Non-equilibrium Gas # -//----------------------------------------------------------------------- +#************************************************************************ +# Other Parameters for Hypersonic Non-equilibrium Gas * +#************************************************************************ // dg_high_order: // 0 -- generic order accuracy. // 1 -- high order accuracy. // iapplication: // 0 -- gas model is fixed in the codes. // 1 -- gas model is imported from library files. -// isAdaptiveSolver: isAdaptiveSolver=0 indicates the generic Navier-Stokes solver, -// isAdaptiveSolver>0 indicates the HyFlow self-adaptive solver. -// 1 -- using HyFlow self-adaptive solver where the switch is controlled by the total iteration steps. -// 2 -- using HyFlow self-adaptive solver where the switch is controlled by variation of the key residual. +// isAdaptiveSolver: isAdaptiveSolver = 0 indicates the generic Navier-Stokes solver, // nm: Equation number of the physics, but is out of commision now. // 4 -- for 2D. // 5 -- for 3D. @@ -875,7 +892,7 @@ int monitorNegativeConstant = 0; // 2 -- Argon. // 3 -- Nitrogen. // nEnergyRecycle: The type of EnergyModel Recycle. -// 0 -- not used . +// 0 -- not used. // 1 -- used. // nDensityModify: The type of densitymodify. // 0 -- not used. @@ -883,26 +900,25 @@ int monitorNegativeConstant = 0; // nchem: // 0 -- without chemical reaction flow. // 1 -- the chemical reaction flow is considered. -// nEquilibriumGas: the variable is valid when the condition of nchem=0 is satisfied. +// nEquilibriumGas: the variable is valid when the condition of nchem = 0 is satisfied. // 0 -- perfect gas. // 5, 7, 11 -- equilibrium gas, meanwhile, its value denotes the number of gas component. -// nPCWCycleStep: the maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. -// the value equals to or is greater than 1, and 3 is for default value. -// nRETCycleStep: the maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. -// the value equals to or is greater than 1, and 3 is for default value. -// nSLIPCycleStep:the maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. -// the value equals to or is greater than 1, and 3 is for default value. -// nSlipBCModel : The computational model of slip boundary conditions. - -// 0 -- no slip. -// 1 -- the conventional Maxwell slip conditions. -// 2 -- the Gokcen slip conditions. -// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. -// 4 -- the Kogan simplified slip conditions. -// nMeanFreePathType : the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. -// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). -// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. -// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). +// nPCWCycleStep: The maximum step number of iteration in the module of computing species mass fractions with the partial catalytic wall(PCW) condition. +// The value equals to or is greater than 1, and 3 is for default value. +// nRETCycleStep: The maximum step number of iteration in the module of computing radiation equilibrium temperature on wall. +// The value equals to or is greater than 1, and 3 is for default value. +// nSLIPCycleStep:The maximum step number of iteration in the module of computing slip temperature, slip velocity and slip species mass fraction. +// The value equals to or is greater than 1, and 3 is for default value. +// nSlipBCModel: The computational model of slip boundary conditions. +// 0 -- no slip. +// 1 -- the conventional Maxwell slip conditions. +// 2 -- the Gokcen slip conditions. +// 3 -- the Knudsen-layer correction of the standard slip conditions proposed by Lockerby, et al. +// 4 -- the Kogan simplified slip conditions. +// nMeanFreePathType: the method to the mean free-path for the slip conditions. For the mixture, 0 is suggested. +// 0 -- the equivalent mean free-path is calculated by the simple hard sphere model(HS). +// 1 -- calculated by the definition that includes the variables of the number density and the molecule diameter. +// 2 -- the equivalent mean free-path is calculated by the variable hard sphere model(VHS). // nchemsrc: // 0 -- the source terms are not computed. // 1 -- the source terms are computed. @@ -913,148 +929,151 @@ int monitorNegativeConstant = 0; // 1 -- One-temperature model. // 2 -- Two-temperature model. // 3 -- Three-temperature model. +// isUseNoneqCond: +// 0 -- compute the source terms without any conditions. +// 1 -- compute the source terms using the non-equilibrium condition. +// frozenCondition: the threshold value of frozen chemical flow condition, 0.1 is the default value. // nIdealState: whether take all gas species as ideal gas for gas-mixture process. // 0 -- No. -// 1 -- Yes. -// nTEnergyModel: the method to computing temperature energy model. +// 1 -- Yes. // nTEnergyModel: the method to computing temperature energy model. // 0 -- the energy term is computed using the conventional method. // 1 -- the energy term is computed using the polynomial fitting method. // 2 -- the energy term is computed using the piecewise polynomial fitting method. // parkVDPower: the power of translational-rotational temperature in the Park V-D(vibration-dissociation) coupling model. // The value is in range of [0.0, 1.0], DPLR suggests 0.5, LAURA suggests 0.7, while 0.6 is given as default value. // catalyticCoef: -// 0.0 -- full non-catalytic wall boundary condition. -// 1.0 -- full catalytic wall boundary condition. -// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. -// nIsSuperCatalytic : the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. -// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. -// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. -// nTemperatureJump : the method to calculate the temperature jump. -// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. -// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. -// nSurfGradMethod : the method to compute the surface heating ratio. -// 0 -- the gradient of variable is computed with the first-order difference method. -// 1 -- the gradient of variable is computed with the Green-Guass integral method. -// nRapidFlowfield : initialize the flowfield using the rapid engineering method when it is greater than zero. -// nSurfHeatMonitor : To exam the surface heating change or not. 0 is no, 1 is yes. -// nInitPressureStep : the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. -// nDumpCFLNumber : 1 indicates dumping the CFL number to file, 0 denotes no dumping. +// 0.0 -- full non-catalytic wall boundary condition. +// 1.0 -- full catalytic wall boundary condition. +// in range of (0.0, 1.0) -- partial catalytic condition, the value indicates the catalytic coefficient. +// nIsSuperCatalytic: the super catalytic condition for the fully catalytic wall, and assigned with the value of 1. +// 0 -- equilibrium condition for the fully catalytic wall where the mass fractions are assigned with the values of the free stream. +// 1 -- super catalytic condition for the fully catalytic wall where all the atomic components combine into molecular components. +// nTemperatureJump: the method to calculate the temperature jump. +// 0 -- calculated by the variables of heat conductivity and constant volume specific heat for each energy mode. +// 1 -- the general method where the iteration is calculated with the translation-rotation temperature. +// nSurfGradMethod: the method to compute the surface heating ratio. +// 0 -- the gradient of variable is computed with the first-order difference method. +// 1 -- the gradient of variable is computed with the Green-Guass integral method. +// nRapidFlowfield: initialize the flowfield using the rapid engineering method when it is greater than zero. +// nSurfHeatMonitor: To exam the surface heating change or not. 0 is no, 1 is yes. +// nInitPressureStep: the steps to initialize the boundary variables when the rapid method is used. 100 is the default value. +// nDumpCFLNumber: 1 indicates dumping the CFL number to file, 0 denotes no dumping. // sigmaVelocity: the coordination coefficient of tangential momentum for computation of slip velocity. The value is in range of (0.0, 2.0]. // sigmaTemperature: the heat coordination coefficient for computation of slip temperature. The value is in range of (0.0, 2.0]. // sigmaMassFraction: the species coordination coefficient for computation of slip mass fractions. The value is in range of (0.0, 2.0]. // velocitySlipCorrectConstant: the correction constant to the velocity slip condition. For the diffuse reflection, 1.0 is used. -// 1.0 -- proposed by Maxwell. -// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. -// 1.146 -- proposed for an additional "fictitious" velocity slip. - -// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. -// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. -// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. -// nIsChemicalFreeze : the flag to freeze the chemical reactions. -// 0 -- not freeze, the chemical reaction sources will be calculated. -// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated.// veTemperatureMin: The minimum of Tv and Te - -//maxViscous: the maximum of Viscous. -//trTemperatureMin: the minimum value of trTemperature. -//veTemperatureMin: the minimum value of veTemperature. -//densityMin: the minimum value of density. -//tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. -// nDebug: cout the Wrong place and abort -// 0 -- not used. -// 1 -- used. +// 1.0 -- proposed by Maxwell. +// sqrt(2/PI)~0.8 -- used for "micro-slip", namely the actual velocity slip at the wall. +// 1.146 -- proposed for an additional "fictitious" velocity slip. +// chemicalRelaxCorf: The value is in range of [0.001, 1.0]. +// spectrumRadiusCoef: The value is in range of [0.0, 2.0]. +// staticPressureRelaxCorf: The value is in range of [0.1, 1.0]. +// nIsChemicalFreeze: the flag to freeze the chemical reactions. +// 0 -- not freeze, the chemical reaction sources will be calculated. +// 1 -- freezes the chemical reactions, the chemical reaction sources will not be calculated. +// veTemperatureMin: The minimum of Tv and Te. +// maxViscous: the maximum of Viscous. +// trTemperatureMin: the minimum value of trTemperature. +// veTemperatureMin: the minimum value of veTemperature. +// densityMin: the minimum value of density. +// tAdjustmentFactor: magnification of temperature, this value is in range of (1.0, 10.0]. +// nDebug: cout the Wrong place and abort +// 0 -- not used. +// 1 -- used. // nSpeciesLimit: limitter of gas species -// 0 -- not used. -// 1 -- used. -// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction -// 0 -- method 0. -// 1 -- method 1. -// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid -// 0 -- not used. -// 1 -- used. -// nViscosityPeModified: Pe Modified for ViscosityCoef -// 0 -- not used. -// 1 -- used. -// nChemcalSourceModified: Modified on ChemcalSource -// 0 -- not used. -// 1 -- used. -// nChemcalSourceEsMethod: Modified on ChemcalSource -// 0 -- approximation algorithm 1 (Ori.) -// 1 -- approximation algorithm 2 (New) - +// 0 -- not used. +// 1 -- used. +// nTurblenceForChemical: the coupled mode of Turblence and Chemical reaction. +// 0 -- method 0. +// 1 -- method 1. +// nViscosityFluxSublevelModified: Modified for ViscosityFlux on Sublevel grid. +// 0 -- not used. +// 1 -- used. +// nViscosityPeModified: Pe Modified for ViscosityCoef. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceModified: Modified on ChemcalSource. +// 0 -- not used. +// 1 -- used. +// nChemcalSourceEsMethod: Modified on ChemcalSource. +// 0 -- approximation algorithm 1 (Ori). +// 1 -- approximation algorithm 2 (New). // nMaxStepTemperature: the iterative steps of temperature. - -// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs -// 0 -- not used -// 1 -- used - -// nDiagonalModified: Modified on Diagonal -// 0 -- not used -// 1 -- Ori. -// 2 -- new - -//nGradPrimtiveMethod: -// 0 -- Ori. -// 1 -- new +// veTemperatureMinModified: Modified on the minimum of Tve for Cvvs. +// 0 -- not used. +// 1 -- used. +// nDiagonalModified: Modified on Diagonal. +// 0 -- not used. +// 1 -- new. +// nDiagonalModifiedTurb: Modified on Diagonal for turbulence. +// 0 -- not used. +// 1 -- new. +// nGradPrimtiveMethod: +// 0 -- Ori. +// 1 -- new. // nAblation: -// 0 -- The wall ablation is not computed. -// 1 -- The wall ablation is computed. +// 0 -- The wall ablation is not computed. +// 1 -- The wall ablation is computed. // isInjection: -// 0 -- The injection velocity of ablation wall is not computed. -// 1 -- The injection velocity of ablation wall is computed. +// 0 -- The injection velocity of ablation wall is not computed. +// 1 -- The injection velocity of ablation wall is computed. // nViscosityModel: -// 0 -- Blottner fitting method(N89). -// 1 -- Gupta fitting method(N90). +// 0 -- Blottner fitting method(N89). +// 1 -- Gupta fitting method(N90). // nContinueModel: The new continue model can switch different computation model. -// 0 -- Not use the new continue model. -// 1 -- use the new continue model. +// 0 -- Not use the new continue model. +// 1 -- use the new continue model. // nSutherland: -// 0 -- stands for selecting the Blotter curve fits mode. -// 1 -- stands for Sutherland relation. +// 0 -- stands for selecting the Blotter curve fits mode. +// 1 -- stands for Sutherland relation. // gasfile: Indicates the gas model, 9 models are provided, namely "Gu5", "Gu7", "Gu11", "Pa5", "Pa7", "Pa11", "DK5", "DK7", "DK11". -// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. -// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. -// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. -// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. -// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. -// "Gas-Mixture" -- indicates the process of mixing gas without reacting. -// for struct solver mixing two speciesSpeciesA, SpeciesB. -// for unstruct solver mixing multi-speciesO2 NO CO CO2 H2 N2 Air CH4. -// For self-definition model, the gasfile is used to indicate the file path of the new gas model. +// "Gu" -- indicates the Gupta Model, three-Type Models are embeded in the library, namely, the 5-species-6-reactions, the 7-species-9-reactions, the 11-species-20-reactions. +// "Pa" -- indicates the Park Model, three-Type Models are embeded in the library, namely, the 5-species-17-reactions, the 7-species-22-reactions, the 11-species-48-reactions. +// "DK" -- indicates the Dunn-Kang Model, three-Type Models are embeded in the library, namely, the 5-species-11-reactions, the 7-species-15-reactions, the 11-species-26-reactions. +// "Mars-Pa8" is for Park model of Mars gas, "Mars-Mc8" for McKenzie model of Mars gas. +// "Combustion-12" -- indicates the Combustion Chamber Gas Model which includes 12-species-20-reactions. +// "Gas-Mixture" -- indicates the process of mixing gas without reacting. +// for struct solver mixing two species��SpeciesA, SpeciesB��. +// for unstruct solver mixing multi-species��O2 NO CO CO2 H2 N2 Air CH4��. +// For self-definition model, the gasfile is used to indicate the file path of the new gas model. // speciesName: Used to list the names of each species, while each species name is separated by the symbol of comma. // initMassFraction: Used to list the initial mass fractions of species in accordance with the sequence of names in the parameter speciesName. // ifStartFromPerfectGasResults: The chemical reaction simulation is start from perfect gas flowfield or not, 0 is for no and else is for yes. -// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. -// nIterSecondStep : the maximum number of iteration in the second step for the self-adaptive calculation. -// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. -// nEnergyAssembly : the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. -// 0 -- no, -// 1 -- yes. +// nIterFirstStep : the maximum number of iteration in the first step for the self-adaptive calculation. +// nIterSecondStep: the maximum number of iteration in the second step for the self-adaptive calculation. +// nIterThirdStep : the maximum number of iteration in the third step for the self-adaptive calculation. +// nEnergyAssembly: the vibration energy is computed with combined method which includes the fitting method and the molecular kinetic theory. +// 0 -- no, +// 1 -- yes. // nControlVariable: the variable to computing the residual error that determines the convergence is meet or not in the one-temperature model. -// 0 -- the density. -// 1 -- the translation temperature. -// 2 -- the vibration temperature. -// 3 -- the electron temperature. -// 4 -- the pressure. -// 5 -- the mass fraction of oxygen. -// 6 -- the mass fraction of nitrogen. +// 0 -- the density. +// 1 -- the translation temperature. +// 2 -- the vibration temperature. +// 3 -- the electron temperature. +// 4 -- the pressure. +// 5 -- the mass fraction of oxygen. +// 6 -- the mass fraction of nitrogen. // firstStepError : the residual error of the first step iteration for the self-adaptive calculation. // secondStepError : the residual error of the second step iteration for the self-adaptive calculation. // thirdStepError : the residual error of the third step iteration for the self-adaptive calculation. -// useHyflowSetting : Setting for HyFLOW GUI. -// 0 -- PHengLEI -// 1 -- HyFLOW -// nProtectData : Use the continuation file data protection mechanism. -// 0 -- no -// 1 -- yes - +// nProtectData: Use the continuation file data protection mechanism. +// 0 -- no. +// 1 -- yes. +// nTvChange: Judge whether the Tv equals Ttr. +// 0 -- yes. +// 1 -- no. +// isMoleFractionType: 1 indicates the mass fractions, or else the mole fractions. +// nFraction: the initial fractions type of species. +// 0 -- mass fraction. +// 1 -- mole fraction. int dg_high_order = 0; int iapplication = 0; int isAdaptiveSolver = 0; -int nm = 5; +int nm = 5; int nEquilibriumGas = 0; -int nPCWCycleStep = 3; -int nRETCycleStep = 3; -int nSLIPCycleStep= 3; +int nPCWCycleStep = 3; +int nRETCycleStep = 3; +int nSLIPCycleStep = 3; int nIterFirstStep = 1000; int nIterSecondStep= 2000; int nIterThirdStep = 2000; @@ -1065,17 +1084,17 @@ double secondStepError = 0.001; double thirdStepError = 0.001; double predictCFLError = 0.1; -double refGama = 1.4; -double prl = 0.72; -double prt = 0.90; -double sc_l = 0.5; -double sc_t = 0.5; +double refGama = 1.4; +double prl = 0.72; +double prt = 0.90; +double sc_l = 0.5; +double sc_t = 0.5; -int nGasModel = 0; -int nchem = 0; -int nchemsrc = 1; -int nchemrad = 1; -int ntmodel = 1; +int nGasModel = 0; +int nchem = 0; +int nchemsrc = 1; +int nchemrad = 1; +int ntmodel = 1; int nIdealState = 0; int nEnergyRecycle = 1; @@ -1099,12 +1118,12 @@ double sigmaTemperature = 1.0; double sigmaMassFraction = 1.0; double velocitySlipCorrectConstant = 1.0; -double chemicalRelaxCorf = 1.0; +double chemicalRelaxCorf = 1.0; double chemicalSpectrumRadiusCoef = 1.0; double viscousSpectrumRadiusCoef = 1.5; double inviscidSpectrumRadiusCoef = 1.5; -double spectrumRadiusCoef = 0.5; -double staticPressureRelaxCorf = 0.2; +double spectrumRadiusCoef = 0.5; +double staticPressureRelaxCorf = 0.2; double maxViscous = 10000.0; double trTemperatureMin = 10.0; @@ -1114,31 +1133,35 @@ double densityMin = 1.0e-8; double densityMinFactor = 0.1; double tAdjustmentFactor = 10.0; double iniSpeedCoef = 1.0; +int iniSpeedMode = 0; -int nDebug = 0; -int nSpeciesLimit = 1; -int nTurblenceForChemical = 0; -int nViscosityFluxSublevelModified = 1; -int nViscosityPeModified = 0; -int nChemcalSourceModified = 2; -int nChemcalSourceEsMethod = 1; -int nMaxStepTemperature = 5; -int veTemperatureMinModified = 1; -int nDiagonalModified = 0; -int nGradPrimtiveMethod = 1; -int nInviscidFluxModify = 1; -int nQlLimitMethod = 2; -int nSpeciesForWallMethod = 1; -int nDensityForWallMethod = 0; +int nDebug = 0; +int nSpeciesLimit = 1; +int nTurblenceForChemical = 0; +int nViscosityFluxSublevelModified = 1; +int nViscosityPeModified = 0; +int nChemcalSourceModified = 2; +int nChemcalSourceEsMethod = 1; +int nMaxStepTemperature = 5; +int veTemperatureMinModified = 1; +int nDiagonalModified = 0; +int nDiagonalModifiedTurb = 0; +int nGradPrimtiveMethod = 1; +int nInviscidFluxModify = 1; +int nQlLimitMethod = 2; +int nSpeciesForWallMethod = 1; +int nDensityForWallMethod = 0; +int wallMultiTemperature = 0; -int nProtectData = 0; -int useHyflowSetting = 0; -int nAblation = 0; -int isInjection = 0; -int nViscosityModel = 0; -int nMarsModel = 0; -string gasfile = "DK5"; -//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; +int nProtectData = 0; +int nAblation = 0; +int isInjection = 0; +int nViscosityModel = 0; +int nMarsModel = 0; +int nTvChange = 0; +int isMoleFractionType = 0; +string gasfile = "DK5"; +//string gasfile = "./chemical/Dunn-Kang_air5s11r.dat"; string speciesName = "O, O2, NO, N, N2"; string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; @@ -1152,16 +1175,16 @@ string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.767"; //string speciesName = "O, O2, NO, N, N2, C, CO, CO2"; //string initMassFraction = "0.0015, 0.0429, 0.0, 0.0, 0.0, 0.0, 0.0777, 0.8779"; -//string gasfile = "Pa"; +//string gasfile = "Pa"; //string speciesName = "O, O2, NO, N, NO+, C, C2, CO, CO2, CN, N2, e-"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767, 0.0"; -//string gasfile = "Combustion-12"; +//string gasfile = "Combustion-12"; //string speciesName = "O, O2, NO, N, C, CO, CO2, H, H2, OH, H2O, N2"; //string initMassFraction = "0.0, 0.233, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.767"; //string gasfile = "Gas-Mixture"; -//string speciesName ="SpeciesA, SpeciesB"; +//string speciesName = "SpeciesA, SpeciesB"; //string initMassFraction = "1.0, 0.0"; int nSutherland = 0; double gamaSpeciesA = 1.4; @@ -1173,9 +1196,17 @@ double molecularWeightSpeciesB = 30.0; //string speciesName = "O2, N2"; //string initMassFraction = "1.0, 0.0"; +int nFraction = 0; int nContinueModel = 0; int nChemicalFlowStep = 0; int ifStartFromPerfectGasResults = 0; +int isUseNoneqCond = 0; +double frozenCondition = 0.01; + +int nLeakageMonitor = 0; +double totalLeakageVolume = 1000.0; +double monitorThresholdValue = 0.05; +double sprayFactor = 0.0; ######################################################################### // Multi-Grid parameters. @@ -1196,7 +1227,6 @@ int ifStartFromPerfectGasResults = 0; // 1 -- zero order. // 2 -- first-order. (default) // mgCorrectionLimit: Multi-grid correction limit. - int nMGLevel = 1; int MGCoarsestIteration = 1; int MGPreIteration = 1; @@ -1218,20 +1248,20 @@ int ismooth_turb = 0; int SAProductType = 2; // ----------------- Overset Grid parameter ----------------------------- -int codeOfDigHoles = 1; -int codeOfTurbulentModel = 0; -string masterFileName = "./grid/searchFile.inp"; -string holeBasicFileName = "./grid/holeBasicFile.inp"; -string holeFullFileName = "./grid/holeFullFile.dat"; -string linkFileName = "./grid/topology.dat"; -string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; +int codeOfDigHoles = 1; +int codeOfTurbulentModel = 0; +string masterFileName = "./grid/searchFile.inp"; +string holeBasicFileName = "./grid/holeBasicFile.inp"; +string holeFullFileName = "./grid/holeFullFile.dat"; +string linkFileName = "./grid/topology.dat"; +string zoneInverseFileName = "./grid/zoneInverseMapping.inp"; -######################################################################### -# High Order Struct Solver # -######################################################################### +#************************************************************************ +# High Order Struct Solver * +#************************************************************************ // isFVMOrFDM: -// 0 -- NSSolverStruct using Finite Volume Method. -// 1 -- NSSolverStruct using Finite Differ Method. +// 0 -- NSSolverStruct using Finite Volume Method. +// 1 -- NSSolverStruct using Finite Differ Method. // SolverStructOrder: Spatial discretisation order of NS equations with struct grid. // <= 2 -- finite volume method. // >= 3 -- finite difference order. (to be completed) @@ -1273,30 +1303,48 @@ int allReduceStep = 1; // codeOfOversetGrid: Overlapping(overset) grid or not. // 0 -- NON-overlapping grid. // 1 -- Overlapping grid. -// oversetInterpolationMethod: the method of overset interpolation while field simulation +// oversetInterpolationMethod: the method of overset interpolation while field simulation. // 0 -- set the acceptor cell value by donor cell value. // 1 -- set the acceptor cell value by distance weight of donor cell value. - -int codeOfOversetGrid = 0; -int oversetInterpolationMethod = 0; -int readOversetFileOrNot = 0; -int symetryOrNot = 0; -int readInAuxiliaryInnerGrid = 0; -int readInAuxiliaryOuterGrid = 0; -int readInSklFileOrNot = 0; -string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; -string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; -string auxiliaryInnerGrid2 = ""; -string oversetGridFileName = "./grid/iblank.ovs"; -double walldistMainZone = 1.0 -double toleranceForOversetSearch = 1.0e-3; -double toleranceForOversetBox = 1.0e-3; -int twoOrderInterpolationOrNot = 0; -int keyEnlargeOfActiveNodes = 0; -int outTecplotOverset = 0; -int outPutOversetVisualization = 0; - -int numberOfMovingBodies = 2; +// readOversetFileOrNo: Whether to read overset-file(.ovs) that has been generated. +// 0 -- no. +// 1 -- yes. +// symetryOrNot: If there exist symetryplanes(XY plane, the coordinate of Z direction is 0) in +// the current overset grid(only for three dimension). +// 0 -- no. +// 1 -- yes. +// readInAuxiliaryInnerGrid: Whether to read auxiliary inner grid. +// 0 -- no. +// 1 -- yes. +// walldistMainZone: The initial value of background grid which does not exist wall boundary condition. +// toleranceForOversetSearch: The tolerance of overset searching zone to judge whether the obtained node is in the current computing cell. +// toleranceForOversetBox: The tolerance of building the minimum box of computing cells in the overlapping region. +// twoOrderInterpolationOrNot: The number of interpolated cell layers in the overlapping boundary. +// 0 -- one layer. +// 1 -- two layers. +// keyEnlargeOfActiveNodes: The number of enlarged overset-boundary layers in the buffer region. +// outTecplotOverset: Whether to dump out the flowfield data after the progress of overset configure. +// 0 -- no. +// 1 -- yes. +int codeOfOversetGrid = 0; +int oversetInterpolationMethod = 0; +int readOversetFileOrNot = 0; +int symetryOrNot = 0; +int readInAuxiliaryInnerGrid = 0; +int readInAuxiliaryOuterGrid = 0; +int readInSklFileOrNot = 0; +string auxiliaryInnerGrid0 = "./grid/aux-upper.fts"; +string auxiliaryInnerGrid1 = "./grid/aux-lower.fts"; +string auxiliaryInnerGrid2 = ""; +string oversetGridFileName = "./grid/iblank.ovs"; +double walldistMainZone = 1.0 +double toleranceForOversetSearch = 1.0e-3; +double toleranceForOversetBox = 1.0e-3; +int twoOrderInterpolationOrNot = 0; +int keyEnlargeOfActiveNodes = 0; +int outTecplotOverset = 0; +int outPutOversetVisualization = 0; +int numberOfMovingBodies = 2; // ----------------- ALE configuration ------------------------------ int codeOfAleModel = 0; @@ -1306,36 +1354,42 @@ double referenceLength = 1.0; double referenceVelocity = 1.0; double referenceDensity = 1.0; -int strategyForFaceNormalVelocity = 0; //0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd; -int strategyForGCLSource = 0; //0-present; 1-Ahn; +int strategyForFaceNormalVelocity = 0; // 0-By Sweeping volume; 1-By face center 1st; 2-By face center 2nd. +int strategyForGCLSource = 0; // 0-present; 1-Ahn. -//0:1st-Admas-Bashforth; 1:2nd-Admas-Bashforth; 2:1st-Implicit-Euler; 3:2nd-Implicit Euler; 4:2nd-Adams-Moulton; 5:3rd-Adams-Moulton +// 0: 1st-Admas-Bashforth; 1: 2nd-Admas-Bashforth; 2: 1st-Implicit-Euler; 3: 2nd-Implicit Euler; 4: 2nd-Adams-Moulton; 5: 3rd-Adams-Moulton. int methodForKineticEquation = 0; double relaxParameterOfKinetic = 1.0; -######################################################################### -# motive information # -######################################################################### +#************************************************************************ +# motive information * +#************************************************************************ int numberOfMovingBodies = 1; ############################## body0 ############################## -//mass of parts -double mass_0 = 1.0; -//mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz -double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; -//initial six DOF position information of parts. xc yc zc -double massCenter_0[] = 0.0 , 0.0, 0.0; -//initial six DOF position information of parts. angleX angleY angleZ -double attitudeAngle_0[] = 0.0 , 0.0, 0.0; -//initial six DOF move information of parts. vc vy vz -double massCenterVelocity_0[] = 0.0, 0.0, 0.0; -//initial six DOF move information of parts. omigX omigY omigZ -double angularVelocity_0[] = 0.0, 0.0, 0.0; -//the object that the parts belong to. -int fartherIndex_0 = -1; -//the assembly position of the parts. xc yc zc angleX angleY angleZ -double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 ,0.0; -//the move pattern of the parts. +// mass of parts. +double mass_0 = 1.0; +// gravity of parts (along negative direction in Y-axis, eg. 9.8). +double gravity_0 = 0.0; +// mass matrix of parts Ixx Iyy Izz Ixy Ixz Iyz. +double massMatrix_0[] = 1e-7, 1e-6, 1e-6, 0.0, 0.0, 0.0; +// initial six DOF position information of parts. xc yc zc. +double massCenter_0[] = 0.0, 0.0, 0.0; +// if reset mass center while restart. +int resetMassCenter_0 = 0; +// position offset of parts. dx dy dz. +double massCenterDxyz_0[] = 0.0, 0.0, 0.0; +// initial six DOF position information of parts. angleX angleY angleZ. +double attitudeAngle_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. vc vy vz. +double massCenterVelocity_0[] = 0.0, 0.0, 0.0; +// initial six DOF move information of parts. omigX omigY omigZ. +double angularVelocity_0[] = 0.0, 0.0, 0.0; +// the object that the parts belong to. +int fartherIndex_0 = -1; +// the assembly position of the parts. xc yc zc angleX angleY angleZ. +double configPamameter_0[] = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0; +// the move pattern of the parts. // -1 given motion partten. // 0 still. // 1 six DOF motion. @@ -1346,51 +1400,68 @@ double configPamameter_0[] = 0.0 ,0.0 ,0.0 ,0.0 ,0.0 // 14 forced pitch motion. // 15 forced yaw motion. // 16 forced roll motion. -int RBDMethod_0 = 0; -double amplitude_0 = 0.0; -double reduceFrequency_0 = 0.0; -//direction of rotation +int RBDMethod_0 = 0; +double amplitude_0 = 0.0; +double reduceFrequency_0 = 0.0; +// direction of rotation. // 1 -- clockwise from the point of view along the positive x axis. // -1 -- anticlockwise from the point of view along the positive x axis. -int direction_0 = -1; -double rotateFrequency_0 = 0.0; -//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; -//additional force (system axis) fX fY fZ -double addedForce_0[] = 0.0 ,0.0 ,0.0 ; -//additional moment of Force (system axis) mX mY mZ -double addedMoment_0[] = 0.0 ,0.0 ,0.0 ; -//the deformation method of the parts. -int morphing_0 = 0; - -// post indentify -int integralOrder = 4; +int direction_0 = -1; +double rotateFrequency_0 = 0.0; +//string uDFSixDofFileName_0 = "./Bin/UDFSixDof.Parameter"; +// dimensional physical time for additional force(s). +double addedForceTime_0[] = 0.0; +// additional force(inertia system) fX fY fZ. +double addedForce_0[] = 0.0, 0.0, 0.0; +// additional moment(inertia system) mX mY mZ. +double addedMoment_0[] = 0.0, 0.0, 0.0; +// the deformation method of the parts. +int morphing_0 = 0; +// post indentify. +int integralOrder = 4; // ---------------- ATP read -------------------------------------------- -//@int inflowParaType = 0; +//@int inflowParaType = 0; //@double refReNumber = 6.5e6; //@double refDimensionalTemperature = 288.15; //@double freestream_vibration_temperature = 300.00; -//@double refDimensionalPressure = 0; -//@double height = 0; -//@int nsubsonicInlet = 0; -//@int nsubsonicOutlet = 0; -//@string inLetFileName = "./bin/subsonicInlet.hypara"; -//@string outLetFileName = "./bin/subsonicOutlet.hypara"; +//@double refDimensionalPressure = 0; +//@double height = 0; +//@int nsubsonicInlet = 0; +//@int nsubsonicOutlet = 0; +//@string inLetFileName = "./bin/subsonicInlet.hypara"; +//@string outLetFileName = "./bin/subsonicOutlet.hypara"; //@double refDimensionalVelocity = 0; //@double refDimensionalDensity = 0; - -######################################################################### -# Old Parameter # -######################################################################### +//@string weatherDataFilePath = "./WRFData/"; +//@double longitude = 110.95 +//@double latitude = 19.61; +#************************************************************************ +# Old Parameter * +#************************************************************************ int isPlotVolumeField = 0; +#************************************************************************ +# partial flow field setting Parameter * +#************************************************************************ +//int nPartialParameter = 0; // 0/1/2 +//int nNumberOfPartialField = 0; // +//int nStartGridIndex[] = [0]; +//int nEndGridIndex[] = [0]; -######################################################################### -# Incompressible Parameter # -######################################################################### +//double partialCFL[] = [0.0]; +//double partialSpeedCoef[] = [0.0]; +//double partialSpeed[] = [0.0]; +//double partialAttackd[] = [0.0]; +//double partialSlide[] = [0.0]; +//double partialPressure[] = [0.0]; +//double partialTemperature[] = [0.0]; +//double partialMassFractions[] = [0.0]; +#************************************************************************ +# Incompressible Parameter * +#************************************************************************ int isSolveEnergyEquation = 0; int isSolveTurbEquation = 0; -int isSolveSpeciesEquation = 0; - +int isSolveSpeciesEquation = 0; \ No newline at end of file diff --git a/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/grid_para.hypara b/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/grid_para.hypara index 06b3b1e..54ee425 100644 --- a/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/grid_para.hypara +++ b/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/bin/grid_para.hypara @@ -4,9 +4,12 @@ // gridtype: Grid type for generation, conversion, reconstruction, merging. // 0 -- Unstructured grid. // 1 -- Structured grid. -// axisup: Type of Cartisien coordinates system, used in grid conversion. -// 1 -- Y upward. (default) -// 2 -- Z upward. +// nAxisRotateTimes: number of axis rotating times, zero (default) meaning without rotating. +// axisRotateOrder : axis rotating order. +// 1 -- X-axis. +// 2 -- Y-axis. +// 3 -- Z-axis. +// axisRotateAngles: axis rotating angles (degree), which are corresponding to the axis rotating order. // from_gtype: Type of grid data type in grid conversion process. // -1 -- MULTI_TYPE. // 1 -- PHengLEI, *.fts. @@ -18,7 +21,9 @@ // 7 -- Hybrid, include both of unstructured and structured grid, *.fts. // 8 -- GMSH, *.msh. int gridtype = 0; -int axisup = 1; +int nAxisRotateTimes = 0; +int axisRotateOrder[] = [1, 2, 3]; +double axisRotateAngles[] = [0.0, 0.0, 0.0]; int from_gtype = 2; ######################################################################### diff --git a/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/三维非结构圆柱低速绕流线监控算例测试说明.pdf b/Z02_ThreeD_Cylinder_LinesMonitor_Laminar_Unstruct_1CPU/三维非结构圆柱低速绕流线监控算例测试说明.pdf index 2abd591fdb63b12d8b9ebdee114220cd53179a17..a6fb1ccf804e20e0a95cb96f427855d264c0a4c9 100644 GIT binary patch delta 362109 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�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

GxT~jG?*MS?=`;) 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

*9r!s~$bdA;+AZ?L0}Viri?9!8Y821zDI*Hx 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

#=x5DHZx97K?+ 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