Nudging

From GHER

Revision as of 07:37, 10 September 2008 by Abarth (Talk | contribs)
Jump to: navigation, search

Par nudging on entend " rappel vers un champs de référence" (par exemple une climatologies) Dans le code GHER, il exist 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


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


  • FLTFILTNUDG cf plus haut
  • FILTLEN en m , largeur du filtre
INITIAL.H-
INITIAL.H:#ifdef FilterNudg
INITIAL.H-      FILTLEN = 60000 ! meters
INITIAL.H-      FltFiltNudg = 0.
INITIAL.H-#endif
INITIAL.H-

Relaxation dans tout le volume

Par exemple si le modèle présente un shift régulier vers des températures trop élevé, on rajoute un terme à l'équation de la température qui va etre plu ou moins fort selon l'écart du champ de température à un champ de référence donné, le terme supplémentaire à 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) !!!
  • KNU : indice du mois en cours..
  • FLTNUDG ???
 INITIAL.H:!     FLTNUDG = HSCALE/TSCALE
 INITIAL.H-
 INITIAL.H:      FLTNUDG = 0.1/24*3600



  • FLTFILTNUDG  ???

De ce que je comprends FLTNUDG ou FLTFILTNUDG doit ête à 0, l'autre servant de scaling pour le nudging de surface .. même rôle que RNUDG ??



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