Forked from HYCAR-Hydro / airGR
Source project has a limited visibility.
DataAltiExtrapolation_Valery.R 18.93 KiB
DataAltiExtrapolation_Valery <- function(DatesR,
                                         Precip,  PrecipScale = TRUE,
                                         TempMean, TempMin = NULL, TempMax = NULL,
                                         ZInputs,  HypsoData, NLayers,
                                         verbose = TRUE) {
    ##Altitudinal_gradient_functions_______________________________________________________________
    ##unique_gradient_for_precipitation
    GradP_Valery2010 <- function() {
      return(0.00041)  ### value from Valery PhD thesis page 126
    ##daily_gradients_for_mean_min_and_max_air_temperature
    GradT_Valery2010 <- function() {
      RESULT <- matrix(c(
      01, 01, 0.434, 0.366, 0.498,
      02, 01, 0.434, 0.366, 0.500,
      03, 01, 0.435, 0.367, 0.501,
      04, 01, 0.436, 0.367, 0.503,
      05, 01, 0.437, 0.367, 0.504,
      06, 01, 0.439, 0.367, 0.506,
      07, 01, 0.440, 0.367, 0.508,
      08, 01, 0.441, 0.368, 0.510,
      09, 01, 0.442, 0.368, 0.512,
      10, 01, 0.444, 0.368, 0.514,
      11, 01, 0.445, 0.368, 0.517,
      12, 01, 0.446, 0.368, 0.519,
      13, 01, 0.448, 0.369, 0.522,
      14, 01, 0.450, 0.369, 0.525,
      15, 01, 0.451, 0.369, 0.527,
      16, 01, 0.453, 0.370, 0.530,
      17, 01, 0.455, 0.370, 0.533,
      18, 01, 0.456, 0.370, 0.537,
      19, 01, 0.458, 0.371, 0.540,
      20, 01, 0.460, 0.371, 0.543,
      21, 01, 0.462, 0.371, 0.547,
      22, 01, 0.464, 0.372, 0.550,
      23, 01, 0.466, 0.372, 0.554,
      24, 01, 0.468, 0.373, 0.558,
      25, 01, 0.470, 0.373, 0.561,
      26, 01, 0.472, 0.374, 0.565,
      27, 01, 0.474, 0.374, 0.569,
      28, 01, 0.476, 0.375, 0.573,
      29, 01, 0.478, 0.375, 0.577,
      30, 01, 0.480, 0.376, 0.582,
      31, 01, 0.483, 0.376, 0.586,
      01, 02, 0.485, 0.377, 0.590,
      02, 02, 0.487, 0.377, 0.594,
      03, 02, 0.489, 0.378, 0.599,
      04, 02, 0.492, 0.379, 0.603,
      05, 02, 0.494, 0.379, 0.607,
      06, 02, 0.496, 0.380, 0.612,
      07, 02, 0.498, 0.381, 0.616,
      08, 02, 0.501, 0.381, 0.621,
      09, 02, 0.503, 0.382, 0.625,
      10, 02, 0.505, 0.383, 0.630,
      11, 02, 0.508, 0.384, 0.634,
      12, 02, 0.510, 0.384, 0.639,
      13, 02, 0.512, 0.385, 0.643,
      14, 02, 0.515, 0.386, 0.648,
      15, 02, 0.517, 0.387, 0.652,
      16, 02, 0.519, 0.387, 0.657,
      17, 02, 0.522, 0.388, 0.661,
      18, 02, 0.524, 0.389, 0.666,
      19, 02, 0.526, 0.390, 0.670,
      20, 02, 0.528, 0.391, 0.674,
      21, 02, 0.530, 0.392, 0.679,
      22, 02, 0.533, 0.393, 0.683,
      23, 02, 0.535, 0.393, 0.687,
      24, 02, 0.537, 0.394, 0.691,
      25, 02, 0.539, 0.395, 0.695,
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
26, 02, 0.541, 0.396, 0.699, 27, 02, 0.543, 0.397, 0.703, 28, 02, 0.545, 0.398, 0.707, 29, 02, 0.546, 0.399, 0.709, 01, 03, 0.547, 0.399, 0.711, 02, 03, 0.549, 0.400, 0.715, 03, 03, 0.551, 0.401, 0.718, 04, 03, 0.553, 0.402, 0.722, 05, 03, 0.555, 0.403, 0.726, 06, 03, 0.557, 0.404, 0.729, 07, 03, 0.559, 0.405, 0.732, 08, 03, 0.560, 0.406, 0.736, 09, 03, 0.562, 0.406, 0.739, 10, 03, 0.564, 0.407, 0.742, 11, 03, 0.566, 0.408, 0.745, 12, 03, 0.567, 0.409, 0.748, 13, 03, 0.569, 0.410, 0.750, 14, 03, 0.570, 0.411, 0.753, 15, 03, 0.572, 0.412, 0.756, 16, 03, 0.573, 0.413, 0.758, 17, 03, 0.575, 0.414, 0.761, 18, 03, 0.576, 0.415, 0.763, 19, 03, 0.577, 0.416, 0.765, 20, 03, 0.579, 0.417, 0.767, 21, 03, 0.580, 0.417, 0.769, 22, 03, 0.581, 0.418, 0.771, 23, 03, 0.582, 0.419, 0.773, 24, 03, 0.583, 0.420, 0.774, 25, 03, 0.584, 0.421, 0.776, 26, 03, 0.585, 0.422, 0.777, 27, 03, 0.586, 0.422, 0.779, 28, 03, 0.587, 0.423, 0.780, 29, 03, 0.588, 0.424, 0.781, 30, 03, 0.589, 0.425, 0.782, 31, 03, 0.590, 0.425, 0.783, 01, 04, 0.591, 0.426, 0.784, 02, 04, 0.591, 0.427, 0.785, 03, 04, 0.592, 0.427, 0.785, 04, 04, 0.593, 0.428, 0.786, 05, 04, 0.593, 0.429, 0.787, 06, 04, 0.594, 0.429, 0.787, 07, 04, 0.595, 0.430, 0.787, 08, 04, 0.595, 0.431, 0.788, 09, 04, 0.596, 0.431, 0.788, 10, 04, 0.596, 0.432, 0.788, 11, 04, 0.597, 0.432, 0.788, 12, 04, 0.597, 0.433, 0.788, 13, 04, 0.597, 0.433, 0.788, 14, 04, 0.598, 0.434, 0.788, 15, 04, 0.598, 0.434, 0.788, 16, 04, 0.598, 0.435, 0.787, 17, 04, 0.599, 0.435, 0.787, 18, 04, 0.599, 0.436, 0.787, 19, 04, 0.599, 0.436, 0.786, 20, 04, 0.599, 0.436, 0.786, 21, 04, 0.600, 0.437, 0.785, 22, 04, 0.600, 0.437, 0.785, 23, 04, 0.600, 0.437, 0.784, 24, 04, 0.600, 0.438, 0.784, 25, 04, 0.600, 0.438, 0.783, 26, 04, 0.601, 0.438, 0.783, 27, 04, 0.601, 0.438, 0.782, 28, 04, 0.601, 0.439, 0.781, 29, 04, 0.601, 0.439, 0.781, 30, 04, 0.601, 0.439, 0.780, 01, 05, 0.601, 0.439, 0.779, 02, 05, 0.601, 0.439, 0.778, 03, 05, 0.601, 0.439, 0.778, 04, 05, 0.601, 0.440, 0.777, 05, 05, 0.601, 0.440, 0.776,
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
06, 05, 0.601, 0.440, 0.775, 07, 05, 0.601, 0.440, 0.775, 08, 05, 0.601, 0.440, 0.774, 09, 05, 0.601, 0.440, 0.773, 10, 05, 0.602, 0.440, 0.772, 11, 05, 0.602, 0.440, 0.772, 12, 05, 0.602, 0.440, 0.771, 13, 05, 0.602, 0.440, 0.770, 14, 05, 0.602, 0.440, 0.770, 15, 05, 0.602, 0.440, 0.769, 16, 05, 0.602, 0.440, 0.768, 17, 05, 0.602, 0.440, 0.768, 18, 05, 0.602, 0.440, 0.767, 19, 05, 0.602, 0.440, 0.767, 20, 05, 0.602, 0.440, 0.766, 21, 05, 0.602, 0.440, 0.766, 22, 05, 0.602, 0.440, 0.765, 23, 05, 0.602, 0.440, 0.765, 24, 05, 0.602, 0.440, 0.764, 25, 05, 0.602, 0.440, 0.764, 26, 05, 0.602, 0.440, 0.764, 27, 05, 0.602, 0.439, 0.763, 28, 05, 0.602, 0.439, 0.763, 29, 05, 0.602, 0.439, 0.763, 30, 05, 0.602, 0.439, 0.762, 31, 05, 0.602, 0.439, 0.762, 01, 06, 0.602, 0.439, 0.762, 02, 06, 0.602, 0.439, 0.762, 03, 06, 0.602, 0.439, 0.762, 04, 06, 0.602, 0.439, 0.762, 05, 06, 0.602, 0.439, 0.762, 06, 06, 0.602, 0.438, 0.761, 07, 06, 0.602, 0.438, 0.761, 08, 06, 0.602, 0.438, 0.761, 09, 06, 0.602, 0.438, 0.761, 10, 06, 0.602, 0.438, 0.761, 11, 06, 0.602, 0.438, 0.762, 12, 06, 0.602, 0.438, 0.762, 13, 06, 0.602, 0.438, 0.762, 14, 06, 0.602, 0.438, 0.762, 15, 06, 0.602, 0.437, 0.762, 16, 06, 0.602, 0.437, 0.762, 17, 06, 0.602, 0.437, 0.762, 18, 06, 0.602, 0.437, 0.762, 19, 06, 0.602, 0.437, 0.763, 20, 06, 0.602, 0.437, 0.763, 21, 06, 0.602, 0.437, 0.763, 22, 06, 0.602, 0.436, 0.763, 23, 06, 0.602, 0.436, 0.763, 24, 06, 0.602, 0.436, 0.764, 25, 06, 0.602, 0.436, 0.764, 26, 06, 0.601, 0.436, 0.764, 27, 06, 0.601, 0.436, 0.764, 28, 06, 0.601, 0.436, 0.764, 29, 06, 0.601, 0.435, 0.765, 30, 06, 0.601, 0.435, 0.765, 01, 07, 0.601, 0.435, 0.765, 02, 07, 0.600, 0.435, 0.765, 03, 07, 0.600, 0.435, 0.765, 04, 07, 0.600, 0.434, 0.766, 05, 07, 0.600, 0.434, 0.766, 06, 07, 0.599, 0.434, 0.766, 07, 07, 0.599, 0.434, 0.766, 08, 07, 0.599, 0.434, 0.766, 09, 07, 0.598, 0.433, 0.766, 10, 07, 0.598, 0.433, 0.766, 11, 07, 0.598, 0.433, 0.766, 12, 07, 0.597, 0.433, 0.766, 13, 07, 0.597, 0.432, 0.767, 14, 07, 0.597, 0.432, 0.767,
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
15, 07, 0.596, 0.432, 0.767, 16, 07, 0.596, 0.432, 0.766, 17, 07, 0.595, 0.431, 0.766, 18, 07, 0.595, 0.431, 0.766, 19, 07, 0.594, 0.431, 0.766, 20, 07, 0.594, 0.430, 0.766, 21, 07, 0.593, 0.430, 0.766, 22, 07, 0.593, 0.430, 0.766, 23, 07, 0.592, 0.429, 0.765, 24, 07, 0.592, 0.429, 0.765, 25, 07, 0.591, 0.428, 0.765, 26, 07, 0.590, 0.428, 0.765, 27, 07, 0.590, 0.428, 0.764, 28, 07, 0.589, 0.427, 0.764, 29, 07, 0.588, 0.427, 0.764, 30, 07, 0.588, 0.426, 0.763, 31, 07, 0.587, 0.426, 0.763, 01, 08, 0.586, 0.425, 0.762, 02, 08, 0.586, 0.425, 0.762, 03, 08, 0.585, 0.424, 0.761, 04, 08, 0.584, 0.424, 0.761, 05, 08, 0.583, 0.423, 0.760, 06, 08, 0.583, 0.423, 0.760, 07, 08, 0.582, 0.422, 0.759, 08, 08, 0.581, 0.421, 0.758, 09, 08, 0.580, 0.421, 0.758, 10, 08, 0.579, 0.420, 0.757, 11, 08, 0.578, 0.420, 0.756, 12, 08, 0.578, 0.419, 0.755, 13, 08, 0.577, 0.418, 0.754, 14, 08, 0.576, 0.418, 0.754, 15, 08, 0.575, 0.417, 0.753, 16, 08, 0.574, 0.416, 0.752, 17, 08, 0.573, 0.415, 0.751, 18, 08, 0.572, 0.415, 0.750, 19, 08, 0.571, 0.414, 0.749, 20, 08, 0.570, 0.413, 0.748, 21, 08, 0.569, 0.413, 0.747, 22, 08, 0.569, 0.412, 0.746, 23, 08, 0.568, 0.411, 0.745, 24, 08, 0.567, 0.410, 0.744, 25, 08, 0.566, 0.409, 0.743, 26, 08, 0.565, 0.409, 0.742, 27, 08, 0.564, 0.408, 0.741, 28, 08, 0.563, 0.407, 0.740, 29, 08, 0.562, 0.406, 0.738, 30, 08, 0.561, 0.405, 0.737, 31, 08, 0.560, 0.405, 0.736, 01, 09, 0.558, 0.404, 0.735, 02, 09, 0.557, 0.403, 0.734, 03, 09, 0.556, 0.402, 0.732, 04, 09, 0.555, 0.401, 0.731, 05, 09, 0.554, 0.401, 0.730, 06, 09, 0.553, 0.400, 0.728, 07, 09, 0.552, 0.399, 0.727, 08, 09, 0.551, 0.398, 0.725, 09, 09, 0.550, 0.397, 0.724, 10, 09, 0.549, 0.396, 0.723, 11, 09, 0.548, 0.396, 0.721, 12, 09, 0.546, 0.395, 0.720, 13, 09, 0.545, 0.394, 0.718, 14, 09, 0.544, 0.393, 0.717, 15, 09, 0.543, 0.392, 0.715, 16, 09, 0.542, 0.391, 0.713, 17, 09, 0.541, 0.391, 0.712, 18, 09, 0.540, 0.390, 0.710, 19, 09, 0.538, 0.389, 0.709, 20, 09, 0.537, 0.388, 0.707, 21, 09, 0.536, 0.388, 0.705, 22, 09, 0.535, 0.387, 0.703,
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
23, 09, 0.533, 0.386, 0.702, 24, 09, 0.532, 0.385, 0.700, 25, 09, 0.531, 0.385, 0.698, 26, 09, 0.530, 0.384, 0.696, 27, 09, 0.528, 0.383, 0.694, 28, 09, 0.527, 0.383, 0.692, 29, 09, 0.526, 0.382, 0.690, 30, 09, 0.525, 0.381, 0.688, 01, 10, 0.523, 0.381, 0.686, 02, 10, 0.522, 0.380, 0.684, 03, 10, 0.521, 0.379, 0.682, 04, 10, 0.519, 0.379, 0.680, 05, 10, 0.518, 0.378, 0.678, 06, 10, 0.517, 0.377, 0.676, 07, 10, 0.515, 0.377, 0.674, 08, 10, 0.514, 0.376, 0.671, 09, 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, 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, 01, 11, 0.478, 0.368, 0.607, 02, 11, 0.476, 0.367, 0.604, 03, 11, 0.475, 0.367, 0.601, 04, 11, 0.473, 0.367, 0.598, 05, 11, 0.471, 0.367, 0.595, 06, 11, 0.470, 0.367, 0.592, 07, 11, 0.468, 0.367, 0.589, 08, 11, 0.467, 0.366, 0.586, 09, 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, 01, 12, 0.437, 0.365, 0.521,
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
02, 12, 0.436, 0.365, 0.519, 03, 12, 0.435, 0.365, 0.517, 04, 12, 0.434, 0.365, 0.515, 05, 12, 0.434, 0.365, 0.513, 06, 12, 0.433, 0.365, 0.511, 07, 12, 0.432, 0.365, 0.509, 08, 12, 0.431, 0.365, 0.507, 09, 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")) 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
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
} } ##Precipitation_extrapolation__________________________________________________________________ ##Initialisation if (identical(ZInputs, HypsoData[51]) & NLayers == 1) { LayerPrecip <- list(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 LayerPrecip_mat <- sapply(1:NLayers, function(iLayer) { ##If_layer_elevation_smaller_than_Zthreshold if (ZLayers[iLayer] <= Zthreshold) { prcp <- 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) { prcp <- as.double(Precip * exp(TabGradP * (Zthreshold - ZInputs))) ##If_inputs_median_elevation_greater_then_Zthreshold } else { prcp <- as.double(Precip) } } return(prcp) }) if (PrecipScale) { LayerPrecip_mat <- LayerPrecip_mat / rowMeans(LayerPrecip_mat) * Precip LayerPrecip_mat[is.nan(LayerPrecip_mat)] <- 0 } LayerPrecip <- as.list(as.data.frame(LayerPrecip_mat)) } ##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 <- as.data.frame(GradT_Valery2010()) iday <- match(format(DatesR, format = "%d%m"), sprintf("%02i%02i", GradT[, "day"], GradT[, "month"])) TabGradT <- GradT[iday, c("grad_Tmean", "grad_Tmin", "grad_Tmax")] ##Extrapolation ##On_each_elevation_layer... for (iLayer in 1:NLayers) { LayerTempMean[[iLayer]] <- as.double(TempMean + (ZInputs - ZLayers[iLayer]) * abs(TabGradT[, "grad_Tmean"]) / 100) if (!is.null(TempMin) & !is.null(TempMax)) { LayerTempMin[[iLayer]] <- as.double(TempMin + (ZInputs - ZLayers[iLayer]) * abs(TabGradT[, "grad_Tmin"]) / 100) LayerTempMax[[iLayer]] <- as.double(TempMax + (ZInputs - ZLayers[iLayer]) * abs(TabGradT[, "grad_Tmax"]) / 100) } } }
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
##Solid_Fraction_for_each_elevation_layer______________________________________________________ LayerFracSolidPrecip <- list() ##Thresold_of_inputs_median_elevation Zthreshold <- 1500 ##Option Option <- "USACE" if (!is.na(ZInputs)) { if (ZInputs < Zthreshold & !is.null(TempMin) & !is.null(TempMax)) { Option <- "Hydrotel" } } ##On_each_elevation_layer... for (iLayer in 1:NLayers) { ##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) } namesLayer <- sprintf("L%i", seq_along(LayerPrecip)) names(LayerPrecip) <- namesLayer names(LayerTempMean) <- namesLayer if (!is.null(TempMin) & !is.null(TempMax)) { names(LayerTempMin) <- namesLayer names(LayerTempMax) <- namesLayer } names(LayerFracSolidPrecip) <- namesLayer ##END__________________________________________________________________________________________ return(list(LayerPrecip = LayerPrecip, LayerTempMean = LayerTempMean, LayerTempMin = LayerTempMin, LayerTempMax = LayerTempMax, LayerFracSolidPrecip = LayerFracSolidPrecip, ZLayers = ZLayers)) }