Closed phil-blain closed 4 years ago
C'est la cause du crash?
oui. À ce point dans le calcul, il utilise une valeur du tableau stPr qui n'est pas initialisée, et je compile avec -init=snans,arrays
donc il abort quand il tombe sur le NaN... mais je ne comprends pas vraiment pourquoi encore, normalement elle devrait être initilialisée.
le tableau n'est pas initialisé à cet endroit parce que l'initialisation de stPr
se fait dans ¢alc_zeta_Pr
avec un boucle sur icellt
, mais le tableau est utilisé dans calc_bvec
dans une boucle sur icellu
. Mon raisonnement ici https://github.com/phil-blain/CICE/issues/15#issuecomment-614170344 est erroné parce que les deux masques ne sont pas définis de la même façon:
iceumask
est défini dans ice_dyn_shared::dyn_prep2
à partir de umask
, aiu
et umass
icetmask
est défini dans ice_dyn_shared::dyn_prep1
donc:
Tu veux dire grille u et grille t?
Faudrait que je checke. Il y a parfois des trucs de la grille t (les quatre autour) qui sont utilisés pour les calculs au point u. C'est peut-être ça qui se passe.
jf
Selon moi ca crash dans le marginal ice zone. Il y a très peu de glace (Aice tend vers zero). Il y a un calcul au point u (Aice > puny) qui a besoin des 4 voisins au point t. Un des point t est un nan car Aice < puny. La même chose peut se passer avec le evp mais ca doit être initialisé avec des zéros au lieu des nan. Je pense que ça marcherait en l'initialisant avec des zéros. D'un point de vue physique c'est ok que les terms de rhéologie soient à zéro vue le peu de glace.
Merci JF, je pense que tu as raison. J'ai regardé le code du EVP, et effectivement le tableau str
utilisé dans ice_dyn_shared::stepu
, qui intègre l'équation de momentum,
https://github.com/phil-blain/CICE/blob/8bf95d102c6779f227e431026768e7827e79abdf/cicecore/cicedynB/dynamics/ice_dyn_shared.F90#L722-L726
est initialisé à zéro dans ice_dyn_evp::stress
:
https://github.com/phil-blain/CICE/blob/8bf95d102c6779f227e431026768e7827e79abdf/cicecore/cicedynB/dynamics/ice_dyn_evp.F90#L626-L629
(avant de calculer explicitement les stress pour les cellules où il y a de la glace).
Donc je vais faire la même chose pour notre solveur, initialiser stPr
à zéro. Merci d'avoir confirmé que ça fait du sens niveau physique.
@JFLemieux73 j'imagine que ça fait aussi du sens que zetaD
soit initialisé à zéro ?
oui car zeta=ice_strength / (2 Delta*) ...dans ces zones avec très peu de glace, ice_strength tend vers zéro.
Avec l'initialisation de zetaD
et stPr
, la code complète avec succès. Je reprends donc les tests MPI.
Program received signal SIGFPE, Arithmetic exception.
it_nl=0
istep=86
( 14e pas de temps de la 4e journée)stPr(i,j)
, is NaN, which is weird because it's supposed to be correctly initialized incalc_zeta_Pr
... this grid point is a point next to the southern coast of Alaska (if those i j are the same as the ones Ncview gives)also very weird that this did not happen when running the 5 year test on daley (but that was 8x1, so a different decomposition..., so maybe not that weird)
@JFLemieux73