From 6217d322e0063380a609fc63cf90f6642d7ac3e2 Mon Sep 17 00:00:00 2001 From: Florent Taccone <florent.taccone@edf.fr> Date: Mon, 3 Mar 2025 13:16:30 +0000 Subject: [PATCH] Resolve "New ice cover friction law for KHIONE" --- NEWS.txt | 5 +- .../khione/user/latex/4_ice_cover.tex | 65 +++++++------ .../khione/ice_cover-t2d/f2d_hydro_v01_3.slf | 3 + .../khione/ice_cover-t2d/f2d_hydro_v02_3.slf | 3 + .../khione/ice_cover-t2d/f2d_hydro_v03_3.slf | 3 + .../khione/ice_cover-t2d/f2d_hydro_v04_3.slf | 3 + .../khione/ice_cover-t2d/fce_cover_v01_3.slf | 3 + .../khione/ice_cover-t2d/fce_cover_v02_3.slf | 3 + .../khione/ice_cover-t2d/fce_cover_v03_3.slf | 3 + .../khione/ice_cover-t2d/fce_cover_v04_3.slf | 3 + .../khione/ice_cover-t2d/vnv_ice_cover-t2d.py | 92 +++++++++++++++++++ sources/khione/khione.dico | 24 +++-- sources/khione/source_hydro_icover.f | 63 ++++++++++++- 13 files changed, 238 insertions(+), 35 deletions(-) create mode 100644 examples/khione/ice_cover-t2d/f2d_hydro_v01_3.slf create mode 100644 examples/khione/ice_cover-t2d/f2d_hydro_v02_3.slf create mode 100644 examples/khione/ice_cover-t2d/f2d_hydro_v03_3.slf create mode 100644 examples/khione/ice_cover-t2d/f2d_hydro_v04_3.slf create mode 100644 examples/khione/ice_cover-t2d/fce_cover_v01_3.slf create mode 100644 examples/khione/ice_cover-t2d/fce_cover_v02_3.slf create mode 100644 examples/khione/ice_cover-t2d/fce_cover_v03_3.slf create mode 100644 examples/khione/ice_cover-t2d/fce_cover_v04_3.slf diff --git a/NEWS.txt b/NEWS.txt index 915d473204..9148be08e8 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -1,6 +1,9 @@ Latest changes ============== +KHIONE: Addition of a new formula to compute under ice cover friction +A new default value of 0.02 m1/3/s is set for under cover friction + TELEMAC-2D: Add Cui vegetation law TELEMAC-2D: Improvements of the friction laws of telemac2d @@ -35,7 +38,7 @@ and resulting in incorrect contour extraction. TELEMAC-2D/TELEMAC-3D/TOMAWAC/GAIA: fix time series exports for global models -MASCARET: New keyword VARIABLES PRECISION +MASCARET: New keyword VARIABLES PRECISION to control the precision of saved variables TELEMAC-2D/TELEMAC-3D/GAIA: fix time series files in longitude/latitude diff --git a/documentation/khione/user/latex/4_ice_cover.tex b/documentation/khione/user/latex/4_ice_cover.tex index b80f88e83d..1e3b31a534 100644 --- a/documentation/khione/user/latex/4_ice_cover.tex +++ b/documentation/khione/user/latex/4_ice_cover.tex @@ -15,13 +15,13 @@ %=============================================================================== -Ice accumulating on the surface of a water body can take many forms from slush ice in its early +Ice accumulating on the surface of a water body can take many forms from slush ice in its early stage of formation to rigid ice floes. Eventually it can significantly grow to form a thick solid ice cover. -Initially, the ice cover can result from the buoyancy of frazil flocs reaching +Initially, the ice cover can result from the buoyancy of frazil flocs reaching and accumulating at free surface or result from a direct growth from river banks also known as border ice growth. -This wide zoology of ice types and processes offers a large variety of approaches +This wide zoology of ice types and processes offers a large variety of approaches when it comes to model the ice cover formation and dynamics. The ice cover can be characterized by the several physical variables which are: \begin{itemize} @@ -30,10 +30,10 @@ The ice cover can be characterized by the several physical variables which are: \item the horizontal velocity $\vec{u}_i = [u_i,v_i]^T$, describing the ice cover dynamics. \end{itemize} -To model an ice cover, one might want to predict its formation (evolution of $C_i$), +To model an ice cover, one might want to predict its formation (evolution of $C_i$), its evolution in thickness (evolution of $t_i$) but also its motion ($\vec{u}_i$). -One might also want to assess its impact on hydrodynamics to properly model the hydrodynamic flows -underneath the ice layer as well as all other interactions the ice cover has with other tracers such as temperature (heat exchanges between ice cover and water, see section \ref{heat_exchanges_icover_and_water}) +One might also want to assess its impact on hydrodynamics to properly model the hydrodynamic flows +underneath the ice layer as well as all other interactions the ice cover has with other tracers such as temperature (heat exchanges between ice cover and water, see section \ref{heat_exchanges_icover_and_water}) and suspended frazil ice (mass exchanges between ice cover and suspended frazil ice, see section \ref{section:precipitation}). @@ -55,8 +55,8 @@ in first approximation. %For both dynamic and static ice covers, several processes are still handled in a similar way, such as: %\begin{itemize} -%\item Mass exchanges between suspended frazil ice and ice cover (see section \ref{section:mass_exchanges}) -%\item Thermal growth of ice cover (see section \ref{section:thermal_growth_icover}) +%\item Mass exchanges between suspended frazil ice and ice cover (see section \ref{section:mass_exchanges}) +%\item Thermal growth of ice cover (see section \ref{section:thermal_growth_icover}) %\item Ice cover impact on hydrodynamics (see section \ref{section:impact_on_hydro}) %\end{itemize} @@ -72,7 +72,7 @@ in first approximation. A simple dynamic ice cover model can be activated with the keyword \telkey{DYNAMIC ICE COVER} = YES (default = NO). The model consist in making the assumption that the ice cover is convected -with the same velocity as the water column. +with the same velocity as the water column. This model rely on two conservation equations to describe the ice cover. One on the surface ice fraction and the second on the ice thickness. This model is best suited for the early stage of ice cover formation when it is mainly formed by slush ice or grease ice. @@ -109,7 +109,7 @@ Finally, the deposition/erosion source term $S_{M}^c$ reads: \begin{equation} S_{M}^c= \left\{ - \begin{array}{l} + \begin{array}{l} (\sum^{N_c}_{k=1} S_{MI}^k)/ (1-\alpha_t)t_{imin} \text{ if } C_i < 1 \\ 0 \text{ else} \end{array} @@ -134,12 +134,12 @@ The deposition/erosion source term $S_{M}^t$ reads: The sources $S_{\phi}^c$ and $S_{\phi}^t$ are defined similarly, adding the assumption that $S_{\phi}^c$ is only taken into account if melting i.e. if $S_{\phi}<0$. -Finally, flux limiters are introduced to prevent the source terms from leading to $C_i > 1$, $C_i < 0$ or $t_i < t_{imin}$. +Finally, flux limiters are introduced to prevent the source terms from leading to $C_i > 1$, $C_i < 0$ or $t_i < t_{imin}$. ~\newline %=============================================================================== -\section{Static ice cover (border ice) } +\section{Static ice cover (border ice) } \label{section:static_ice_cover} %=============================================================================== @@ -362,7 +362,7 @@ The frazil deposition/erosion source term can be activated with the keyword \tel \item If \telkey{MODEL FOR MASS EXCHANGE BETWEEN FRAZIL AND ICE COVER=1} only a net deposition flux is considered. The total volume of ice in m$^3$ that accumulate at the free surface, on an elementary area $\Delta S$ during a time step $\Delta t$ noted $\Delta V_i$, is expressed as a function of the buoyancy velocity and suspended frazil ice volume fractions, such that: \begin{equation} -\Delta V_i = \sum_{k=1}^{N_c} D_k w_k C_k \Delta t \Delta S +\Delta V_i = \sum_{k=1}^{N_c} D_k w_k C_k \Delta t \Delta S \end{equation} in which, \begin{itemize} @@ -372,7 +372,7 @@ in which, \item $D_k$ is the probability of deposition of frazil particles reaching the surface for the class $k$ (between 0 and 1), which can be set via the keyword \telkey{FRAZIL UNDER COVER DEPOSITION PROBABILITY} (default = 1). \end{itemize} -Noting $\Delta V_i = \Delta (C_i t_i) \Delta S$, the evolution of the ice cover due to deposition/erosion +Noting $\Delta V_i = \Delta (C_i t_i) \Delta S$, the evolution of the ice cover due to deposition/erosion can therefore be expressed as: \begin{equation} \dfrac{\partial C_i t_i}{\partial t} = \sum_{k=1}^{N_c} S_{MI}^k @@ -382,7 +382,7 @@ in which, \begin{itemize} \item $C_i$ is the ice cover surface fraction, \item $t_i$ is the ice cover thickness, - \item $S_{MI}^k$ is the ice cover deposition/erosion source term defined as + \item $S_{MI}^k$ is the ice cover deposition/erosion source term defined as \begin{equation} S_{MI}^k = \min \left( D_k w_k C_k, \dfrac{C_k h}{\Delta t} \right) \end{equation} @@ -392,7 +392,7 @@ The threshold in the definition of $S_{MI}^k$ is designed such that the amount o \item If \telkey{MODEL FOR MASS EXCHANGE BETWEEN FRAZIL AND ICE COVER=2} erosion and deposition are both considered. The total volume of ice in m$^3$ that accumulate at the free surface, on an elementary area $\Delta S$ during a time step $\Delta t$ noted $\Delta V_i$, can be expressed as: \begin{equation} -\Delta V_i = \sum_{k=1}^{N_c} \left( D_k w_k C_k - E_k C_i t_i(1-\alpha_t) \right) \Delta t \Delta S +\Delta V_i = \sum_{k=1}^{N_c} \left( D_k w_k C_k - E_k C_i t_i(1-\alpha_t) \right) \Delta t \Delta S \end{equation} in which, \begin{itemize} @@ -403,8 +403,8 @@ in which, \item $E_k$ is the coefficient of re-entrainment rate of surface ice per unit area in s$^{-1}$ for the class $k$, which can be set via the keyword \telkey{FRAZIL UNDER COVER REENTRAINMENT COEFFICIENT} (default = 1.E-4), \item $\alpha_t$ is the porosity of surface ice which can be set with the keyword \telkey{POROSITY OF SURFACE ICE} (default = 0.4). \end{itemize} -The source term $S_{MI}^k$ is then defined as previously explained. -%The evolution of the ice cover due to precipitation +The source term $S_{MI}^k$ is then defined as previously explained. +%The evolution of the ice cover due to precipitation %can therefore be expressed as: %\begin{equation} %\dfrac{\partial C_i t_i}{\partial t} = \sum_{k=1}^{N_c} S_{MI}^k @@ -414,9 +414,9 @@ The source term $S_{MI}^k$ is then defined as previously explained. %\begin{itemize} % \item $C_i$ is the ice cover surface fraction, % \item $t_i$ is the ice cover thickness, -% \item $S_{MI}^k$ is the ice cover precipitation source term defined as +% \item $S_{MI}^k$ is the ice cover precipitation source term defined as %\begin{equation} -%S_{MI}^k = -\min \left( D_k w_k C_k, \dfrac{C_k h}{\Delta t} \right) + +%S_{MI}^k = -\min \left( D_k w_k C_k, \dfrac{C_k h}{\Delta t} \right) + %\min \left( E_k C_i t_i, \dfrac{C_i t_i}{N_{c} \Delta t} \right) %\end{equation} %\end{itemize} @@ -443,11 +443,12 @@ Two under cover friction models can be chosen, using the keyword \telkey{MODEL F \begin{lstlisting} 1 : FRICTION ON THE ENTIRE WATER COLUMN 2 : FRICTION COMPUTED WITH RATIO +3 : FRICTION COMPUTED WITH COMPOSITE TERM \end{lstlisting} \begin{enumerate} -\item When \telkey{MODEL FOR UNDER COVER FRICTION=1} the under cover friction is solved in a similar fashion as for the bottom friction considering the whole water column has an effect on both bottom and ice cover friction terms. -The friction coefficient of the ice cover $n_i$ can be set with the keyword \telkey{ICE FRICTION COEFFICIENT} (default = 0.04) and is associated to the friction law set with the keyword \telkey{LAW OF ICE COVER FRICTION}. This is an interger between 0 and 5 to compute the following friction source terms: +\item When \telkey{MODEL FOR UNDER COVER FRICTION=1} the under cover friction is solved in a similar fashion as for the bottom friction considering the whole water column has an effect on both bottom and ice cover friction terms. +The friction coefficient of the ice cover $n_i$ can be set with the keyword \telkey{ICE FRICTION COEFFICIENT} (default = 0.02) and is associated to the friction law set with the keyword \telkey{LAW OF ICE COVER FRICTION}. This is an interger between 0 and 5 to compute the following friction source terms: \begin{itemize} \item 0: no friction, @@ -470,7 +471,7 @@ in which: The total friction force is then computed as: \begin{equation} S_f=S_{fi}+S_{fb}. -\end{equation} +\end{equation} \item When \telkey{MODEL FOR UNDER COVER FRICTION=2} the under cover friction as well as the bottom friction @@ -495,10 +496,20 @@ The Manning law then becomes: where $k=i$ for under cover friction and $k=b$ for bottom friction. The total friction force is then computed as: \begin{equation} S_f=S_{fi}+S_{fb}. -\end{equation} +\end{equation} + +\item When \telkey{MODEL FOR UNDER COVER FRICTION=3} the under cover friction as well as the bottom friction + are computed using a formula based on the minimum principle for head losses. + The model first evaluates the equivalent Manning friction term $n$ from the bottom + Manning coefficient $n_b$ and the under ice Manning coefficient $n_i$ with the formula: +\begin{equation} + n=\left(\frac{1}{2}n_{b}^{3/2}+\frac{1}{2}n_{i}^{3/2}\right)^{2/3}. +\end{equation} + +Then the friction term is applied both on the top and the bottom applied to the entire water depth. \begin{WarningBlock}{Note:} - If MODEL FOR UNDER COVER FRICTION = 2: + If MODEL FOR UNDER COVER FRICTION = 2 or 3: \begin{itemize} \item Only Manning and Strickler laws are avaliable for under cover friction and bottom friction. \item In presence of ice cover, the bottom friction is computed in \khione and not in \telemac{2D}. @@ -520,7 +531,7 @@ with $t_i$ the ice cover thickness (in m), $t_{ic}$ the critical ice thickness ( \subsection{Ice cover thickness gradient source term} The weight of the ice cover leads to an increase of the pressure at the top of the water column. -As a consequence, a moment source term is created which depends on the ice cover +As a consequence, a moment source term is created which depends on the ice cover pressure gradient. The momentum source term due to the ice cover pressure, noted $S_{pi}$ can be expressed as: \begin{equation} @@ -531,7 +542,7 @@ Supposing the ice cover density is constant, $S_{pi}$ reads \begin{equation} S_{pi}= - g \dfrac{\rho_i}{\rho} \nabla t_i. \end{equation} -In \khione, this source term is either not taken into account or treated explicitly or implicitly +In \khione, this source term is either not taken into account or treated explicitly or implicitly depending on the value of the keyword \telkey{MODEL FOR THE ICE COVER PRESSURE GRADIENT } (default = 2): \begin{itemize} \item 0: no ice pressure gradient source term, diff --git a/examples/khione/ice_cover-t2d/f2d_hydro_v01_3.slf b/examples/khione/ice_cover-t2d/f2d_hydro_v01_3.slf new file mode 100644 index 0000000000..387413cf9a --- /dev/null +++ b/examples/khione/ice_cover-t2d/f2d_hydro_v01_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b777b064f64a4961812792459fafbed12e286c0e90e1b6f90278b75d6df8fbe6 +size 170468 diff --git a/examples/khione/ice_cover-t2d/f2d_hydro_v02_3.slf b/examples/khione/ice_cover-t2d/f2d_hydro_v02_3.slf new file mode 100644 index 0000000000..5f229edf0e --- /dev/null +++ b/examples/khione/ice_cover-t2d/f2d_hydro_v02_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:882dcea886297834a64de3cc7d7ca32470113a1e53b8999dc2ed645d4bac853b +size 170468 diff --git a/examples/khione/ice_cover-t2d/f2d_hydro_v03_3.slf b/examples/khione/ice_cover-t2d/f2d_hydro_v03_3.slf new file mode 100644 index 0000000000..b369140650 --- /dev/null +++ b/examples/khione/ice_cover-t2d/f2d_hydro_v03_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aebe909144d710f5c5dd1e4737b5c394b65383397bbdc42549d009059ae6576b +size 170468 diff --git a/examples/khione/ice_cover-t2d/f2d_hydro_v04_3.slf b/examples/khione/ice_cover-t2d/f2d_hydro_v04_3.slf new file mode 100644 index 0000000000..8451dc98a6 --- /dev/null +++ b/examples/khione/ice_cover-t2d/f2d_hydro_v04_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1ffe86006066ffdd198ec7e83754703f059efdc881def2fe7e6276149feea67 +size 170468 diff --git a/examples/khione/ice_cover-t2d/fce_cover_v01_3.slf b/examples/khione/ice_cover-t2d/fce_cover_v01_3.slf new file mode 100644 index 0000000000..5b11a18a1a --- /dev/null +++ b/examples/khione/ice_cover-t2d/fce_cover_v01_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39e0a71a774daeea6d5a715eb7aa472e8904f5c2015fd1b62bd9faf7c079276a +size 136640 diff --git a/examples/khione/ice_cover-t2d/fce_cover_v02_3.slf b/examples/khione/ice_cover-t2d/fce_cover_v02_3.slf new file mode 100644 index 0000000000..0e03a9cdfd --- /dev/null +++ b/examples/khione/ice_cover-t2d/fce_cover_v02_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cfaa41f4d54cf1134a933a7c20d4f928c615a99c322445d1b0b6c82b40cea4e +size 136640 diff --git a/examples/khione/ice_cover-t2d/fce_cover_v03_3.slf b/examples/khione/ice_cover-t2d/fce_cover_v03_3.slf new file mode 100644 index 0000000000..110ca28352 --- /dev/null +++ b/examples/khione/ice_cover-t2d/fce_cover_v03_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f71bd1d848c7833b3da06dda572bc6b3ae93306a35edc8b50c899f4c654f915 +size 136640 diff --git a/examples/khione/ice_cover-t2d/fce_cover_v04_3.slf b/examples/khione/ice_cover-t2d/fce_cover_v04_3.slf new file mode 100644 index 0000000000..6763dbb7e1 --- /dev/null +++ b/examples/khione/ice_cover-t2d/fce_cover_v04_3.slf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b29a3d3fe49b297382732b061e1bcdfa8077f76a0ce9fd40fa17226d98e01fb +size 136640 diff --git a/examples/khione/ice_cover-t2d/vnv_ice_cover-t2d.py b/examples/khione/ice_cover-t2d/vnv_ice_cover-t2d.py index 8407492153..920389464a 100644 --- a/examples/khione/ice_cover-t2d/vnv_ice_cover-t2d.py +++ b/examples/khione/ice_cover-t2d/vnv_ice_cover-t2d.py @@ -50,6 +50,19 @@ class VnvStudy(AbstractVnvStudy): cas.set('PARALLEL PROCESSORS', 4) self.add_study('vnv1_2_par', 'telemac2d', 't2d_cover.cas', cas=cas) del cas + #---------------------------------------------------------------------- + # cas 1: totally covered channel + cas = TelemacCas('t2d_cover.cas', get_dico('telemac2d')) + cask = TelemacCas('ice_cover_v01.cas', get_dico('khione')) + cask.set('MODEL FOR UNDER COVER FRICTION', 3) + cask.write('ice_tmp.cas') + cas.set('RESULTS FILE', 'r2d_hydro_v01.slf') + cas.set('KHIONE STEERING FILE', 'ice_tmp.cas') + self.add_study('vnv1_3_seq', 'telemac2d', 't2d_cover.cas', cas) + # cas 1 parallel + cas.set('PARALLEL PROCESSORS', 4) + self.add_study('vnv1_3_par', 'telemac2d', 't2d_cover.cas', cas=cas) + del cas #---------------------------------------------------------------------- # cas 2: partially covered channel (downstream) @@ -74,6 +87,19 @@ class VnvStudy(AbstractVnvStudy): cas.set('PARALLEL PROCESSORS', 4) self.add_study('vnv2_2_par', 'telemac2d', 't2d_cover.cas', cas=cas) del cas + #---------------------------------------------------------------------- + # cas 2: partially covered channel (downstream) + cas = TelemacCas('t2d_cover.cas', get_dico('telemac2d')) + cask = TelemacCas('ice_cover_v02.cas', get_dico('khione')) + cask.set('MODEL FOR UNDER COVER FRICTION', 3) + cask.write('ice_tmp.cas') + cas.set('RESULTS FILE', 'r2d_hydro_v02.slf') + cas.set('KHIONE STEERING FILE', 'ice_tmp.cas') + self.add_study('vnv2_3_seq', 'telemac2d', 't2d_cover.cas', cas) + # cas 2 parallel + cas.set('PARALLEL PROCESSORS', 4) + self.add_study('vnv2_3_par', 'telemac2d', 't2d_cover.cas', cas=cas) + del cas #---------------------------------------------------------------------- # cas 3: partially covered channel (upstream) @@ -99,6 +125,19 @@ class VnvStudy(AbstractVnvStudy): cas.set('PARALLEL PROCESSORS', 4) self.add_study('vnv3_2_par', 'telemac2d', 't2d_cover.cas', cas=cas) del cas + #---------------------------------------------------------------------- + # cas 3: partially covered channel (upstream) + cas = TelemacCas('t2d_cover.cas', get_dico('telemac2d')) + cask = TelemacCas('ice_cover_v03.cas', get_dico('khione')) + cask.set('MODEL FOR UNDER COVER FRICTION', 3) + cask.write('ice_tmp.cas') + cas.set('RESULTS FILE', 'r2d_hydro_v03.slf') + cas.set('KHIONE STEERING FILE', 'ice_tmp.cas') + self.add_study('vnv3_3_seq', 'telemac2d', 't2d_cover.cas', cas) + # cas 3 parallel + cas.set('PARALLEL PROCESSORS', 4) + self.add_study('vnv3_3_par', 'telemac2d', 't2d_cover.cas', cas=cas) + del cas #---------------------------------------------------------------------- # cas 4: partially covered channel with icejam (upstream) @@ -125,6 +164,19 @@ class VnvStudy(AbstractVnvStudy): cas.set('PARALLEL PROCESSORS', 4) self.add_study('vnv4_2_par', 'telemac2d', 't2d_cover.cas', cas=cas) del cas + #---------------------------------------------------------------------- + # cas 4: partially covered channel with icejam (upstream) + cas = TelemacCas('t2d_cover.cas', get_dico('telemac2d')) + cask = TelemacCas('ice_cover_v04.cas', get_dico('khione')) + cask.set('MODEL FOR UNDER COVER FRICTION', 3) + cask.write('ice_tmp.cas') + cas.set('RESULTS FILE', 'r2d_hydro_v04.slf') + cas.set('KHIONE STEERING FILE', 'ice_tmp.cas') + self.add_study('vnv4_3_seq', 'telemac2d', 't2d_cover.cas', cas) + # cas 4 parallel + cas.set('PARALLEL PROCESSORS', 4) + self.add_study('vnv4_3_par', 'telemac2d', 't2d_cover.cas', cas=cas) + del cas def _check_results(self): """ @@ -150,6 +202,16 @@ class VnvStudy(AbstractVnvStudy): self.check_epsilons('vnv1_2_seq:T2DRES', 'vnv1_2_par:T2DRES', eps=[1.e-6]) self.check_epsilons('vnv1_2_seq:ICERES', 'vnv1_2_par:ICERES', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv1_3_seq:T2DRES', 'f2d_hydro_v01_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv1_3_seq:ICERES', 'fce_cover_v01_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv1_3_par:T2DRES', 'f2d_hydro_v01_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv1_3_par:ICERES', 'fce_cover_v01_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv1_3_seq:T2DRES', 'vnv1_3_par:T2DRES', eps=[1.e-6]) + self.check_epsilons('vnv1_3_seq:ICERES', 'vnv1_3_par:ICERES', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. self.check_epsilons('vnv2_seq:T2DRES', 'f2d_hydro_v02.slf', eps=[1.e-6]) self.check_epsilons('vnv2_seq:ICERES', 'fce_cover_v02.slf', eps=[1.e-6]) @@ -170,6 +232,16 @@ class VnvStudy(AbstractVnvStudy): self.check_epsilons('vnv2_2_seq:T2DRES', 'vnv2_2_par:T2DRES', eps=[1.e-6]) self.check_epsilons('vnv2_2_seq:ICERES', 'vnv2_2_par:ICERES', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv2_3_seq:T2DRES', 'f2d_hydro_v02_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv2_3_seq:ICERES', 'fce_cover_v02_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv2_3_par:T2DRES', 'f2d_hydro_v02_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv2_3_par:ICERES', 'fce_cover_v02_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv2_3_seq:T2DRES', 'vnv2_3_par:T2DRES', eps=[1.e-6]) + self.check_epsilons('vnv2_3_seq:ICERES', 'vnv2_3_par:ICERES', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. self.check_epsilons('vnv3_seq:T2DRES', 'f2d_hydro_v03.slf', eps=[1.e-6]) self.check_epsilons('vnv3_seq:ICERES', 'fce_cover_v03.slf', eps=[1.e-6]) @@ -190,6 +262,16 @@ class VnvStudy(AbstractVnvStudy): self.check_epsilons('vnv3_2_seq:T2DRES', 'vnv3_2_par:T2DRES', eps=[1.e-6]) self.check_epsilons('vnv3_2_seq:ICERES', 'vnv3_2_par:ICERES', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv3_3_seq:T2DRES', 'f2d_hydro_v03_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv3_3_seq:ICERES', 'fce_cover_v03_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv3_3_par:T2DRES', 'f2d_hydro_v03_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv3_3_par:ICERES', 'fce_cover_v03_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv3_3_seq:T2DRES', 'vnv3_3_par:T2DRES', eps=[1.e-6]) + self.check_epsilons('vnv3_3_seq:ICERES', 'vnv3_3_par:ICERES', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. self.check_epsilons('vnv4_seq:T2DRES', 'f2d_hydro_v04.slf', eps=[1.e-6]) self.check_epsilons('vnv4_seq:ICERES', 'fce_cover_v04.slf', eps=[1.e-6]) @@ -210,6 +292,16 @@ class VnvStudy(AbstractVnvStudy): self.check_epsilons('vnv4_2_seq:T2DRES', 'vnv4_2_par:T2DRES', eps=[1.e-6]) self.check_epsilons('vnv4_2_seq:ICERES', 'vnv4_2_par:ICERES', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv4_3_seq:T2DRES', 'f2d_hydro_v04_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv4_3_seq:ICERES', 'fce_cover_v04_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv4_3_par:T2DRES', 'f2d_hydro_v04_3.slf', eps=[1.e-6]) + self.check_epsilons('vnv4_3_par:ICERES', 'fce_cover_v04_3.slf', eps=[1.e-6]) + # Comparison with the last time frame of the reference file. + self.check_epsilons('vnv4_3_seq:T2DRES', 'vnv4_3_par:T2DRES', eps=[1.e-6]) + self.check_epsilons('vnv4_3_seq:ICERES', 'vnv4_3_par:ICERES', eps=[1.e-6]) + def _post(self): """ diff --git a/sources/khione/khione.dico b/sources/khione/khione.dico index e838a57e9f..5e7da978d1 100644 --- a/sources/khione/khione.dico +++ b/sources/khione/khione.dico @@ -1250,8 +1250,8 @@ NOM1 = 'ICE FRICTION COEFFICIENT' TYPE = REAL INDEX = 4 TAILLE = 1 -DEFAUT = 0.04 -DEFAUT1 = 0.04 +DEFAUT = 0.02 +DEFAUT1 = 0.02 MNEMO = 'FICE' RUBRIQUE = 'COUVERT DE GLACE';'PARAMETRES PHYSIQUES';'FROTTEMENT' @@ -1343,14 +1343,26 @@ RUBRIQUE1 = NIVEAU = 0 CHOIX = '1="FROTTEMENT SOUS COUVERT TOTAL"'; -'2="FROTTEMENT AVEC RATIO DE HAUTEUR D''EAU"' +'2="FROTTEMENT AVEC RATIO DE HAUTEUR D''EAU"'; +'3="FROTTEMENT AVEC UN MANNING EQUIVALENT"' CHOIX1 = '1="UNDER COVER TOTAL FRICTION"'; -'2="FRICTION WITH RATIO ON WATER DEPTHS"' +'2="FRICTION WITH RATIO ON WATER DEPTHS"'; +'3="FRICTION WITH EQUIVALENT MANNING"' AIDE = -'Selectionne un modele de frottement sous couvert.' +'Selectionne un modele de frottement sous couvert : +\begin{itemize} +\item 1 : frottement total ; +\item 2 : frottement avec ratio de hauteur ; +\item 3 : frottement avec Manning equivalent. +\end{itemize}' AIDE1 = -'Selection of a friction model for under cover' +'Selection of a friction model for under cover: +\begin{itemize} +\item 1 : total friction ; +\item 2 : friction with ratio on depths ; +\item 3 : friction with equivalent Manning. +\end{itemize}' NOM = 'MODELE POUR LE GRADIENT DE PRESSION DE COUVERT' NOM1 = 'MODEL FOR THE ICE COVER PRESSURE GRADIENT' diff --git a/sources/khione/source_hydro_icover.f b/sources/khione/source_hydro_icover.f index ea52634941..c5205e7890 100644 --- a/sources/khione/source_hydro_icover.f +++ b/sources/khione/source_hydro_icover.f @@ -278,7 +278,68 @@ ! ENDIF ENDDO - ENDIF + ELSEIF(IFRIC.EQ.3) THEN!ICE/BOTTOM FRICTION WITH RATIO(VIOLEAU) +! +! ONLY MANNING AND STRICKLER TAKEN INTO ACCOUNT + IF((IFROT.NE.4.AND.IFROT.NE.3).OR. + & (KFROT.NE.4.AND.KFROT.NE.3)) THEN + WRITE(LU,*) 'ICE FRICTION WITH RATIOS' + WRITE(LU,*) 'PLEASE USE MANNING OR STRICKLER LAW' + CALL PLANTE(1) + STOP + ENDIF +! + DO I=1,NPOIN +! COMPUTE ICE MANNING + IF(IFROT.EQ.3) THEN + NI = 1.D0/ICESTR%R(I) + ELSE + NI = ICESTR%R(I) + ENDIF +! COMPUTE BOTTOM MANNING + IF(KFROT.EQ.3) THEN + NB = 1.D0/CHESTR%R(I) + ELSE + NB = CHESTR%R(I) + ENDIF +! +! COMPUTATION OF EQUIVALENT MANNING + T4%R(I) = (0.5D0*(NB**1.5D0) + + & 0.5D0*(NI**1.5D0))**(2.D0/3.D0) +! + IF(IFROT.EQ.3) THEN + T4%R(I) = 1.D0/T4%R(I) + ENDIF + ENDDO +! + CALL FRICTION_KHIONE(NPOIN,IFROT,GRAV,KARMAN,T4,T1,H,U,V) +! +! COMPUTES DEPTH + EPS +! + CALL OS( 'X=+(Y,C)', X=T5, Y=H, C=EPS ) +! +! COMPUTES FRICTION FORCES +! + DO I=1,NPOIN + IF(T2%R(I).GT.EPS) THEN + SP_EAU = SQRT( U%R(I)**2 + V%R(I)**2 ) + IF( H%R(I).LT.EPS ) SP_EAU = + & MAX( SP_EAU, SQRT(GRAV*(EPS-H%R(I))*H%R(I)/EPS) ) +! +! ~~> UPDATE SOURCE TERM (MULTIPLIED BY 2 BECAUSE APPLIED ON TOP +! AND BOTTOM) + FU%R(I) = FU%R(I) - T1%R(I)*SP_EAU*U%R(I) / T5%R(I) + FV%R(I) = FV%R(I) - T1%R(I)*SP_EAU*V%R(I) / T5%R(I) +! ~~> UPDATE COEFFICIENT WITH BOTTOM FRICTION CORRECTION + CF%R(I) = 0.D0 +! + ENDIF + ENDDO + ELSE + WRITE(LU,*) 'ICE FRICTION LAW NOT TAKEN INTO ACCOUNT' + CALL PLANTE(1) + STOP + ENDIF !IFRIC ! ENDIF ! ICE COVER IMPACT ON HYDRO ! -- GitLab