Nudging

From GHER

(Difference between revisions)
Jump to: navigation, search
(Relaxation dans tout le volume)
 
(14 intermediate revisions not shown)
Line 1: Line 1:
-
Par nudging on entend " rappel vers des champs de climatologies ".
+
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
-
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  ( <math>k(x-x_0)</math> )
+
 
 +
== 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|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  ( <math>k(x-x_0)</math> )
Par exemple (SOURII est ici le terme source pour la température..)
Par exemple (SOURII est ici le terme source pour la température..)
Line 19: Line 72:
-
----
 
-
'''Paramètres'''
+
===Paramètres===
ceux qui ne sont pas précisé dans [[fichier .init|fichier .init]] le sont dans [[INITIAL.H|INITIAL.H]]
ceux qui ne sont pas précisé dans [[fichier .init|fichier .init]] le sont dans [[INITIAL.H|INITIAL.H]]
Line 27: Line 79:
*RNUDG : constante de rappel du ''ressort''
*RNUDG : constante de rappel du ''ressort''
-
*NNUDG : temps de relaxation  !!!  PAS TROUVE OU C ETAIT APPLIQUE POUR L INSTANT  (Arthur) !!!
+
*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..
*KNU : indice du mois en cours..
-
*FLTNUDG ???
 
-
 
-
  INITIAL.H:!    FLTNUDG = HSCALE/TSCALE
 
-
  INITIAL.H-
 
-
  INITIAL.H:      FLTNUDG = 0.1/24*3600
 
-
 
-
 
-
  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)
 
-
 
-
 
-
*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 ??
 
Line 68: Line 99:
----
----
-
 
-
'''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|Makefile.Flags]]
 
-
 
-
Cette option applique un filtre gausien d'une largeur donnée par FILTLEN (en m), sur le champ
 
-
 
-
 
-
*FLTFILTNUDG ?? sorte de flag pour le filtrage ? ??
 
-
 
-
*FILTLEN
 
-
 
-
INITIAL.H-
 
-
INITIAL.H:#ifdef FilterNudg
 
-
INITIAL.H-      FILTLEN = 60000 ! meters
 
-
INITIAL.H-      FltFiltNudg = 0.
 
-
INITIAL.H-#endif
 
-
INITIAL.H-
 

Latest revision as of 13:27, 18 May 2009

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