-
Delaigue Olivier authoredeb3f809f
#*****************************************************************************************************************
#' Function which extrapolates the precipitation and air temperature series for different elevation layers (method from Valery, 2010).
#'
#' Elevation layers of equal surface are created the 101 elevation quantiles (\emph{HypsoData})
#' and the number requested elevation layers (\emph{NLayers}). \cr
#' Forcing data (precipitation and air temperature) are extrapolated using gradients from Valery (2010).
#' (e.g. gradP=0.0004 [m-1] for France and gradT=0.434 [degreC/100m] for January, 1st). \cr
#' This function is used by the \emph{CreateInputsModel} function. \cr
#*****************************************************************************************************************
#' @title Altitudinal extrapolation of precipitation and temperature series
#' @author Laurent Coron, Pierre Brigode (June 2014)
#' @references
#' Turcotte, R., L.-G. Fortin, V. Fortin, J.-P. Fortin and J.-P. Villeneuve (2007),
#' Operational analysis of the spatial distribution and the temporal evolution of the snowpack water equivalent
#' in southern Quebec, Canada, Nordic Hydrology, 38(3), 211, doi:10.2166/nh.2007.009. \cr
#' Valéry, A. (2010), Modélisation précipitations-débit sous influence nivale ? : Elaboration d'un module neige
#' et évaluation sur 380 bassins versants, PhD thesis (in french), AgroParisTech, Paris, France. \cr
#' USACE (1956), Snow Hydrology, pp. 437, U.S. Army Coprs of Engineers (USACE) North Pacific Division, Portland, Oregon, USA.
#' @seealso \code{\link{CreateInputsModel}}, \code{\link{RunModel_CemaNeigeGR4J}}
#' @encoding UTF-8
#' @export
#_FunctionInputs__________________________________________________________________________________________________
#' @param DatesR [POSIXlt] vector of dates
#' @param Precip [numeric] time series of daily total precipitation (catchment average) [mm]
#' @param TempMean [numeric] time series of daily mean air temperature [degC]
#' @param TempMin (optional) [numeric] time series of daily min air temperature [degC]
#' @param TempMax (optional) [numeric] time series of daily max air temperature [degC]
#' @param ZInputs [numeric] real giving the mean elevation of the Precip and Temp series (before extrapolation) [m]
#' @param HypsoData [numeric] vector of 101 reals: min, q01 to q99 and max of catchment elevation distribution [m]
#' @param NLayers [numeric] integer giving the number of elevation layers requested [-]
#' @param quiet (optional) [boolean] boolean indicating if the function is run in quiet mode or not, default=FALSE
#_FunctionOutputs_________________________________________________________________________________________________
#' @return list containing the extrapolated series of precip. and air temp. on each elevation layer
#' \tabular{ll}{
#' \emph{$LayerPrecip } \tab [list] list of time series of daily precipitation (layer average) [mm] \cr
#' \emph{$LayerTempMean } \tab [list] list of time series of daily mean air temperature (layer average) [degC] \cr
#' \emph{$LayerTempMin } \tab [list] list of time series of daily min air temperature (layer average) [degC] \cr
#' \emph{$LayerTempMax } \tab [list] list of time series of daily max air temperature (layer average) [degC] \cr
#' \emph{$LayerFracSolidPrecip} \tab [list] list of time series of daily solid precip. fract. (layer average) [-] \cr
#' \emph{$ZLayers } \tab [numeric] vector of median elevation for each layer \cr
#' }
#*****************************************************************************************************************
DataAltiExtrapolation_Valery <- function(DatesR,Precip,TempMean,TempMin=NULL,TempMax=NULL,ZInputs,HypsoData,NLayers,quiet=FALSE){
##Altitudinal_gradient_functions_______________________________________________________________
##unique_gradient_for_precipitation
GradP_Valery2010 <- function(){
return(0.00041); ### value from Val? PhD thesis page 126
}
##daily_gradients_for_mean_min_and_max_air_temperature
GradT_Valery2010 <- function(){
RESULT <- matrix(c(
1, 1, 0.434, 0.366, 0.498,
2, 1, 0.434, 0.366, 0.500,
3, 1, 0.435, 0.367, 0.501,
4, 1, 0.436, 0.367, 0.503,
5, 1, 0.437, 0.367, 0.504,
6, 1, 0.439, 0.367, 0.506,
7, 1, 0.440, 0.367, 0.508,
8, 1, 0.441, 0.368, 0.510,
9, 1, 0.442, 0.368, 0.512,
10, 1, 0.444, 0.368, 0.514,
11, 1, 0.445, 0.368, 0.517,
12, 1, 0.446, 0.368, 0.519,
13, 1, 0.448, 0.369, 0.522,
14, 1, 0.450, 0.369, 0.525,
15, 1, 0.451, 0.369, 0.527,
16, 1, 0.453, 0.370, 0.530,
17, 1, 0.455, 0.370, 0.533,
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
18, 1, 0.456, 0.370, 0.537,
19, 1, 0.458, 0.371, 0.540,
20, 1, 0.460, 0.371, 0.543,
21, 1, 0.462, 0.371, 0.547,
22, 1, 0.464, 0.372, 0.550,
23, 1, 0.466, 0.372, 0.554,
24, 1, 0.468, 0.373, 0.558,
25, 1, 0.470, 0.373, 0.561,
26, 1, 0.472, 0.374, 0.565,
27, 1, 0.474, 0.374, 0.569,
28, 1, 0.476, 0.375, 0.573,
29, 1, 0.478, 0.375, 0.577,
30, 1, 0.480, 0.376, 0.582,
31, 1, 0.483, 0.376, 0.586,
1, 2, 0.485, 0.377, 0.590,
2, 2, 0.487, 0.377, 0.594,
3, 2, 0.489, 0.378, 0.599,
4, 2, 0.492, 0.379, 0.603,
5, 2, 0.494, 0.379, 0.607,
6, 2, 0.496, 0.380, 0.612,
7, 2, 0.498, 0.381, 0.616,
8, 2, 0.501, 0.381, 0.621,
9, 2, 0.503, 0.382, 0.625,
10, 2, 0.505, 0.383, 0.630,
11, 2, 0.508, 0.384, 0.634,
12, 2, 0.510, 0.384, 0.639,
13, 2, 0.512, 0.385, 0.643,
14, 2, 0.515, 0.386, 0.648,
15, 2, 0.517, 0.387, 0.652,
16, 2, 0.519, 0.387, 0.657,
17, 2, 0.522, 0.388, 0.661,
18, 2, 0.524, 0.389, 0.666,
19, 2, 0.526, 0.390, 0.670,
20, 2, 0.528, 0.391, 0.674,
21, 2, 0.530, 0.392, 0.679,
22, 2, 0.533, 0.393, 0.683,
23, 2, 0.535, 0.393, 0.687,
24, 2, 0.537, 0.394, 0.691,
25, 2, 0.539, 0.395, 0.695,
26, 2, 0.541, 0.396, 0.699,
27, 2, 0.543, 0.397, 0.703,
28, 2, 0.545, 0.398, 0.707,
29, 2, 0.546, 0.399, 0.709,
1, 3, 0.547, 0.399, 0.711,
2, 3, 0.549, 0.400, 0.715,
3, 3, 0.551, 0.401, 0.718,
4, 3, 0.553, 0.402, 0.722,
5, 3, 0.555, 0.403, 0.726,
6, 3, 0.557, 0.404, 0.729,
7, 3, 0.559, 0.405, 0.732,
8, 3, 0.560, 0.406, 0.736,
9, 3, 0.562, 0.406, 0.739,
10, 3, 0.564, 0.407, 0.742,
11, 3, 0.566, 0.408, 0.745,
12, 3, 0.567, 0.409, 0.748,
13, 3, 0.569, 0.410, 0.750,
14, 3, 0.570, 0.411, 0.753,
15, 3, 0.572, 0.412, 0.756,
16, 3, 0.573, 0.413, 0.758,
17, 3, 0.575, 0.414, 0.761,
18, 3, 0.576, 0.415, 0.763,
19, 3, 0.577, 0.416, 0.765,
20, 3, 0.579, 0.417, 0.767,
21, 3, 0.580, 0.417, 0.769,
22, 3, 0.581, 0.418, 0.771,
23, 3, 0.582, 0.419, 0.773,
24, 3, 0.583, 0.420, 0.774,
25, 3, 0.584, 0.421, 0.776,
26, 3, 0.585, 0.422, 0.777,
27, 3, 0.586, 0.422, 0.779,
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
28, 3, 0.587, 0.423, 0.780,
29, 3, 0.588, 0.424, 0.781,
30, 3, 0.589, 0.425, 0.782,
31, 3, 0.590, 0.425, 0.783,
1, 4, 0.591, 0.426, 0.784,
2, 4, 0.591, 0.427, 0.785,
3, 4, 0.592, 0.427, 0.785,
4, 4, 0.593, 0.428, 0.786,
5, 4, 0.593, 0.429, 0.787,
6, 4, 0.594, 0.429, 0.787,
7, 4, 0.595, 0.430, 0.787,
8, 4, 0.595, 0.431, 0.788,
9, 4, 0.596, 0.431, 0.788,
10, 4, 0.596, 0.432, 0.788,
11, 4, 0.597, 0.432, 0.788,
12, 4, 0.597, 0.433, 0.788,
13, 4, 0.597, 0.433, 0.788,
14, 4, 0.598, 0.434, 0.788,
15, 4, 0.598, 0.434, 0.788,
16, 4, 0.598, 0.435, 0.787,
17, 4, 0.599, 0.435, 0.787,
18, 4, 0.599, 0.436, 0.787,
19, 4, 0.599, 0.436, 0.786,
20, 4, 0.599, 0.436, 0.786,
21, 4, 0.600, 0.437, 0.785,
22, 4, 0.600, 0.437, 0.785,
23, 4, 0.600, 0.437, 0.784,
24, 4, 0.600, 0.438, 0.784,
25, 4, 0.600, 0.438, 0.783,
26, 4, 0.601, 0.438, 0.783,
27, 4, 0.601, 0.438, 0.782,
28, 4, 0.601, 0.439, 0.781,
29, 4, 0.601, 0.439, 0.781,
30, 4, 0.601, 0.439, 0.780,
1, 5, 0.601, 0.439, 0.779,
2, 5, 0.601, 0.439, 0.778,
3, 5, 0.601, 0.439, 0.778,
4, 5, 0.601, 0.440, 0.777,
5, 5, 0.601, 0.440, 0.776,
6, 5, 0.601, 0.440, 0.775,
7, 5, 0.601, 0.440, 0.775,
8, 5, 0.601, 0.440, 0.774,
9, 5, 0.601, 0.440, 0.773,
10, 5, 0.602, 0.440, 0.772,
11, 5, 0.602, 0.440, 0.772,
12, 5, 0.602, 0.440, 0.771,
13, 5, 0.602, 0.440, 0.770,
14, 5, 0.602, 0.440, 0.770,
15, 5, 0.602, 0.440, 0.769,
16, 5, 0.602, 0.440, 0.768,
17, 5, 0.602, 0.440, 0.768,
18, 5, 0.602, 0.440, 0.767,
19, 5, 0.602, 0.440, 0.767,
20, 5, 0.602, 0.440, 0.766,
21, 5, 0.602, 0.440, 0.766,
22, 5, 0.602, 0.440, 0.765,
23, 5, 0.602, 0.440, 0.765,
24, 5, 0.602, 0.440, 0.764,
25, 5, 0.602, 0.440, 0.764,
26, 5, 0.602, 0.440, 0.764,
27, 5, 0.602, 0.439, 0.763,
28, 5, 0.602, 0.439, 0.763,
29, 5, 0.602, 0.439, 0.763,
30, 5, 0.602, 0.439, 0.762,
31, 5, 0.602, 0.439, 0.762,
1, 6, 0.602, 0.439, 0.762,
2, 6, 0.602, 0.439, 0.762,
3, 6, 0.602, 0.439, 0.762,
4, 6, 0.602, 0.439, 0.762,
5, 6, 0.602, 0.439, 0.762,
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
6, 6, 0.602, 0.438, 0.761,
7, 6, 0.602, 0.438, 0.761,
8, 6, 0.602, 0.438, 0.761,
9, 6, 0.602, 0.438, 0.761,
10, 6, 0.602, 0.438, 0.761,
11, 6, 0.602, 0.438, 0.762,
12, 6, 0.602, 0.438, 0.762,
13, 6, 0.602, 0.438, 0.762,
14, 6, 0.602, 0.438, 0.762,
15, 6, 0.602, 0.437, 0.762,
16, 6, 0.602, 0.437, 0.762,
17, 6, 0.602, 0.437, 0.762,
18, 6, 0.602, 0.437, 0.762,
19, 6, 0.602, 0.437, 0.763,
20, 6, 0.602, 0.437, 0.763,
21, 6, 0.602, 0.437, 0.763,
22, 6, 0.602, 0.436, 0.763,
23, 6, 0.602, 0.436, 0.763,
24, 6, 0.602, 0.436, 0.764,
25, 6, 0.602, 0.436, 0.764,
26, 6, 0.601, 0.436, 0.764,
27, 6, 0.601, 0.436, 0.764,
28, 6, 0.601, 0.436, 0.764,
29, 6, 0.601, 0.435, 0.765,
30, 6, 0.601, 0.435, 0.765,
1, 7, 0.601, 0.435, 0.765,
2, 7, 0.600, 0.435, 0.765,
3, 7, 0.600, 0.435, 0.765,
4, 7, 0.600, 0.434, 0.766,
5, 7, 0.600, 0.434, 0.766,
6, 7, 0.599, 0.434, 0.766,
7, 7, 0.599, 0.434, 0.766,
8, 7, 0.599, 0.434, 0.766,
9, 7, 0.598, 0.433, 0.766,
10, 7, 0.598, 0.433, 0.766,
11, 7, 0.598, 0.433, 0.766,
12, 7, 0.597, 0.433, 0.766,
13, 7, 0.597, 0.432, 0.767,
14, 7, 0.597, 0.432, 0.767,
15, 7, 0.596, 0.432, 0.767,
16, 7, 0.596, 0.432, 0.766,
17, 7, 0.595, 0.431, 0.766,
18, 7, 0.595, 0.431, 0.766,
19, 7, 0.594, 0.431, 0.766,
20, 7, 0.594, 0.430, 0.766,
21, 7, 0.593, 0.430, 0.766,
22, 7, 0.593, 0.430, 0.766,
23, 7, 0.592, 0.429, 0.765,
24, 7, 0.592, 0.429, 0.765,
25, 7, 0.591, 0.428, 0.765,
26, 7, 0.590, 0.428, 0.765,
27, 7, 0.590, 0.428, 0.764,
28, 7, 0.589, 0.427, 0.764,
29, 7, 0.588, 0.427, 0.764,
30, 7, 0.588, 0.426, 0.763,
31, 7, 0.587, 0.426, 0.763,
1, 8, 0.586, 0.425, 0.762,
2, 8, 0.586, 0.425, 0.762,
3, 8, 0.585, 0.424, 0.761,
4, 8, 0.584, 0.424, 0.761,
5, 8, 0.583, 0.423, 0.760,
6, 8, 0.583, 0.423, 0.760,
7, 8, 0.582, 0.422, 0.759,
8, 8, 0.581, 0.421, 0.758,
9, 8, 0.580, 0.421, 0.758,
10, 8, 0.579, 0.420, 0.757,
11, 8, 0.578, 0.420, 0.756,
12, 8, 0.578, 0.419, 0.755,
13, 8, 0.577, 0.418, 0.754,
14, 8, 0.576, 0.418, 0.754,
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
15, 8, 0.575, 0.417, 0.753,
16, 8, 0.574, 0.416, 0.752,
17, 8, 0.573, 0.415, 0.751,
18, 8, 0.572, 0.415, 0.750,
19, 8, 0.571, 0.414, 0.749,
20, 8, 0.570, 0.413, 0.748,
21, 8, 0.569, 0.413, 0.747,
22, 8, 0.569, 0.412, 0.746,
23, 8, 0.568, 0.411, 0.745,
24, 8, 0.567, 0.410, 0.744,
25, 8, 0.566, 0.409, 0.743,
26, 8, 0.565, 0.409, 0.742,
27, 8, 0.564, 0.408, 0.741,
28, 8, 0.563, 0.407, 0.740,
29, 8, 0.562, 0.406, 0.738,
30, 8, 0.561, 0.405, 0.737,
31, 8, 0.560, 0.405, 0.736,
1, 9, 0.558, 0.404, 0.735,
2, 9, 0.557, 0.403, 0.734,
3, 9, 0.556, 0.402, 0.732,
4, 9, 0.555, 0.401, 0.731,
5, 9, 0.554, 0.401, 0.730,
6, 9, 0.553, 0.400, 0.728,
7, 9, 0.552, 0.399, 0.727,
8, 9, 0.551, 0.398, 0.725,
9, 9, 0.550, 0.397, 0.724,
10, 9, 0.549, 0.396, 0.723,
11, 9, 0.548, 0.396, 0.721,
12, 9, 0.546, 0.395, 0.720,
13, 9, 0.545, 0.394, 0.718,
14, 9, 0.544, 0.393, 0.717,
15, 9, 0.543, 0.392, 0.715,
16, 9, 0.542, 0.391, 0.713,
17, 9, 0.541, 0.391, 0.712,
18, 9, 0.540, 0.390, 0.710,
19, 9, 0.538, 0.389, 0.709,
20, 9, 0.537, 0.388, 0.707,
21, 9, 0.536, 0.388, 0.705,
22, 9, 0.535, 0.387, 0.703,
23, 9, 0.533, 0.386, 0.702,
24, 9, 0.532, 0.385, 0.700,
25, 9, 0.531, 0.385, 0.698,
26, 9, 0.530, 0.384, 0.696,
27, 9, 0.528, 0.383, 0.694,
28, 9, 0.527, 0.383, 0.692,
29, 9, 0.526, 0.382, 0.690,
30, 9, 0.525, 0.381, 0.688,
1, 10, 0.523, 0.381, 0.686,
2, 10, 0.522, 0.380, 0.684,
3, 10, 0.521, 0.379, 0.682,
4, 10, 0.519, 0.379, 0.680,
5, 10, 0.518, 0.378, 0.678,
6, 10, 0.517, 0.377, 0.676,
7, 10, 0.515, 0.377, 0.674,
8, 10, 0.514, 0.376, 0.671,
9, 10, 0.512, 0.376, 0.669,
10, 10, 0.511, 0.375, 0.667,
11, 10, 0.510, 0.375, 0.664,
12, 10, 0.508, 0.374, 0.662,
13, 10, 0.507, 0.374, 0.659,
14, 10, 0.505, 0.373, 0.657,
15, 10, 0.504, 0.373, 0.654,
16, 10, 0.502, 0.372, 0.652,
17, 10, 0.501, 0.372, 0.649,
18, 10, 0.499, 0.372, 0.647,
19, 10, 0.498, 0.371, 0.644,
20, 10, 0.496, 0.371, 0.641,
21, 10, 0.495, 0.371, 0.639,
22, 10, 0.493, 0.370, 0.636,
23, 10, 0.492, 0.370, 0.633,
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
24, 10, 0.490, 0.370, 0.630,
25, 10, 0.489, 0.369, 0.628,
26, 10, 0.487, 0.369, 0.625,
27, 10, 0.485, 0.369, 0.622,
28, 10, 0.484, 0.368, 0.619,
29, 10, 0.482, 0.368, 0.616,
30, 10, 0.481, 0.368, 0.613,
31, 10, 0.479, 0.368, 0.610,
1, 11, 0.478, 0.368, 0.607,
2, 11, 0.476, 0.367, 0.604,
3, 11, 0.475, 0.367, 0.601,
4, 11, 0.473, 0.367, 0.598,
5, 11, 0.471, 0.367, 0.595,
6, 11, 0.470, 0.367, 0.592,
7, 11, 0.468, 0.367, 0.589,
8, 11, 0.467, 0.366, 0.586,
9, 11, 0.465, 0.366, 0.583,
10, 11, 0.464, 0.366, 0.580,
11, 11, 0.462, 0.366, 0.577,
12, 11, 0.461, 0.366, 0.574,
13, 11, 0.459, 0.366, 0.571,
14, 11, 0.458, 0.366, 0.568,
15, 11, 0.456, 0.366, 0.565,
16, 11, 0.455, 0.366, 0.562,
17, 11, 0.454, 0.366, 0.559,
18, 11, 0.452, 0.365, 0.556,
19, 11, 0.451, 0.365, 0.553,
20, 11, 0.450, 0.365, 0.550,
21, 11, 0.448, 0.365, 0.547,
22, 11, 0.447, 0.365, 0.544,
23, 11, 0.446, 0.365, 0.542,
24, 11, 0.445, 0.365, 0.539,
25, 11, 0.443, 0.365, 0.536,
26, 11, 0.442, 0.365, 0.533,
27, 11, 0.441, 0.365, 0.531,
28, 11, 0.440, 0.365, 0.528,
29, 11, 0.439, 0.365, 0.526,
30, 11, 0.438, 0.365, 0.523,
1, 12, 0.437, 0.365, 0.521,
2, 12, 0.436, 0.365, 0.519,
3, 12, 0.435, 0.365, 0.517,
4, 12, 0.434, 0.365, 0.515,
5, 12, 0.434, 0.365, 0.513,
6, 12, 0.433, 0.365, 0.511,
7, 12, 0.432, 0.365, 0.509,
8, 12, 0.431, 0.365, 0.507,
9, 12, 0.431, 0.365, 0.505,
10, 12, 0.430, 0.365, 0.504,
11, 12, 0.430, 0.365, 0.502,
12, 12, 0.429, 0.365, 0.501,
13, 12, 0.429, 0.365, 0.500,
14, 12, 0.429, 0.365, 0.498,
15, 12, 0.428, 0.365, 0.497,
16, 12, 0.428, 0.365, 0.496,
17, 12, 0.428, 0.365, 0.496,
18, 12, 0.428, 0.365, 0.495,
19, 12, 0.428, 0.365, 0.494,
20, 12, 0.428, 0.365, 0.494,
21, 12, 0.428, 0.365, 0.494,
22, 12, 0.428, 0.365, 0.493,
23, 12, 0.429, 0.365, 0.493,
24, 12, 0.429, 0.366, 0.493,
25, 12, 0.429, 0.366, 0.493,
26, 12, 0.430, 0.366, 0.494,
27, 12, 0.430, 0.366, 0.494,
28, 12, 0.431, 0.366, 0.495,
29, 12, 0.431, 0.366, 0.495,
30, 12, 0.432, 0.366, 0.496,
31, 12, 0.433, 0.366, 0.497),ncol=5,byrow=TRUE);
dimnames(RESULT) <- list(1:366,c("day","month","grad_Tmean","grad_Tmin","grad_Tmax"));
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
return(RESULT);
}
##Format_______________________________________________________________________________________
HypsoData <- as.double(HypsoData);
ZInputs <- as.double(ZInputs);
##ElevationLayers_Creation_____________________________________________________________________
ZLayers <- as.double(rep(NA,NLayers));
if(!identical(HypsoData,as.double(rep(NA,101)))){
nmoy <- 100 %/% NLayers;
nreste <- 100 %% NLayers;
ncont <- 0;
for(iLayer in 1:NLayers){
if(nreste > 0){ nn <- nmoy+1; nreste <- nreste-1; } else { nn <- nmoy; }
if(nn==1){ ZLayers[iLayer] <- HypsoData[ncont+1]; }
if(nn==2){ ZLayers[iLayer] <- 0.5 * (HypsoData[ncont+1] + HypsoData[ncont+2]); }
if(nn>2 ){ ZLayers[iLayer] <- HypsoData[ncont+nn/2]; }
ncont <- ncont+nn;
}
}
##Precipitation_extrapolation__________________________________________________________________
##Initialisation
LayerPrecip <- list();
if(identical(ZInputs,HypsoData[51]) & NLayers==1){
LayerPrecip[[1]] <- as.double(Precip);
} else {
##Elevation_gradients_for_daily_mean_precipitation
GradP <- GradP_Valery2010(); ### single value
TabGradP <- rep(GradP,length(Precip));
##Extrapolation
##Thresold_of_inputs_median_elevation
Zthreshold <- 4000;
##_On_each_elevation_layer...
for(iLayer in 1:NLayers){
##If_layer_elevation_smaller_than_Zthreshold
if(ZLayers[iLayer] <= Zthreshold){
LayerPrecip[[iLayer]] <- as.double(Precip*exp(TabGradP*(ZLayers[iLayer]-ZInputs)));
##If_layer_elevation_greater_than_Zthreshold
} else {
##If_inputs_median_elevation_smaller_than_Zthreshold
if(ZInputs <= Zthreshold){ LayerPrecip[[iLayer]] <- as.double(Precip*exp(TabGradP*(Zthreshold-ZInputs)));
##If_inputs_median_elevation_greater_then_Zthreshold
} else { LayerPrecip[[iLayer]] <- as.double(Precip); }
}
}
}
##Temperature_extrapolation____________________________________________________________________
##Initialisation
LayerTempMean <- list(); LayerTempMin <- list(); LayerTempMax <- list();
if(identical(ZInputs,HypsoData[51]) & NLayers==1){
LayerTempMean[[1]] <- as.double(TempMean);
if(!is.null(TempMin) & !is.null(TempMax)){ LayerTempMin[[1]] <- as.double(TempMin); LayerTempMax[[1]] <- as.double(TempMax); }
} else {
##Elevation_gradients_for_daily_mean_min_and_max_temperature
GradT <- GradT_Valery2010(); ### Day, Month, GradTmean, GradTmin and GradTmax for iCol=1,2,3,4,5, respectively
TabGradT <- matrix(NA,nrow=length(Precip),ncol=3);
for(iday in 1:366){
ind <- which(as.numeric(format(DatesR,format="%d"))==GradT[iday,1] & as.numeric(format(DatesR,format="%m"))==GradT[iday,2]);
TabGradT[ind,1:3] <- GradT[iday,3:5];
}
##Extrapolation
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
##On_each_elevation_layer...
for(iLayer in 1:NLayers){
LayerTempMean[[iLayer]] <- as.double(TempMean + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,1])/100);
if(!is.null(TempMin) & !is.null(TempMax)){
LayerTempMin[[iLayer]] <- as.double(TempMin + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,2])/100);
LayerTempMax[[iLayer]] <- as.double(TempMax + (ZInputs-ZLayers[iLayer])*abs(TabGradT[,3])/100);
}
}
}
##Solid_Fraction_for_each_elevation_layer______________________________________________________
LayerFracSolidPrecip <- list();
##Thresold_of_inputs_median_elevation
Zthreshold <- 1500;
##On_each_elevation_layer...
for(iLayer in 1:NLayers){
Option <- "USACE";
if(!is.na(ZInputs)){ if(ZInputs < Zthreshold & !is.null(TempMin) & !is.null(TempMax)){ Option <- "Hydrotel"; } }
##Turcotte_formula_from_Hydrotel
if(Option=="Hydrotel"){
TempMin <- LayerTempMin[[iLayer]];
TempMax <- LayerTempMax[[iLayer]];
SolidFraction <- 1 - TempMax/(TempMax - TempMin);
SolidFraction[TempMin >= 0] <- 0;
SolidFraction[TempMax <= 0] <- 1;
}
##USACE_formula
if(Option=="USACE"){
USACE_Tmin <- -1.0;
USACE_Tmax <- 3.0;
TempMean <- LayerTempMean[[iLayer]];
SolidFraction <- 1- (TempMean - USACE_Tmin)/(USACE_Tmax - USACE_Tmin);
SolidFraction[TempMean > USACE_Tmax] <- 0;
SolidFraction[TempMean < USACE_Tmin] <- 1;
}
LayerFracSolidPrecip[[iLayer]] <- as.double(SolidFraction);
}
##END__________________________________________________________________________________________
return(list(LayerPrecip=LayerPrecip,LayerTempMean=LayerTempMean,LayerTempMin=LayerTempMin,LayerTempMax=LayerTempMax,
LayerFracSolidPrecip=LayerFracSolidPrecip,ZLayers=ZLayers));
}