| Directory: | ./ |
|---|---|
| File: | phys/fonte_neige_mod.f90 |
| Date: | 2022-01-11 19:19:34 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 98 | 115 | 85.2% |
| Branches: | 126 | 190 | 66.3% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | ! | ||
| 2 | ! $Header$ | ||
| 3 | ! | ||
| 4 | MODULE fonte_neige_mod | ||
| 5 | ! | ||
| 6 | ! This module will treat the process of snow, melting, accumulating, calving, in | ||
| 7 | ! case of simplified soil model. | ||
| 8 | ! | ||
| 9 | !**************************************************************************************** | ||
| 10 | USE dimphy, ONLY : klon | ||
| 11 | USE indice_sol_mod | ||
| 12 | |||
| 13 | IMPLICIT NONE | ||
| 14 | SAVE | ||
| 15 | |||
| 16 | ! run_off_ter and run_off_lic are the runoff at the compressed grid knon for | ||
| 17 | ! land and land-ice respectively | ||
| 18 | ! Note: run_off_lic is used in mod_landice and therfore not private | ||
| 19 | REAL, ALLOCATABLE, DIMENSION(:), PRIVATE :: run_off_ter | ||
| 20 | !$OMP THREADPRIVATE(run_off_ter) | ||
| 21 | REAL, ALLOCATABLE, DIMENSION(:) :: run_off_lic | ||
| 22 | !$OMP THREADPRIVATE(run_off_lic) | ||
| 23 | |||
| 24 | ! run_off_lic_0 is the runoff at land-ice a time-step earlier, on the global 1D array grid | ||
| 25 | REAL, ALLOCATABLE, DIMENSION(:), PRIVATE :: run_off_lic_0 | ||
| 26 | !$OMP THREADPRIVATE(run_off_lic_0) | ||
| 27 | |||
| 28 | REAL, PRIVATE :: tau_calv | ||
| 29 | !$OMP THREADPRIVATE(tau_calv) | ||
| 30 | REAL, ALLOCATABLE, DIMENSION(:,:) :: ffonte_global | ||
| 31 | !$OMP THREADPRIVATE(ffonte_global) | ||
| 32 | REAL, ALLOCATABLE, DIMENSION(:,:) :: fqfonte_global | ||
| 33 | !$OMP THREADPRIVATE(fqfonte_global) | ||
| 34 | REAL, ALLOCATABLE, DIMENSION(:,:) :: fqcalving_global | ||
| 35 | !$OMP THREADPRIVATE(fqcalving_global) | ||
| 36 | REAL, ALLOCATABLE, DIMENSION(:) :: runofflic_global | ||
| 37 | !$OMP THREADPRIVATE(runofflic_global) | ||
| 38 | |||
| 39 | CONTAINS | ||
| 40 | ! | ||
| 41 | !**************************************************************************************** | ||
| 42 | ! | ||
| 43 | 1 | SUBROUTINE fonte_neige_init(restart_runoff) | |
| 44 | |||
| 45 | ! This subroutine allocates and initialize variables in the module. | ||
| 46 | ! The variable run_off_lic_0 is initialized to the field read from | ||
| 47 | ! restart file. The other variables are initialized to zero. | ||
| 48 | ! | ||
| 49 | !**************************************************************************************** | ||
| 50 | ! Input argument | ||
| 51 | REAL, DIMENSION(klon), INTENT(IN) :: restart_runoff | ||
| 52 | |||
| 53 | ! Local variables | ||
| 54 | INTEGER :: error | ||
| 55 | CHARACTER (len = 80) :: abort_message | ||
| 56 | CHARACTER (len = 20) :: modname = 'fonte_neige_init' | ||
| 57 | |||
| 58 | |||
| 59 | !**************************************************************************************** | ||
| 60 | ! Allocate run-off at landice and initilize with field read from restart | ||
| 61 | ! | ||
| 62 | !**************************************************************************************** | ||
| 63 | |||
| 64 |
4/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | ALLOCATE(run_off_lic_0(klon), stat = error) |
| 65 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (error /= 0) THEN |
| 66 | ✗ | abort_message='Pb allocation run_off_lic' | |
| 67 | ✗ | CALL abort_physic(modname,abort_message,1) | |
| 68 | ENDIF | ||
| 69 |
2/2✓ Branch 0 taken 994 times.
✓ Branch 1 taken 1 times.
|
995 | run_off_lic_0(:) = restart_runoff(:) |
| 70 | |||
| 71 | !**************************************************************************************** | ||
| 72 | ! Allocate other variables and initilize to zero | ||
| 73 | ! | ||
| 74 | !**************************************************************************************** | ||
| 75 |
4/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | ALLOCATE(run_off_ter(klon), stat = error) |
| 76 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (error /= 0) THEN |
| 77 | ✗ | abort_message='Pb allocation run_off_ter' | |
| 78 | ✗ | CALL abort_physic(modname,abort_message,1) | |
| 79 | ENDIF | ||
| 80 |
2/2✓ Branch 0 taken 994 times.
✓ Branch 1 taken 1 times.
|
995 | run_off_ter(:) = 0. |
| 81 | |||
| 82 |
4/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | ALLOCATE(run_off_lic(klon), stat = error) |
| 83 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (error /= 0) THEN |
| 84 | ✗ | abort_message='Pb allocation run_off_lic' | |
| 85 | ✗ | CALL abort_physic(modname,abort_message,1) | |
| 86 | ENDIF | ||
| 87 |
2/2✓ Branch 0 taken 994 times.
✓ Branch 1 taken 1 times.
|
995 | run_off_lic(:) = 0. |
| 88 | |||
| 89 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
|
1 | ALLOCATE(ffonte_global(klon,nbsrf)) |
| 90 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (error /= 0) THEN |
| 91 | ✗ | abort_message='Pb allocation ffonte_global' | |
| 92 | ✗ | CALL abort_physic(modname,abort_message,1) | |
| 93 | ENDIF | ||
| 94 |
4/4✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 3976 times.
✓ Branch 3 taken 4 times.
|
3981 | ffonte_global(:,:) = 0.0 |
| 95 | |||
| 96 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
|
1 | ALLOCATE(fqfonte_global(klon,nbsrf)) |
| 97 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (error /= 0) THEN |
| 98 | ✗ | abort_message='Pb allocation fqfonte_global' | |
| 99 | ✗ | CALL abort_physic(modname,abort_message,1) | |
| 100 | ENDIF | ||
| 101 |
4/4✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 3976 times.
✓ Branch 3 taken 4 times.
|
3981 | fqfonte_global(:,:) = 0.0 |
| 102 | |||
| 103 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
|
1 | ALLOCATE(fqcalving_global(klon,nbsrf)) |
| 104 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (error /= 0) THEN |
| 105 | ✗ | abort_message='Pb allocation fqcalving_global' | |
| 106 | ✗ | CALL abort_physic(modname,abort_message,1) | |
| 107 | ENDIF | ||
| 108 |
4/4✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 3976 times.
✓ Branch 3 taken 4 times.
|
3981 | fqcalving_global(:,:) = 0.0 |
| 109 | |||
| 110 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
|
1 | ALLOCATE(runofflic_global(klon)) |
| 111 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | IF (error /= 0) THEN |
| 112 | ✗ | abort_message='Pb allocation runofflic_global' | |
| 113 | ✗ | CALL abort_physic(modname,abort_message,1) | |
| 114 | ENDIF | ||
| 115 |
2/2✓ Branch 0 taken 994 times.
✓ Branch 1 taken 1 times.
|
995 | runofflic_global(:) = 0.0 |
| 116 | |||
| 117 | !**************************************************************************************** | ||
| 118 | ! Read tau_calv | ||
| 119 | ! | ||
| 120 | !**************************************************************************************** | ||
| 121 | 1 | CALL conf_interface(tau_calv) | |
| 122 | |||
| 123 | |||
| 124 | 1 | END SUBROUTINE fonte_neige_init | |
| 125 | ! | ||
| 126 | !**************************************************************************************** | ||
| 127 | ! | ||
| 128 | 1440 | SUBROUTINE fonte_neige( knon, nisurf, knindex, dtime, & | |
| 129 | 1440 | tsurf, precip_rain, precip_snow, & | |
| 130 | snow, qsol, tsurf_new, evap) | ||
| 131 | |||
| 132 | USE indice_sol_mod | ||
| 133 | |||
| 134 | ! Routine de traitement de la fonte de la neige dans le cas du traitement | ||
| 135 | ! de sol simplifie! | ||
| 136 | ! LF 03/2001 | ||
| 137 | ! input: | ||
| 138 | ! knon nombre de points a traiter | ||
| 139 | ! nisurf surface a traiter | ||
| 140 | ! knindex index des mailles valables pour surface a traiter | ||
| 141 | ! dtime | ||
| 142 | ! tsurf temperature de surface | ||
| 143 | ! precip_rain precipitations liquides | ||
| 144 | ! precip_snow precipitations solides | ||
| 145 | ! | ||
| 146 | ! input/output: | ||
| 147 | ! snow champs hauteur de neige | ||
| 148 | ! qsol hauteur d'eau contenu dans le sol | ||
| 149 | ! tsurf_new temperature au sol | ||
| 150 | ! evap | ||
| 151 | ! | ||
| 152 | INCLUDE "YOETHF.h" | ||
| 153 | INCLUDE "YOMCST.h" | ||
| 154 | INCLUDE "FCTTRE.h" | ||
| 155 | INCLUDE "clesphys.h" | ||
| 156 | |||
| 157 | ! Input variables | ||
| 158 | !**************************************************************************************** | ||
| 159 | INTEGER, INTENT(IN) :: knon | ||
| 160 | INTEGER, INTENT(IN) :: nisurf | ||
| 161 | INTEGER, DIMENSION(klon), INTENT(IN) :: knindex | ||
| 162 | REAL , INTENT(IN) :: dtime | ||
| 163 | REAL, DIMENSION(klon), INTENT(IN) :: tsurf | ||
| 164 | REAL, DIMENSION(klon), INTENT(IN) :: precip_rain | ||
| 165 | REAL, DIMENSION(klon), INTENT(IN) :: precip_snow | ||
| 166 | |||
| 167 | ! Input/Output variables | ||
| 168 | !**************************************************************************************** | ||
| 169 | |||
| 170 | REAL, DIMENSION(klon), INTENT(INOUT) :: snow | ||
| 171 | REAL, DIMENSION(klon), INTENT(INOUT) :: qsol | ||
| 172 | REAL, DIMENSION(klon), INTENT(INOUT) :: tsurf_new | ||
| 173 | REAL, DIMENSION(klon), INTENT(INOUT) :: evap | ||
| 174 | |||
| 175 | ! Local variables | ||
| 176 | !**************************************************************************************** | ||
| 177 | |||
| 178 | INTEGER :: i, j | ||
| 179 | REAL :: fq_fonte | ||
| 180 | REAL :: coeff_rel | ||
| 181 | REAL, PARAMETER :: snow_max=3000. | ||
| 182 | REAL, PARAMETER :: max_eau_sol = 150.0 | ||
| 183 | !! PB temporaire en attendant mieux pour le modele de neige | ||
| 184 | ! REAL, parameter :: chasno = RLMLT/(2.3867E+06*0.15) | ||
| 185 | REAL, PARAMETER :: chasno = 3.334E+05/(2.3867E+06*0.15) | ||
| 186 | !IM cf JLD/ GKtest | ||
| 187 | REAL, PARAMETER :: chaice = 3.334E+05/(2.3867E+06*0.15) | ||
| 188 | ! fin GKtest | ||
| 189 | 2880 | REAL, DIMENSION(klon) :: ffonte | |
| 190 | 2880 | REAL, DIMENSION(klon) :: fqcalving, fqfonte | |
| 191 | 2880 | REAL, DIMENSION(klon) :: d_ts | |
| 192 | 2880 | REAL, DIMENSION(klon) :: bil_eau_s, snow_evap | |
| 193 | |||
| 194 | LOGICAL :: neige_fond | ||
| 195 | |||
| 196 | !**************************************************************************************** | ||
| 197 | ! Start calculation | ||
| 198 | ! - Initialization | ||
| 199 | ! | ||
| 200 | !**************************************************************************************** | ||
| 201 | 1440 | coeff_rel = dtime/(tau_calv * rday) | |
| 202 | |||
| 203 |
2/2✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
|
1432800 | bil_eau_s(:) = 0. |
| 204 | |||
| 205 | !**************************************************************************************** | ||
| 206 | ! - Increment snow due to precipitation and evaporation | ||
| 207 | ! - Calculate the water balance due to precipitation and evaporation (bil_eau_s) | ||
| 208 | ! | ||
| 209 | !**************************************************************************************** | ||
| 210 |
4/4✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
✓ Branch 2 taken 287051 times.
✓ Branch 3 taken 1144309 times.
|
1432800 | WHERE (precip_snow > 0.) |
| 211 | snow = snow + (precip_snow * dtime) | ||
| 212 | END WHERE | ||
| 213 | |||
| 214 |
2/2✓ Branch 0 taken 1431360 times.
✓ Branch 1 taken 1440 times.
|
1432800 | snow_evap = 0. |
| 215 | |||
| 216 | 1440 | IF (.NOT. ok_lic_cond) THEN | |
| 217 | !---only positive evaporation has an impact on snow | ||
| 218 | !---note that this could create a bit of water | ||
| 219 | !---this was the default until CMIP6 | ||
| 220 | ✗ | WHERE (evap > 0. ) | |
| 221 | snow_evap = MIN (snow / dtime, evap) !---one cannot evaporate more than the amount of snow | ||
| 222 | snow = snow - snow_evap * dtime !---snow that remains on the ground | ||
| 223 | snow = MAX(0.0, snow) !---just in case | ||
| 224 | END WHERE | ||
| 225 | ELSE | ||
| 226 | !--now considers both positive and negative evaporation in the budget of snow | ||
| 227 |
2/2✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
|
1432800 | snow_evap = MIN (snow / dtime, evap) !---one cannot evaporate more than the amount of snow |
| 228 |
2/2✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
|
1432800 | snow = snow - snow_evap * dtime !---snow that remains or deposits on the ground |
| 229 |
2/2✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
|
1432800 | snow = MAX(0.0, snow) !---just in case |
| 230 | ENDIF | ||
| 231 | |||
| 232 |
2/2✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
|
1432800 | bil_eau_s(:) = (precip_rain(:) * dtime) - (evap(:) - snow_evap(:)) * dtime |
| 233 | |||
| 234 | |||
| 235 | !**************************************************************************************** | ||
| 236 | ! - Calculate melting snow | ||
| 237 | ! - Calculate calving and decrement snow, if there are to much snow | ||
| 238 | ! - Update temperature at surface | ||
| 239 | ! | ||
| 240 | !**************************************************************************************** | ||
| 241 | |||
| 242 |
2/2✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
|
1432800 | ffonte(:) = 0.0 |
| 243 |
2/2✓ Branch 0 taken 1440 times.
✓ Branch 1 taken 1431360 times.
|
1432800 | fqcalving(:) = 0.0 |
| 244 |
2/2✓ Branch 0 taken 1431360 times.
✓ Branch 1 taken 1440 times.
|
1432800 | fqfonte(:) = 0.0 |
| 245 | |||
| 246 |
2/2✓ Branch 0 taken 425475 times.
✓ Branch 1 taken 1440 times.
|
426915 | DO i = 1, knon |
| 247 | ! Y'a-t-il fonte de neige? | ||
| 248 |
6/6✓ Branch 0 taken 190163 times.
✓ Branch 1 taken 235312 times.
✓ Branch 2 taken 174984 times.
✓ Branch 3 taken 15179 times.
✓ Branch 4 taken 14683 times.
✓ Branch 5 taken 160301 times.
|
425475 | neige_fond = (snow(i)>epsfra .OR. nisurf==is_sic .OR. nisurf==is_lic) .AND. tsurf_new(i)>=RTT |
| 249 | IF (neige_fond) THEN | ||
| 250 | 45382 | fq_fonte = MIN( MAX((tsurf_new(i)-RTT )/chasno,0.0),snow(i)) | |
| 251 | 45382 | ffonte(i) = fq_fonte * RLMLT/dtime | |
| 252 | 45382 | fqfonte(i) = fq_fonte/dtime | |
| 253 | 45382 | snow(i) = MAX(0., snow(i) - fq_fonte) | |
| 254 | 45382 | bil_eau_s(i) = bil_eau_s(i) + fq_fonte | |
| 255 | 45382 | tsurf_new(i) = tsurf_new(i) - fq_fonte * chasno | |
| 256 | |||
| 257 | !IM cf JLD OK | ||
| 258 | !IM cf JLD/ GKtest fonte aussi pour la glace | ||
| 259 | 45382 | IF (nisurf == is_sic .OR. nisurf == is_lic ) THEN | |
| 260 | 23968 | fq_fonte = MAX((tsurf_new(i)-RTT )/chaice,0.0) | |
| 261 | 23968 | ffonte(i) = ffonte(i) + fq_fonte * RLMLT/dtime | |
| 262 | 23968 | IF ( ok_lic_melt ) THEN | |
| 263 | ✗ | fqfonte(i) = fqfonte(i) + fq_fonte/dtime | |
| 264 | ✗ | bil_eau_s(i) = bil_eau_s(i) + fq_fonte | |
| 265 | ENDIF | ||
| 266 | 23968 | tsurf_new(i) = RTT | |
| 267 | ENDIF | ||
| 268 | 45382 | d_ts(i) = tsurf_new(i) - tsurf(i) | |
| 269 | ENDIF | ||
| 270 | |||
| 271 | ! s'il y a une hauteur trop importante de neige, elle est ecretee | ||
| 272 | 425475 | fqcalving(i) = MAX(0., snow(i) - snow_max)/dtime | |
| 273 | 426915 | snow(i)=MIN(snow(i),snow_max) | |
| 274 | ENDDO | ||
| 275 | |||
| 276 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 960 times.
|
1440 | IF (nisurf == is_ter) THEN |
| 277 |
2/2✓ Branch 0 taken 247680 times.
✓ Branch 1 taken 480 times.
|
248160 | DO i = 1, knon |
| 278 | 247680 | qsol(i) = qsol(i) + bil_eau_s(i) | |
| 279 | 247680 | run_off_ter(i) = run_off_ter(i) + MAX(qsol(i) - max_eau_sol, 0.0) | |
| 280 | 248160 | qsol(i) = MIN(qsol(i), max_eau_sol) | |
| 281 | ENDDO | ||
| 282 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 480 times.
|
960 | ELSE IF (nisurf == is_lic) THEN |
| 283 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 72960 times.
|
73440 | DO i = 1, knon |
| 284 | 72960 | j = knindex(i) | |
| 285 | !--temporal filtering | ||
| 286 | 72960 | run_off_lic(i) = coeff_rel*fqcalving(i) + (1.-coeff_rel)*run_off_lic_0(j) | |
| 287 | 72960 | run_off_lic_0(j) = run_off_lic(i) | |
| 288 | !--add melting snow and liquid precip to runoff of ice cap | ||
| 289 | 73440 | run_off_lic(i) = run_off_lic(i) + fqfonte(i) + precip_rain(i) | |
| 290 | ENDDO | ||
| 291 | ENDIF | ||
| 292 | |||
| 293 | !**************************************************************************************** | ||
| 294 | ! Save ffonte, fqfonte and fqcalving in global arrays for each | ||
| 295 | ! sub-surface separately | ||
| 296 | ! | ||
| 297 | !**************************************************************************************** | ||
| 298 |
2/2✓ Branch 0 taken 425475 times.
✓ Branch 1 taken 1440 times.
|
426915 | DO i = 1, knon |
| 299 | 425475 | ffonte_global(knindex(i),nisurf) = ffonte(i) | |
| 300 | 425475 | fqfonte_global(knindex(i),nisurf) = fqfonte(i) | |
| 301 | 426915 | fqcalving_global(knindex(i),nisurf) = fqcalving(i) | |
| 302 | ENDDO | ||
| 303 | |||
| 304 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 960 times.
|
1440 | IF (nisurf == is_lic) THEN |
| 305 |
2/2✓ Branch 0 taken 72960 times.
✓ Branch 1 taken 480 times.
|
73440 | DO i = 1, knon |
| 306 | 73440 | runofflic_global(knindex(i)) = run_off_lic(i) | |
| 307 | ENDDO | ||
| 308 | ENDIF | ||
| 309 | |||
| 310 | 1440 | END SUBROUTINE fonte_neige | |
| 311 | ! | ||
| 312 | !**************************************************************************************** | ||
| 313 | ! | ||
| 314 | 1 | SUBROUTINE fonte_neige_final(restart_runoff) | |
| 315 | ! | ||
| 316 | ! This subroutine returns run_off_lic_0 for later writing to restart file. | ||
| 317 | ! | ||
| 318 | !**************************************************************************************** | ||
| 319 | REAL, DIMENSION(klon), INTENT(OUT) :: restart_runoff | ||
| 320 | |||
| 321 | !**************************************************************************************** | ||
| 322 | ! Set the output variables | ||
| 323 |
2/2✓ Branch 0 taken 994 times.
✓ Branch 1 taken 1 times.
|
995 | restart_runoff(:) = run_off_lic_0(:) |
| 324 | |||
| 325 | ! Deallocation of all varaibles in the module | ||
| 326 | ! DEALLOCATE(run_off_lic_0, run_off_ter, run_off_lic, ffonte_global, & | ||
| 327 | ! fqfonte_global, fqcalving_global) | ||
| 328 | |||
| 329 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (ALLOCATED(run_off_lic_0)) DEALLOCATE(run_off_lic_0) |
| 330 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (ALLOCATED(run_off_ter)) DEALLOCATE(run_off_ter) |
| 331 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (ALLOCATED(run_off_lic)) DEALLOCATE(run_off_lic) |
| 332 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (ALLOCATED(ffonte_global)) DEALLOCATE(ffonte_global) |
| 333 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (ALLOCATED(fqfonte_global)) DEALLOCATE(fqfonte_global) |
| 334 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (ALLOCATED(fqcalving_global)) DEALLOCATE(fqcalving_global) |
| 335 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | IF (ALLOCATED(runofflic_global)) DEALLOCATE(runofflic_global) |
| 336 | |||
| 337 |
6/8✓ Branch 0 taken 1440 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 45382 times.
✓ Branch 3 taken 219792 times.
✓ Branch 4 taken 23968 times.
✓ Branch 5 taken 21414 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 23968 times.
|
268054 | END SUBROUTINE fonte_neige_final |
| 338 | ! | ||
| 339 | !**************************************************************************************** | ||
| 340 | ! | ||
| 341 | 480 | SUBROUTINE fonte_neige_get_vars(pctsrf, fqcalving_out, & | |
| 342 | 480 | fqfonte_out, ffonte_out, run_off_lic_out) | |
| 343 | |||
| 344 | |||
| 345 | ! Cumulate ffonte, fqfonte and fqcalving respectively for | ||
| 346 | ! all type of surfaces according to their fraction. | ||
| 347 | ! | ||
| 348 | ! This routine is called from physiq.F before histwrite. | ||
| 349 | !**************************************************************************************** | ||
| 350 | |||
| 351 | USE indice_sol_mod | ||
| 352 | |||
| 353 | REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf | ||
| 354 | |||
| 355 | REAL, DIMENSION(klon), INTENT(OUT) :: fqcalving_out | ||
| 356 | REAL, DIMENSION(klon), INTENT(OUT) :: fqfonte_out | ||
| 357 | REAL, DIMENSION(klon), INTENT(OUT) :: ffonte_out | ||
| 358 | REAL, DIMENSION(klon), INTENT(OUT) :: run_off_lic_out | ||
| 359 | |||
| 360 | INTEGER :: nisurf | ||
| 361 | !**************************************************************************************** | ||
| 362 | |||
| 363 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | ffonte_out(:) = 0.0 |
| 364 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | fqfonte_out(:) = 0.0 |
| 365 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 477120 times.
|
477600 | fqcalving_out(:) = 0.0 |
| 366 | |||
| 367 |
2/2✓ Branch 0 taken 1920 times.
✓ Branch 1 taken 480 times.
|
2400 | DO nisurf = 1, nbsrf |
| 368 |
2/2✓ Branch 0 taken 1908480 times.
✓ Branch 1 taken 1920 times.
|
1910400 | ffonte_out(:) = ffonte_out(:) + ffonte_global(:,nisurf)*pctsrf(:,nisurf) |
| 369 |
2/2✓ Branch 0 taken 1908480 times.
✓ Branch 1 taken 1920 times.
|
1910400 | fqfonte_out(:) = fqfonte_out(:) + fqfonte_global(:,nisurf)*pctsrf(:,nisurf) |
| 370 |
2/2✓ Branch 0 taken 1908480 times.
✓ Branch 1 taken 1920 times.
|
1910880 | fqcalving_out(:) = fqcalving_out(:) + fqcalving_global(:,nisurf)*pctsrf(:,nisurf) |
| 371 | ENDDO | ||
| 372 | |||
| 373 |
2/2✓ Branch 0 taken 477120 times.
✓ Branch 1 taken 480 times.
|
477600 | run_off_lic_out(:)=runofflic_global(:) |
| 374 | |||
| 375 | 480 | END SUBROUTINE fonte_neige_get_vars | |
| 376 | ! | ||
| 377 | !**************************************************************************************** | ||
| 378 | ! | ||
| 379 | END MODULE fonte_neige_mod | ||
| 380 |