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

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.

Configure a MESH

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 /

Set the cell size

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.

Split a MESH

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 /

Multiply a MESH

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 generated MESH instances in the FDS case allows assigning each MESH namelist to a specific MPI_PROCESS for well balanced parallel calculations. See later on on this page for a discussion on the topic.

Multiply and split combined

Of course, you can combine both splitting and multipling to obtain an array of splitted MESH instances.

Align 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 any MESH 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.

Parallel calculations

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 of OpenMP Threads, that are going to be used when performing FDS computations from BlenderFDS, as described in the Run FDS wiki page.

⚠️ **GitHub.com Fallback** ⚠️