firemodels / fds

Fire Dynamics Simulator
https://pages.nist.gov/fds-smv/
Other
663 stars 622 forks source link

PARTICLE_MASS_FLUX on SURF + CNF_RAMP_ID results in incorrect mass flux #12279

Closed drjfloyd closed 8 months ago

drjfloyd commented 10 months ago

The attached cases are a single grid cell wide pipe that injects 0.1 kg/m2/s of gas at t=0 and at t=5 starts 0.005 kg/m2/s of particles.

-If I have a MONODISPERSE size of 2,4, or 6 microns, I get the correct value for MPUV of 0.05 kg/m3 (coarse grid so the results bounce between 0.05 kg/m3 and 0.055 kg/m3) for all particle sizes. -If I instead define a CNF_RAMP with a uniform distribution between 2 and 6 microns, I get an averarge value of 0.061 kg/m3 that oscillates from 0.03 kg/m3 and 0.09 kg/m3

This isn't that the flow can't lift the larger particles as the MONODISPERSE cases at the ends and middle of the distribution get the correct results.

I don't think this just something with time averaging with NPPC=1 as DT_INSERT=0.01 and the timestep is ~0.03 s so was getting multiple particles in each timestep. If I make NPPC=1000 I get simliar results just with less oscillation.

Seems like something isn't being done right in accounting for the changing particle diameter when setting particle weiights.

image image

testd2.txt testd4.txt testd6.txt testdcnf.txt

drjfloyd commented 10 months ago

Traced it down to somethjing is going amiss with ONE_D_X vs. SF%LAYER_THICKNESS when setting up the particle in INSERT_SINGLE_PARTICLE. After particles start getting culled when leaving the domain the ONE_D_X value at particle creation changes. I see ONE_D_X go from the expected 2E-6 based on the SF to 2.3E-6. RADIUS is set to SF%LAYER_THICKNESS*SCALE but in THERMAL_BC we reset RADIUS to the ONE_D value coming out of 1D HT (since the particle might change diameter from pyrolysis) but since ONE_D_X in INSERT_SINGLE_PARTICLE isn't correct we get a particle mass change.

drjfloyd commented 10 months ago

I think it is this line in func.f90

IF (ONE_D%SURF_INDEX==SURF_INDEX) RETURN

The SURF index is the same but we need to reset the ONE_D values since with a CNF ramp the particle size will differ from the SURF dimension.

mcgratta commented 10 months ago

Let me take a look at this. Much of this has changed since we are now more flexible about allocating ONE_D stuff for HT3D.

drjfloyd commented 10 months ago

It works if I change that line to check if it is a partcle and then if a particle check for monodisperse. If it is a non-mono particle then it redoes the ONE_D setup.

IF (ONE_D%SURF_INDEX==SURF_INDEX) THEN IF (.NOT. PRESENT(LPC_INDEX)) RETURN IF (LAGRANGIAN_PARTICLE_CLASS(LPC_INDEX)%MONODISPERSE) RETURN ENDIF

mcgratta commented 10 months ago

OK, that works. I've been focusing on WALL cells and this exception was missed.