Nudging

From GHER

Jump to: navigation, search

Par nudging on entend " rappel vers un champs de référence" (par exemple une climatologie). Dans le code GHER, il existe deux mécanismes (implémentés de façon indépendante) de relaxations de T et S:

  • relaxation à la surface , ce qui revient à modifier le flux de chaleur et de sel (ou d'eau douce) avec l'atmosphère
  • relaxation dans tout le volume


Contents

Relaxation à la surface

 fltrelaxation.f90   
                       ...
                       diff(i,j) =  HTI(I,J,KSUPI)/HI(I,J)-TNUD(I,J,MAXT)
                       filtdiff(i,j) = 0
                       if (FLTFiltNudg.ne.0) then
                         call filter2D(imax,jmax,diff,ici,filtdiff,filtimax,filtjmax,filtc)
                       end if
                       ...
                       FLTSNUDG(i,j)=FLTNUDG*diff(i,j) + FLTFiltNudg * filtdiff(i,j)


Filter Nudg

Un des problème liés au nudging et le fait que, puisque les champs donnés de référence sont des champs moyens (climatos..) et que les termes des rappels sont calculés entre les différence point par point à ces champ de référence les structures fines se retrouvent pénalisées puisque ' plus différentes du champ moyen '.

Un moyen de palier à ce problème est de filtrer le champ de correction calculé avant de l'appliquer, ceci est fait avec le module Filternudg (à activer avec le flag -DFilternudg dans Makefile.flags

Cette option applique un filtre gausien d'une largeur donnée par FILTLEN (en m), sur le champ

INITIAL.H-
INITIAL.H:#ifdef FilterNudg
INITIAL.H-      FILTLEN = 60000 ! meters
INITIAL.H-      FltFiltNudg = 0.
INITIAL.H-#endif
INITIAL.H-

Paramètres

FLTNUDG
Force de relaxation (si zero, alors il y a pas de relaxation). Si les HSCALE premier m de l'ocean doivent converger vers la température de référence dans un temps TSCALE, alors
FLTNUDG = HSCALE/TSCALE

Bug dans le code ( FLTNUDG = 0.1/24*3600 => FLTNUDG = 0.1/(24*3600)) ? [Alex]

FLTFILTNUDG
idem que FLTNUDG pour les champs filtrés
FILTLEN en m
largeur du filtre


FLTNUDG ou FLTFILTNUDG ont donc un rôle similaire que RNUDG mais ces premiers on une notion de profondeur et donc les unités sont différentes.

Relaxation dans tout le volume

Par exemple si le modèle présente un shift régulier vers des températures trop élevées, on rajoute un terme à l'équation de la température qui va etre plus ou moins fort selon l'écart du champ de température à un champ de référence donné. Le terme suplémentaire a la forme de la force de rappel d'un ressort ( k(xx0) )

Par exemple (SOURII est ici le terme source pour la température..)

     DO K=2,KSUPII
       DO I=IINF,ISUP-1
         SOURII(I,K) = ...- RNUDG*( HTII(I,J,K) - HII(I,J)*TNUD(I,J,K-1) )* PRENUD(I,J,K-1)


ici RNUDG est une constante de type constante de ressort données dans le fichier .init ,

HTII(I,J,K) est le champ de température (multiplié par la hauteur HII(i,j),

TNUD(I,J,K-1) est le champ de température de référence qui est interpollé à partir des FILETN (pour la T et FILESN pour la salinité) (donnés dans fichier .init)

PRENUD(I,J,K-1) est un masque, soit un fichier 3D, rempli de valeur entre 0 et 1 qui permet de restreindre le nudging par exemple juste en surface ou juste sur un certain détroit.. (donnés en tant que FILEEN dans fichier .init)


Paramètres

ceux qui ne sont pas précisé dans fichier .init le sont dans INITIAL.H

  • RNUDG : constante de rappel du ressort
  • NNUDG : temps de relaxation  !!! PAS TROUVE OU C ETAIT APPLIQUE POUR L INSTANT (Arthur) !!! je pense qu'il est plus utilisé, et peut donc être effacer [Alex]
  • KNU : indice du mois en cours..




interpollation dans le temps

main.f90 appelle getnudg(mjdi) mjdi temps présent



getnufg interpolle les champs de nudging dans le temps et renvoie les tnud et snud (champ 3D de réf) correspondant


Personal tools