.. _doc.lagoon: **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. .. image:: FIG/LAGOON/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=''/