domain - firetools/blenderfds GitHub Wiki
ℹ️ Updated to BlenderFDS 6.0.x
This wiki page explains how to set and manage the FDS computational domain in BlenderFDS for serial and parallel runs.
- Define your computational domain
- Configure a
MESH
- Set the cell size
- Split a
MESH
- Multiply a
MESH
- Multiply and split combined
- Align
MESH
instances - Parallel calculations
All FDS calculations must be performed within a domain that is made up
of rectilinear volumes. Each volume is divided into rectangular cells,
the number of which depends on the desired resolution
of the flow dynamics.
MESH
is the namelist group that defines the computational domain of your FDS case.
The computational domain can consist of more than one computational MESH
,
usually connected, although this is not required.
The order in which these MESH
lines are entered in the input file matters.
Furthermore, to run FDS in parallel, you must break up the computational
domain into multiple MESH
volumes so that the workload can
be divided among the processes.
See the FDS documentation for further details.
As it happens for the other namelists, the configuration of the MESH
namelist is done
from the related Properties
panel.
For example, the Blender Object
named Domain configured
as in the above picture is exported like this:
--- Computational domain | MPI Processes: 1 | MESH Qty: 1 | Cell Qty: 12000
-- MPI Process: <0> | MESH Qty: 1 | Cell Qty: 12000
Cell Qty: 12000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain' IJK=30,20,20 XB=-2.000,4.000,-2.000,2.000,0.000,3.000
MPI_PROCESS=0 /
The MESH
is subdivided into uniform cells via the parameter IJK
.
In the previous example, that MESH
is divided into 12000 cells.
BlenderFDS shows some diagnostic information on the MESH
namelist:
the total cell quantities, the cell size, the aspect of the cell,
and the respect of the Poisson constraint for IJK
values.
The information is also saved to your FDS case when exporting.
It is best if the cells resemble cubes; that is, the length, width and height of the cells ought to be roughly the same. The aspect is the maximum ratio between cell sizes, ans should never be larger than 2.
The sidebar panel for MESH
namelists offers two operators for setting
the cell sizes. The first one assists the user in setting the cell size
according to the hypothesis and calculations of the
NUREG 1824.
The results are saved to the Free Text
, too, for your reference.
The second one helps you translating the desired cell size to the
IJK
values that are closer to your choice.
The MESH
properties panel also allows splitting the MESH
along the axis,
duly conserving the cell size you previously set, and evenly dividing the cells.
If the number of cells along the splitted axis cannot be exactly divided (eg. 10 cells splitted in 3 distinct parts),
BlenderFDS distributes the remaining cells between the splits.
For example, the Blender Object
named Domain configured
as in the above picture is exported like this:
--- Computational domain | MPI Processes: 1 | MESH Qty: 3 | Cell Qty: 12000
-- MPI Process: <0> | MESH Qty: 3 | Cell Qty: 12000
Cell Qty: 4000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_s0' IJK=10,20,20 XB=-2.000,0.000,-2.000,2.000,0.000,3.000
MPI_PROCESS=0 /
Cell Qty: 4000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_s1' IJK=10,20,20 XB=0.000,2.000,-2.000,2.000,0.000,3.000
MPI_PROCESS=0 /
Cell Qty: 4000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_s2' IJK=10,20,20 XB=2.000,4.000,-2.000,2.000,0.000,3.000
MPI_PROCESS=0 /
A MULT
namelist panel is proposed at the bottom side of the MESH
panel.
When toggled, this panel builds an array of MESH
namelists in a regular pattern.
BlenderFDS uses the same exact parameters and logic as the FDS MULT
namelist.
See the relevant chapter of the FDS User's Guide for the details.
For example, the Blender Object
named Domain configured
as in the above picture is exported like this:
--- Computational domain | MPI Processes: 1 | MESH Qty: 6 | Cell Qty: 72000
-- MPI Process: <0> | MESH Qty: 6 | Cell Qty: 72000
Cell Qty: 12000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_i0_j0_k0' IJK=30,20,20 XB=-2.000,4.000,-2.000,2.000,0.000,3.000
MPI_PROCESS=0 /
Cell Qty: 12000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_i0_j0_k1' IJK=30,20,20 XB=-2.000,4.000,-2.000,2.000,3.000,6.000
MPI_PROCESS=0 /
Cell Qty: 12000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_i0_j1_k0' IJK=30,20,20 XB=-2.000,4.000,2.000,6.000,0.000,3.000
MPI_PROCESS=0 /
Cell Qty: 12000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_i0_j1_k1' IJK=30,20,20 XB=-2.000,4.000,2.000,6.000,3.000,6.000
MPI_PROCESS=0 /
Cell Qty: 12000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_i0_j2_k0' IJK=30,20,20 XB=-2.000,4.000,6.000,10.000,0.000,3.000
MPI_PROCESS=0 /
Cell Qty: 12000 | Size: 0.200·0.200·0.150m | Aspect: 1.3 | Poisson: Yes
&MESH ID='Domain_i0_j2_k1' IJK=30,20,20 XB=-2.000,4.000,6.000,10.000,3.000,6.000
MPI_PROCESS=0 /
Note that BlenderFDS does not insert an explicit
MULT
namelist, because having the full list of generatedMESH
instances in the FDS case allows assigning eachMESH
namelist to a specificMPI_PROCESS
for well balanced parallel calculations. See later on on this page for a discussion on the topic.
Of course, you can combine both splitting and multipling to obtain an array of splitted MESH
instances.
FDS enforces strict rules on MESH
instances alignment.
In the following example, you see a fine and a coarse MESH
sharing a border.
The fine cells of the same MESH
should always completely cover each coarse one.
The MESH
instances generated by BlenderFDS by splitting or multipling
the same Blender Object
are always correctly aligned.
But if you need to align MESH
namelists generated from different Objects
,
BlenderFDS offers an Align To
operator in the sidebar,
that aligns the currently selected MESH
to a reference one,
by moving and resizing the selected MESH
and updating its cell size, when needed.
The alignment is performed only if they share common borders or the border is at snapping distance.
The current FDS constraints make the alignment not always possible.
The operator tries to conserve as much as possible the overall size
and the cell size of the reference MESH
, too, but you can choose to
allow updating those sizes, too.
If you would like to have FDS check the alignment without running the full case, set the parameter
CHECK_MESH_ALIGNMENT=T
to anyMESH
line. If the job stops with no errors, the meshes obey the alignment rules. This check can sometimes take a few tens of seconds, but you can open Smokeview after launching the job to check the alignment by eye.
If you switch on the MPI_PROCESS
parameter in the FDS Case Config
panel
and set the number of processes you wish to dedicate to the FDS run,
all the MESH
lines of your FDS cases will have the MPI_PROCESS
number assigned.
BlenderFDS tries to evenly distribute the load between the MPI processes, as much as possible.
By using a simple first-fit bin pack algorithm
the MESH
lines are assigned to the available MPI processes, according to their cell quantity.
The following picture shows an example of the algorithm sorting the MESH
instances
by cell quantity (colored boxes) and evenly distributing them on the 4 processes.
In the same
FDS Case Config
panel you can also setup the number ofOpenMP Threads
, that are going to be used when performing FDS computations from BlenderFDS, as described in the Run FDS wiki page.