MARS adaptation for coastal lagoon

L’application de MARS dans les lagunes côtières a conduit à quelques adaptations du code qui sont activées en utilisant la clé key_lagoon
La clé key_tide_lagoon_banyuls ou key_tide_lagoon_marseille sert à définir les paramètres de calcul des composantes harmoniques de la marée dans les graus (à associer obligatoirement l’une ou l’autre (ou une nouvelle) à la key_lagoon si l_tide_harmcompo)
La clef key_lagoon_spec (à associer à la key_lagoon) contient les spécificités pour un site (ex : prise en compte des tables conchylicoles dans Thau ou autres spécificités à programmer par l’utilisateur).

Graus

Les graus sont des passes qui ouvrent la lagune vers la mer. Ils ne sont pas toujours positionnés en limite de domaine car selon la forme de la lagune, ils peuvent être à l’intéreieur du domaine.
Pour pouvoir donner des conditions aux limites au niveau des graus sans étendre le domaine de calcul au delà (en mer), le modèle doit reconnaître le grau en tant que limite du domaine de calcul.
Le nombre de graus (nbgrau) est donc donné dans paraspec.txt avec pour chacun les indices de maille pour les positionner dans la grille de calcul [igrau(1:nbgrau), jgrau(1:nbgrau)]
Le paramètre type_grau(1:nb_grau) précise la frontière sur laquelle se trouve le grau ::
type_grau = 1 -> NORD
type_grau = 2 -> EST
type_grau = 3 -> SUD
type_grau = 4 -> OUEST

Warning

Actuellement, les graus ne peuvent pas dépasser la largeur d’une maille

Un grau est ouvert losqu’il y a échange d’eau avec la mer et donc qu’il y a de l’eau dans la passe. Il est fermé losque sa profondeur devient trop faible pour qu’il y ait circulation d’eau. Le modèle ne permet pas de simuler les variations de profondeur dans les graus (par transport de sable par exemple). Les variations de profondeurs sont donc forcées si besoin. Les graus caractérisés par une profondeur variable, éventuellement juqu’à leur fermeture, sont repérés par le booleen : l_depthvar_grau (= .TRUE. si profondeur variable). Une subroutine spécifique permet de lire le fichier des profondeurs de ces graus, variant avec le temps (graulagoon.F90). Le nom du fichier à lire pour connaitre la variation de la profondeur dans le grau est donné dans paraspec.txt : file_Hgrau(igrau)
Les sections d’échange dans les graus font partie des paramètres de calage du modèle sur un site donné car elles permettent de caler les débits échangés entre la lagune et la mer. On peut modifier les goulets et les govlets dans les graus pour caler ces sections dans la routine gridmetric.F90
L’application des conditions aux limites en (S, T et substances) dans tous les graus se fait dans obcogcm.F90 en appellant obc2d_rank (voir plus loin)

Bathymetry

Le référentiel vertical utilisé dans la version MARS_Lagunes est différent du référentiel habituel
En règle générale, les données de forçage du modèle « Lagune » (bathymétrie et hauteur d’eau en condition à la limite ouverte) sont telles que :
  • La bathymétrie est repérée par rapport au Zéro NGF (Nivellement Général de la France) : ZNGF
  • Le niveau d’eau (xe) est repéré par rapport au Zéro hydrographique ZH
Le référentiel vertical dans le code MARS classique est le niveau d’eau moyen (i.e. la cote autour de laquelle oscille la mer).
Les relations entre les variables de forçage (Hx(y)_Forç , xe_Forç) et les variables du modèle (Hx(y), xe) sont précisées sur la Figure 1 1.
_images/fig_ref_bathy_lagoon.png
Les valeurs relatives du ZNGF et du niveau moyen Znm par rapport au ZH doivent être donc connues. Des valeurs ont été déduites sur différentes stations du littoral méditerranéen à partir de mesures de hauteurs d’eau
Dans la version MARS de référence :
  • La variable mslshift correspond à la cote du niveau dans lequel les levés bathymétriques sont repérés par rapport au zéro hydrographique.

    . mslshift est défini dans la namelist nambathy du fichier paraspec.txt et ne doit être utilisé que si le réseau de nivellement utilisé n est pas le zéro hydrographique (ex: réseau IGN 69, NGF ...).

  • La variable hnivmoy correspond à la correction à appliquer aux données bathymétriques pour les ramener au niveau moyen lorsqu’elles sont référencées par rapport au zéro hydrographique.

    . hnivmoy est défini par le tableau à 2 dimensions hnivmoy(imin :imax, jmin :jmax) qui doit être sauvegardé dans le fichier netcdf de la bathymétrie.

    . La lecture de ce tableau est faite dans la subroutine bathy.F90 si l_bathy_meanlev**==**TRUE et si la clé CPP key_bathy_final n’est pas activée.

  • l_bathy_meanlev est positionné a .TRUE. si la bathymétrie est référencée par rapport au zéro hydrographique et pour activer la lecture de correction afin de ramener les sondes au niveau moyen.

    Ces corrections ne concernent a priori que les zones macrotidales.

Dans la version MARS « Lagune » :
  • La bathymétrie est repérée par rapport au ZNGF et le niveau moyen Znm est constant sur toute la lagune (hnivmoy est un scalaire = (Delta[ZZnmZh]).

  • Ceci entraîne dans la version MARS lagunes de modifier certaines namelists :

    • namelist nambathy :

      . l_bathy_meanlev = FALSE (alors que ça devrait être vrai)

      . Définition de mslshift = Delta[ZZngfZh] : décalage entre le Zéro NGF et Zéro hydrographique

    • namelist namlagoon :

      . Définition de hnivmoy_lagoon : décalage entre le niveau moyen et le Zéro hydrographique

    • Dans la subroutine bathy.F90 :

      . hnivmoy_g = hnivmoy_lagoon lorsque la cle key_lagoon est activée et donc la ligne

      hx_g(:,:)=hx_g(:,:) + hnivmoy( :, ) – mslshift
      revient à :
      hx_g(:,:)=hx_g(:,:) + Delta[ZZnmZh] – Delta[ZZngfZh]
      

Boundary conditions in water level in graus

Dans la version MARS « Lagune », le signal de hauteur d’eau en condition à la limite ouverte peut être appliqué soit :
  1. à partir d’un signal de marée théorique calculé à partir des constantes harmoniques ;
  2. d’un signal de hauteurs d’eau mesurées.
Dans les deux cas, les booléens l_obc_mars, l_obc_tide et l_obc_ogcm doivent être définis dans la namelist namobc du paraspec.txt, de la façon suivante ::
l_obc_mars = .true. l_obc_tide = .true. l_obc_ogcm = .false.
l_ogcm=.false. car on applique toujours la marée et on n’a pas de modèle de plus grande emprise pour forcer la hauteur d’eau dans les graus
  • Condition à la limite ouverte basée sur un signal théorique de hauteur d’eau

    • Un signal de hauteur d’eau théorique est calculé à partir des constantes harmoniques de la marée (à Banyuls ou à Marseille selon que la clé key_tide_lagoon_banyuls ou key_tide_lagoon_marseille est activée dans le Makefile.datarmor + la loi du baromètre inversée

    • namelist namobc :

      • l_tide_harmcompo = true
    • dans la subroutine init_xe (fichier initxe.F90) :

      • appel de la subroutine tide_harmcompo,

      • dans la subroutine tide_harmcompo.F90 (fichier tideharmcomp.F90) : appel de tideharcomp_lagoonchannel

      • dans la subroutine tideharcomp_lagoonchannel (fichier tideharcomp_lagoonchannel.h) :

        . calcul des variables obc_tide_sshe(j0) ;s(i0) ;w(j0) ;n(i0) selon la valeur de type_grau

        obc_tide_sshX = signal théorique – hnivmoy(igrau,jgrau)
        pour passer du référentiel ZH au niveau moyen
        
  • Condition à la limite ouverte basée sur un signal de hauteurs d’eau mesurées

    • Un signal de hauteur d’eau mesuré est lu dans le fichier file_obc_ogcm_X corespondant au type de grau dans la namelist namobc du paraspec.txt (actuellement un seul fichier par type de grau: Sud, Nord, Est ou Ouest)

      Si type_grau= 1 (Grau au Nord)   ==> file_obc_ogcm_n
      Si type_grau= 2 (Grau a l'Est)   ==> file_obc_ogcm_e
      Si type_grau= 3 (Grau au Sud)    ==> file_obc_ogcm_s
      Si type_grau= 4 (Grau a l'Ouest) ==> file_obc_ogcm_w
      
    • namelist namobc

      . l_tide_harmcompo = false

    • dans la subroutine init_xe (fichier initxe.F90) :

      . appel de la subroutine obc2d_rank . dans la subroutine obc2d_rank (fichier obc2drank.F90) : appel de la subroutine obc_2drank_lagoon . dans la subroutine obc2d_rank_lagoon (fichier obc2dranklagoon.F90) : lecture du fichier file_obc_ogcm_X

    • calcul des variables obc_tide_sshe(j0) ;s(i0) ;w(j0) ;n(i0) pour tous les graus selon la valeur de type_grau

      obc_tide_sshX = signal de hauteur d’eau lu interpolé au pas de temps de tchrono – hnivmoy(igrau,jgrau)
      pour passer du référentiel ZH au niveau moyen
      
    • dans le module obcapplyssh (fichier obcapplyssh.F90) :

      . calcul des variables obc_tide_sshe(j0) ;s(i0) ;w(j0) ;n(i0) pour tous les graus selon la valeur de type_grau

Initial condition in water level in MARS/Lagoon version

Dans la version MARS « Lagune », c’est le signal de hauteur d’eau en condition à la limite ouverte qui est appliqué en condition initiale pour la hauteur d’eau sur toute la lagune (pour ne pas créer de différence importante de niveau entre l’intérieur du domaine et la frontière ouverte). . Subroutine init_xe (fichier initxe.F90)
. Définition du paramètre xe_init à partir des variables obc_tide_sshe(j0) ;s(i0) ;w(j0) ;n(i0) selon la valeur de type_grau(1) . Initialisation de xeu( :, :) = xe_init sur tout le domaine.

Fluxes at the Air-Water interface

Dans la version MARS « Lagune » le code tourne avec dans le Makefile.datarmor les clefs Dkey_sflx_turb_default, Dkey_sflx_ir_swimbank, Dkey_sflx_solar_luyten activées et avec les namelist nammeteo et namthermo du paraspec.txt telles que

nammeteo :
l_sflx_rpa = .true.
l_sflx_rwind = .true.
l_sflx_rsat = .true.
l_sflx_rrh = .true.
l_sflx_rsolar = .false.
l_sflx_rir = .false.
l_sflx_rrain = .true.
l_sflx_rfcc = .true.
l_sflx_ath2m = .false.
name_sflx_sat = ‘bidon’
name_sflx_pa  = ‘bidon’
name_sflx_rh = ‘bidon’
name_sflx_windx = ‘bidon’
name_sflx_windy = ‘bidon’
name_sflx_solar = ‘bidon’
name_sflx_ir = ‘bidon’
name_sflx_rain = ‘bidon’
name_sflx_fcc = ‘bidon’


namthermo:
l_sflx_radlossbot = .true.
    l_sflx_solarcst =.false.
    sflx_solarcst = 0.0

Les namelists

Deux namelists spécifiques à la version MARS_lagunes avec la clé key_lagoon sont utilisées :

  • dans paracom.txt : namlagoonc

    l_cmeteocte = .false.
    rhcte = 80.0
    nebcte = 65.0
    l_rainlag=.false.
    file_pluie= '../entrees/METEO/bidon.prn'  /
    
  • dans paraspec.txt : namlagoon

    hnivmoy_lagoon=0.45
    nbgrau=1
    igrau(1)=172
    jgrau(1)=1
    type_grau(1)=3
    l_depthvar_grau(1)=.true.
    file_Hgrau(1)='../inputs/Hgrau_Lapalme.dat'
    file_obc_ogcm_lagoonts_s='../inputs/CLIM/ST_sete_2003_2015_survalQ2.prn'
    file_obc_ogcm_lagoonts_n=''
    file_obc_ogcm_lagoonts_w=''
    file_obc_ogcm_lagoonts_e=''/