Update (March 22nd 2016)

An implicit snow scheme was introduced by Fuxing Wang and Tao Wang in revision [3059]. However there is a problem with the snowmelt, which is much too low in this revision.
The problem was analysed by Catherine and Fabienne, working with Sylvie Charbit and Christophe Dumas from LSCE, who are applying the explicit snow scheme on Greenland.
A first commit was done in revision [3269] to fix the snowmelt problem.

Some explanations (English version below):
Révision du modèle de neige dans Orchidee
Les modifications effectuées par Tao et Fuxing pour rendre le schéma de neige implicite, ont consisté en :

  • déplacement des routines de calcul de la température des 3 couches de neige (explicit-snow-profile) et des coefficients thermiques (explicit-snow-coef) dans thermosoil
  • non prise en compte de temp_sol_add (excès de température disponible pour la fonte de la neige à l'interface avec l'atmosphère, calculée à partir du bilan d'énergie de surface) dans le calcul de snow-temp
  • remise à la température de fusion (0°C) de temp_sol_new (température de surface issue du bilan d'énergie recalculée par enerbil_fusion), en présence de neige après le calcul de la fonte et avant le calcul du profil de température dans la neige et le sol

Ces modifications entrainaient que la neige ne pouvait jamais fondre puisque temp_sol_add n’était pas considérée dans le calcul du snowmelt. Par ailleurs, temp_sol_new étant toujours maintenue à 0 après la fonte de la neige (calculée dans explicitsnow) et avant thermosoil, la température de la neige et du sol (en présence de neige) était calculée sans jamais prendre en compte l'énergie disponible à la surface.
Pour corriger le schéma, on propose :

  • de remettre le calcul du profil de température dans la neige dans explicit-snow en prenant en compte temp_sol_add pour pouvoir calculer correctement le snowmelt mais de laisser le calcul des coefficients thermiques (pour le prochain pas de temps) dans thermosoil pour qu'ils soient bien calculés avec les températures du sol et de la neige calculées au pas de temps t
  • de transférer les lignes de code initialement dans enerbil_fusion qui ramènent la température de surface de la neige (temp_sol_new) à la température de fusion (0°C), après le calcul des températures de la neige et du sol, c’est-à-dire à la fin de thermosoil.

Ainsi la résolution des températures dans la neige et le sol restent bien implicites tout en prenant en compte les températures temps_sol_add (pour la neige) et temps_sol_new (pour la neige et le sol).

The changes made by Tao and Fuxing to make the snow code totally implicit, consisted in:

  • Displacement of the routines for calculating the temperature of the three layers of snow (snow-explicit-profile) and the thermal coefficients (explicit-snow-coef) in thermosoil.f90
  • temp_sol_add (excess temperature available for the melting of snow at the interface with the atmosphere, calculated from the surface energy balance) was not considered in the calculation of snow-temp
  • Set of temp_sol_new to the melting temperature (0 °C) (surface temperature solution of the energy balance calculated by enerbil_fusion) in presence of snow after the calculation of the snow melting and before the calculation of the temperature profile in the snow and in the soil.

These changes explain why the snow pack could never melt because temp_sol_add was not considered in the calculation of snowmelt. Moreover, temp_sol_new was always kept to 0 after the melting of snow (calculated in explicit_snow) and before the calculation of the soil and snow temperatures in thermosoil.f90 (in presence of snow). Thus, the snow and soil temperatures were calculated without taking into account the energy available at the snow-atmosphere interface.

To correct the scheme, it is therefore proposed:

  • To reset the calculation of the snow temperature profile in explicit-snow.f90, taking into account temp_sol_add to properly calculate the snowmelt but to leave (to keep plutôt que to leave) the calculation of the temperature coefficients (for the next time step) in thermosoil.f90, in order to calculate snow and soil temperatures at time step t.
  • To transfer the lines of code initially in enerbil_fusion.f90 which return the snow surface temperature (temp_sol_new) to the melting temperature (0 °C), after the calculation of snow and soil temperatures, that is to say, at the end of thermosoil.f90.

Thus the resolution of both snow and soil temperatures are well implicitly calculated taking into account the temp_sol_add temperature (for snow) and temp_sol_new (for snow and soil).

GROUP and Objectives

  • Persons: Tao, Jan, Frederique, Catherine, Fuxing, Philippe P., Jean Louis, Josefine
  • Objectives / roadmap : Possible roadmap (to be refined and detailed)
    • Modify the coupling of the new multi-layer snow with soil to be fully implicit. => date ? The current version in MICT works (couple and force mode) but is not fully implicit and the energy conservation at each time step should be checked! The work to make it fully implicit needs to be quantified with Tao (Anticipated to be relatively straightforward)

Meeting on discretization and snow coupling issues (26 Fev 2015)

Persons: Catherine, Agnes, Frederique, Joséfine, Jean Louis, Gerhard, Tao, Fuxing, Jan, Philippe

Location: Jussieu

Snow coupling

Presentation by Catherine and Tao (MICT version)

We had time only for a short presentation of the new snow module implementation:

Some features :

  • the number of layers of snow module (ES) is always 3
  • when there is a snow fall the whole grid is covered by snow ; only the albedo is calculated with a fractional snow cover (standard linear fractional cover)
  • After "Enerbil" the "ES" module update the snow temp profile and accounts for melt, freezing, sublimation,... It then computes the coeficient for the next time step that is given to "Enerbil": the equivalent capacity "C" term that account in an implicit way the ground heat flux (here the flux through the snow pack); Then he provides "Thermosoil" with the lowest snow layer temperature. Thermosoil use that temperature to update its temperature profile and provide back a surface flux for "ES" for the next time step.
  • It seems thus that the scheme is not fully implicit with respect to the "flux from ground to the snow" that is provided in an explicit way from the previous time step value.
  • With the coupled simulation, Tao had to define a minimum snow depth (1 cm ?) to avoid "crashes"; possible problem of energy conservation ?


We discussed the potential impact of the non fully implicit "soil-snow-atm" scheme. Catherine mentionned that in ISBA, Aaron B. had similar issues and that the change to fully implicit did not impacted much the results.

However, we agreed that with very thin snow layers this could be a problem (see "trick" of Tao in coupled mode).

We proposed that a first improvement is to account for fractional snow cover for the energy budget (not only for the albedo). For that the equavalent "C" term passed to "Enerbil" should be a mix between the standard one of "Thermosoil" and the one from "ES". But this needs some revision of the equation and calls of the routine (to be writen explicitely first).

JP propose that we also split the fluxes from Thermosoil back to enerbil and ES with different values.. this would ensure also a full implicit scheme.


  • Snow Scheme:
    • Josefine with Tao will implement the updated version of ES (currently in MICT) into TRUNC
    • We then further add a fractional snow cover so that the problem of "very thin" snow layer (linked to the non fully implicit scheme) becomes most likely negligeable. FOR THAT, we need to start an email discussion about the requested changes (how does it change the call sequences to "thermosoil" and "ES" ?): Anyone is wellcome to launch the email discussion. Then, JLD propose that Fuxing helps with this implementation but other organizations are possible.
    • Few persons needs to gather to establish properly the equation-changes that are needed for a full implicit implementation between "enerbyl" "ES" and "Thermosoil": the list of the "few" needs to be decided ? (volunter ?)
Last modified 3 years ago Last modified on 03/29/16 17:52:27