| 1 | ! |
|---|
| 2 | ! $Header$ |
|---|
| 3 | ! |
|---|
| 4 | MODULE albsno_mod |
|---|
| 5 | |
|---|
| 6 | CONTAINS |
|---|
| 7 | |
|---|
| 8 | SUBROUTINE albsno(klon, knon, dtime, agesno, alb_neig_grid, precip_snow) |
|---|
| 9 | !$gpum horizontal knon klon |
|---|
| 10 | USE clesphys_mod_h |
|---|
| 11 | IMPLICIT NONE |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | ! Input arguments |
|---|
| 15 | !**************************************************************************************** |
|---|
| 16 | INTEGER, INTENT(IN) :: klon, knon |
|---|
| 17 | REAL, INTENT(IN) :: dtime |
|---|
| 18 | REAL, DIMENSION(klon), INTENT(IN) :: precip_snow |
|---|
| 19 | |
|---|
| 20 | ! In/Output arguments |
|---|
| 21 | !**************************************************************************************** |
|---|
| 22 | REAL, DIMENSION(klon), INTENT(INOUT) :: agesno |
|---|
| 23 | |
|---|
| 24 | ! Output arguments |
|---|
| 25 | !**************************************************************************************** |
|---|
| 26 | REAL, DIMENSION(klon), INTENT(OUT) :: alb_neig_grid |
|---|
| 27 | |
|---|
| 28 | ! Local variables |
|---|
| 29 | !**************************************************************************************** |
|---|
| 30 | INTEGER :: i, nv |
|---|
| 31 | INTEGER, PARAMETER :: nvm = 8 |
|---|
| 32 | REAL :: as |
|---|
| 33 | REAL, DIMENSION(klon,nvm) :: veget |
|---|
| 34 | REAL, DIMENSION(nvm) :: init |
|---|
| 35 | REAL, DIMENSION(nvm) :: decay |
|---|
| 36 | |
|---|
| 37 | !**************************************************************************************** |
|---|
| 38 | init = (/0.55, 0.14, 0.18, 0.29, 0.15, 0.15, 0.14, 0./) |
|---|
| 39 | decay = (/0.30, 0.67, 0.63, 0.45, 0.40, 0.14, 0.06, 1./) |
|---|
| 40 | |
|---|
| 41 | if (albsno0>=0.) then |
|---|
| 42 | init(:)=albsno0 |
|---|
| 43 | decay(:)=0. |
|---|
| 44 | endif |
|---|
| 45 | |
|---|
| 46 | veget = 0. |
|---|
| 47 | veget(:,1) = 1. ! desert partout |
|---|
| 48 | DO i = 1, knon |
|---|
| 49 | alb_neig_grid(i) = 0.0 |
|---|
| 50 | ENDDO |
|---|
| 51 | DO nv = 1, nvm |
|---|
| 52 | DO i = 1, knon |
|---|
| 53 | as = init(nv)+decay(nv)*EXP(-agesno(i)/5.) |
|---|
| 54 | alb_neig_grid(i) = alb_neig_grid(i) + veget(i,nv)*as |
|---|
| 55 | ENDDO |
|---|
| 56 | ENDDO |
|---|
| 57 | |
|---|
| 58 | |
|---|
| 59 | ! modilation en fonction de l'age de la neige |
|---|
| 60 | DO i = 1, knon |
|---|
| 61 | agesno(i) = (agesno(i) + (1.-agesno(i)/50.)*dtime/86400.)& |
|---|
| 62 | & * EXP(-1.*MAX(0.0,precip_snow(i))*dtime/0.3) |
|---|
| 63 | agesno(i) = MAX(agesno(i),0.0) |
|---|
| 64 | ENDDO |
|---|
| 65 | |
|---|
| 66 | END SUBROUTINE albsno |
|---|
| 67 | |
|---|
| 68 | END MODULE albsno_mod |
|---|