HT process, density and viscosity functions, units and other questions


I’m new at using OGS and I’ve been trying to do some models with HT processes.

Right now i’m trying to reproduce the first series of models from

Models’ description :

  • 2D cross section : rectangular box (dimensions : 24 x 6 km)
  • Domain separated in 2 units : upper unit is impervious sediments and lower unit is granit (more permeable).
  • Thermal boundary conditions correspond to a fixed temperature (10 °C) at the surface and a fixed heat flow at the base of the model (90 mW/m2 at 6 km of depth). Lateral boundaries are thermally insulating.
  • A fixed atmospheric pressure (1e+05 Pa) is imposed at the surface while a zero flux condition is imposed on all other boundaries.
  • Initial thermal field (a steady-state conductive regime) evolves towards a steady-state convective regime in a few Myrs
  • The initial pressure field increases linearly with depth.

I can’t upload files as i’m a new user but here is a filesender link where you can find my project file and the associated meshes :

So if you don’t mind I had some questions :

  1. When running the simulation, i can’t obtain a result because it doesn’t converge.
    I found that the problem comes with the function viscosity that i put in the prj file because when i try to put a constant viscosity of 1e-03 it works just fine. So I’m wondering what is the issue with this function ? It is the same as in the article and i checked multiple times the expression of the derivative i put in.

  2. At the same time I have issues with the units, because from what i understand thermal dirichlet conditions are in kelvins ? But for example in the benchmark Constant Viscosity (sorry i can’t put a third link as i’m a new user) they put temperature in celsius ? So right now my conditions are in celsius, so do i need to change them into kelvin.

  3. And again at the same time, the density and viscosity functions that i put in my prj file require a temperature in celsius. So maybe this is the issue ? That i need to transform this functions that require celsius into functions that require kelvins ? But i’m not really sure how to do that.

  4. I was also wondering if dvalues is always necessary when working with functions ?

  5. In most benchmark that i saw with HT processes, the thermal dispersivity is always set at 0, in what cases can i see it change ?

  6. When working with HT processes, I’m not really sure what to use in the <nonlinear_solvers> , <linear_solvers> and <convergence_criterion> blocks ? For example can you comment on what i used in my prj file please ? Is it efficient ? Or how can i improve my results ? For example if i change something will it also improve the total running time ? I plan on working on 3D models later, will it be enough ?

I don’t know if it makes a lot of sense,

But thanks in advance,


Welcome to the forum!

  1. and 2.:

Some confusion comes from the units being used. In OGS we don’t impose any system of units but the project file must be consistent for the chosen set. So it is user’s choice to use kelvins or degree Celsius. Take a look at the conventions part of the user documentation

For the temperature range 10-50 units (I guess degree Celsius) the viscosity function is in a reasonable range [0.00129, 0.00054]. So it is most likely not a problem.

  1. If you choose to work in kelvins you would also have to adjust the density and viscosity functions.

  2. The derivatives are necessary in some cases. You can try to omit them. If they are used but not provided there will be an error message.

  3. Out of my scope.

  4. There are Picard and Newton non-linear solvers possible but for HT process only Picard is implemented currentl. For the linear solvers there are many options and this alone is a big subject for study. I prefer, if possible, to use PardisoLU which requires IntelMKL to be installed (see configuration options, advanced section, OGS_USE_MKL). If in doubt, use SparseLU, which is slow, but accurate. And then there are several options with CG/BiCG/GMRES etc. with different preconditioners (some documentation is available but not complete Doxygen

I updated (mainly the time stepping scheme) to get the particular project running. I think the very large time step was the culprit. (2.1 KB)

– d

Thanks for your help !

I’m running the project file with SparseLu and it seems to be working but like you said it is slow.

I’ll try to use PardisoLu as you suggested.