Solids phase conductivity - TFM

Dear all,

Recently, I’ve been digging into the code and several questions have appeared.
From the theory (1993 file), I believed the solids phase conductivity was determined using Kuipers et al. (1992) model (pre GUI versions) from the actual thermal conductivity of the solids material.

In the new versions a just saw a new keyword: “KS_MODEL”, which permits the selection of the model, where Bauer’s model is the only model available for it (indeed similar to Kuipers).

However, going into calc_k_s.f, I see that if K_s0 is defined it is taken as the effective thermal conductivity of the solids phase, and Bauer’s model is only used if K_s0 is undefined. Indeed, from calc_k_s.f, Bauer’s model takes a solids conductivity as if the dense phase were made of ash particles (ks_micro = 2.2 W/mK).

Besides, I cannot track the keyword “KS_MODEL” within the subroutines to check how each option is selected.

My questions are:

If I defined the solids material conductivity and activate Bauer’s model, how is the solids phase effective conductivity calculated?

If Bauer’s model always uses ks_micro for the solids material conductivity, do I need to modify the subroutine (or implement it through an user defined) to calculate the solids phase effective conductivity using Bauer’s model?

What is the default value for “KS_MODEL”?

Thanks in advance.

The code still follows the formulation indicated in the 1993 guide and is based on a model for effective bed conductivity given in Bauer and Schlunder (1978). As presented in Syamlal/Gidpasow 1985 the model contains some simplifications. The code also employs a modification as done in Kuipers et al. 1992 to take the more appropriate partition and obtain a ‘solids phase’ conductivity.
Some of this is explained in the document here: (see 3.5.7 Thermal Conductivity).

Part of the reason a keyword ks_model was introduced in the recent code was part of an effort to allow the user to touch the material conductivity through the input deck while also using the existing submodel - previously the value was hard coded for TFM to an arbitrary value (unlike DEM). This was indicated in the release notes. Now if you set ks_model=‘bauer’, you can also set the value of k_s0(m) in the submodel which represents the material conductivity. Previously, if you set k_s0(m) you were effectively setting a constant phase solids conductivity and no sub-model was employed. The changes also allowed streamlining some disparate/inconsistent code in TFM/DEM. No other conductivity models have been coded for TFM. However, you can code your own udf and now have the code use it through this keyword by ks_model(M)=‘usr’ (this is also possible simply by usr_ks(M)=.t.). Also, you can still invoke a constant solids phase conductivity by setting ks_model(m)=‘const_eff’. In this case, k_s0(m) represents the phase conductivity and not the material value. You can also set ks_model=‘none’ and conductivity will be set to 0 and the calculation skipped.

I’m not sure why you cannot track the keyword ks_model. If you search the code you can find all instances of where it appears and see what is happening. There is effectively no default. If you are using TFM or DEM you must define it. See check_data/check_solids_common_all & check_solids_continuum.

Thanks a lot for the answer Janine, I see and appreciate the improvements made.

I tried to track the keyword using grep in Linux, in all files and subfolders and I couldn’t find it in any file.

Still, I have a couple of questions:

what’s the difference between defining k_s0(m) and leaving ks_model undefined, and defining k_s0(m) and ks_model(m) as ‘const_eff’?

besides, is somehow ks_micro overwritten when k_s0(m) is defined and ks_model=‘bauer’ is set? otherwise, from what I can see on calc_k_s.f, Bauer’s model is always calculated using this conductivity no matter k_s0.

thanks in advance

As I indicated above, MFIX now effectively requires that you define ks_model. If you don’t the code should report an error and stop (only exception is if you flag usr_ks). The selection of ks_model will dictate what k_s0(m) represents. For ‘bauer’ the value of k_s0(m) is ‘k_micro’, i.e., the material conductivity. This can be seen in calc_k_s.f. For details see the document link I shared above and discussion therein. For ‘const_eff’, the value of k_s0(m) represents a constant effective solids conductivity. If it is constant, then there is no need for ‘calculations’ (see set_constprop).

Looking at the inside of one routine does not give you an understanding of how the calculations are used and what else is done by the code. It is best to try and look at the invoking code and get the bigger picture and keep stepping through as needed. If you don’t see anything by grepping then I’m guessing you aren’t doing it correctly. A grep for ks_model will reveal many instances where it is found. Grep is case sensitive. To ignore case use the -i option.

Thanks for your patience Janine, I just noticed I was doing my tries in version 19.2 by mistake, in version 20.1 it returns the error you mentioned and everything works as expected. I apologise for my misunderstanding.

One further comment/question to clarify,

how did versions pre 20.1 work? Did it take k_s0 as the effective solids phase conductivity?

What I found in mfix16 version is pretty similar to 19.2 version, which means that Bauer’s model is only employed if k_s0 is undefined and the default value for ks_micro is used.

No problem. Yes, you are correct. If you defined a k_s0, then a constant solids effective conductivity was used. If left undefined, then the ‘bauer’ sub-model was used with a default hard-coded material conductivity (ks_micro). The latter value was without a citation.

Thanks again for the answer Janine, this point was a bit confusing regarding the old documentation, with the new version is much clearer.

I have a further question regarding the document you recommended (quite helpful indeed). Correct me if I am wrong, but I cannot see how you can get bed conductivities higher than the material conductivity in Figure 3-4. What I see is that you are varying the gas conductivity by changing the gas temperature. This would affect the lower limit of the bed conductivity, not the upper limit.

Thanks in advance.

I pulled this statement directly from the document: “The bed thermal conductivity is bounded above by the solids material (microscopic) thermal conductivity for physical fluid volume fractions(𝜀𝑔>0.25), and decreases with increasing 𝜀𝑔 becoming comparable to 𝜅𝑔 for dilute flow.”

So yes you are correct in saying the bed conductivity will effectively not be higher than the material conductivity based on this submodel for most instances. I suppose if the fluid conductivity was some order of magnitude larger than the particle material conductivity you might start to see a different result.