Boundary Definition Problem in a Chain Grate Furnace Cold-State Particle Flow

Cold chain grate furnace flow simulation.mfx (10.3 KB)

Dear developers and users of MFiX,

I am currently using MFiX-CGP to perform a cold-state particle flow simulation of a chain grate furnace. I have encountered some issues with boundary condition definition and initialization, which have troubled me for a long time. The front view of my 3D chain grate furnace geometry model is shown in Fig.1.

Model description: The blue line on the left represents the particle inlet boundary, the red line at the top represents the flue gas outlet boundary, the red line on the right represents the ash/slag outlet boundary, the black line represents the adiabatic rear arch, the inclined orange line at the bottom represents the moving grate, and the other white lines represent the water-cooled walls.

Problem description: The model dimensions are 11 m × 16 m × 4 m. Initially, a 150 mm thick coal particle fuel bed needs to be stacked above the grate. As the simulation starts, the fuel bed moves with the grate, and the ash/slag is discharged from the ash outlet. Meanwhile, particles need to be continuously injected from the left inlet; these particles will fall onto the grate and move together with the grate.

Current issue:

  1. Unable to define the boundary conditions for the bottom inclined grate and the adiabatic rear arch.

After building the 3D geometry and importing it into MFiX as an STL file, MFiX only recognizes it as a single 3D entity.

If I define the walls (Fig.2), I can only select all faces of the entire geometric model for definition. When I try to define the inlet and outlet boundaries, I cannot define them separately because the inlet/outlet boundaries lie on the same plane as their adjacent walls. I later chose to extend the inlet and outlet wall surfaces outward individually, which successfully allowed me to define the inlet and outlet boundaries, as shown in Fig.3.

However, I really cannot figure out how to define the bottom inclined boundary as a no‑slip wall with a specified velocity. Also, how can I accurately identify the adiabatic rear arch inside the model and define it as an adiabatic wall? Is there any method to achieve this? I tried importing all the faces that make up the geometric entity, which would allow me to define each face separately, but MFiX does not seem to recognize the shape enclosed by these faces as a valid 3D geometric entity, so I cannot run the simulation.

Problem 2: How can I initialize a 150 mm thick fuel bed stacked above the grate?
As far as I know, during initialization, particle stacking can only be done by specifying a rectangular (cuboid) region using coordinates. Given that my grate is inclined, how can I achieve this?

I hope everyone can provide some answers. Thank you!

First, please attach the complete setup. Go to Main menu> Submit bug report. This will generate a zip file with all necessary files, and attach it.

Problem 1:
You should split your stl file into several files, one for each BC. For the inclined moving wall, you can only specify a tangential velocity (which I think is what you want). There is a “Moving wall” tab in the BC pane where you can set the tangential velocity. If the wall velocity varies with time, you can use a keyframe to control it, please take a look at the conveyor belt tutorial (Go to New project and select the conveyor_3d setup).

It is best to extend the inlets and outlets past the edge of the MFiX domain box so you have cleaner intersections and you can define the inlets and outlets as regular BCs.

From your first image, it looks like the internal walls are very thin. If they are thinner that the mesh size, they will not be resolved. You will likely need to artificially increase the wall thickness so you can mesh them.

Problem 2:
You can run a first simulation with only the inclined grate and use a rectangular region above the grate as the IC region, then let particles settle under gravity. Save the particles’ state at the end of the settling (Output>Basic> Save particle positions at end of run). This will create an ASCII file called particle_output.csv. You can use this file as IC for your production run. Copy it to your project directory and rename it as particle_input.csv and disable the automatic particle generation to use this file as an IC (Solids>CGP> uncheck "Enable automatic particle generation).

This is a fairly complicated setup, my suggestion is to first simplify it and tackle one complexity at a time (first the meshing, then the IC, then the moving wall. Keep it pseudo 2D, as a full 3D simulation of this size may be untractable.

Dear Jeff Dietiker,

Thank you again for your patient and detailed response.

To reduce the computational cost, I have reduced the side (width) thickness of my model from 4 m to 0.16 m (which corresponds to 4 grid cells). With a 4 cm × 4 cm mesh, the total number of cells is now manageable for my current computing resources.

At this stage, I would like to focus on Issue 1 (boundary condition definition) first, and then address Issue 2 later.

I have a major question and would appreciate your guidance:
My original geometry was created in AutoCAD by drawing a planar contour with polylines and then extruding it into a 3D solid. In this model, the internal walls have zero thickness.

Does this mean that such zero‑thickness internal walls cannot be properly resolved by MFiX?

Furthermore, I tried to split the STL file into multiple separate files (one for each boundary condition), but these split boundaries are all zero‑thickness surfaces.
Could this be the reason why MFiX does not recognise the region enclosed by these surfaces as a valid 3D geometric entity?

Yes, zero thickness wall where there is a fluid region on both sides of the walls are not supported with STL geometries. You can use internal surfaces when the surface is aligned with the mesh, but this will nor work with your geometry, which has slanted walls

Yes.

0522_bed_packing_2026-05-25T232838.105158.zip (42.8 MB)

Dear Jeff. Dietiker:

First of all, thank you for your help. The previous issues with 3D model construction and initial fuel bed packing have been successfully resolved. I am currently conducting a cold-state particle flow simulation of a chain grate furnace using MFiX-CGP, and I have encountered new difficulties when implementing the staged air supply boundary conditions at the bottom of the grate. I am writing to ask for your assistance.

Model Description: My model features an inclined chain grate structure, with 5 independent air inlets to be set on the bottom moving grate to simulate the staged air supply conditions of the actual grate.

Problem Description: Due to the inclined structure of the grate, the built-in point source boundary conditions cannot be directly imported and aligned with the inclined region, and rectangular boundary conditions cannot accurately match the position and shape of the air inlets. Therefore, I have chosen to implement this air inlet boundary logic by writing a user-defined subroutine (USER_SOURCE.F).

Current Core Issue: I have completed the USER_SOURCE.F file, but compilation of the custom solver has consistently failed, and I cannot generate a solver with the UDF included. As a result, simulations with the custom air inlet logic cannot be run. I have attempted to execute the build_mfixsolver command via both the command line and a batch script, but both attempts resulted in a Fortran compiler (gfortran) segmentation fault, causing the compilation process to crash directly. The key error messages are as follows:

D:\Miniforge3\envs\mfix-24.1.1\Library\mingw-w64\bin\gfortran.exe -c … testFortranCompiler.f -o testFortranCompiler.f. obj

: internal compiler error: Segmentation fault

libbacktrace could not find executable to open

Please submit a full bug report, with preprocessed source if appropriate.

mingw32-make.exe[1]: *** [CMakeFiles\cmTC_f8d90.dir/testFortranCompiler.f.obj] Error 1

mingw32-make.exe: *** [cmTC_f8d90/fast] Error 2

CMake will not be able to correctly generate this project.

Configuring incomplete, errors occurred!

B UILD FAILED

I have already tried cleaning compilation residual files, changing to a shorter project path, and running the script as administrator, but the problem persists. Additionally, when I run the simulation after enabling user subroutines in the GUI, a warning pops up stating: “Fortran source files exist, but custom solver is not selected”, and my UDF logic cannot be executed. I would greatly appreciate your help in analyzing the root cause and providing suggestions for a solution. Thank you.

There are 2 issues here:

  1. The file name is usr_sources.f, not USER_SOURCE.F so the file you have will not be recognized as a UDF and won’t be included in the executable, so I don’t understand how this could generate a segfault.
  2. The structure of the usr_sources routine is different than yours. You could study the tfm Absorption_column_2d tutorial to see how it works. You are trying to access arrays that do not exist like X(IJK), Y(IJK), Z(IJK)

My suggestion is to approximate the point sources with 5 rectangular regions so you can get started. If you want to write UDFs, it will require some time to understand the code structure.

In addition to using the correct name for the UDF, please try using the latest (26.1.1) release of MFiX. We have updated the compiler packages for Windows.

You should be able to build the solver by clicking on the “wrench” icon. You do not need to run build_mfixsolver from the command line.

Okay, thank you. I will continue studying the tutorial.