1 | |
---|
2 | |
---|
3 | SUBROUTINE thermosoil_humlev(kjpindex, shumdiag, snow) |
---|
4 | |
---|
5 | ! input scalar |
---|
6 | INTEGER(i_std), INTENT(in) :: kjpindex !! Domain size |
---|
7 | ! input fields |
---|
8 | !Isa |
---|
9 | REAL(r_std),DIMENSION (kjpindex), INTENT (in) :: snow |
---|
10 | REAL(r_std),DIMENSION (kjpindex,nbdl), INTENT (in) :: shumdiag !! Diagnostoc profile |
---|
11 | ! |
---|
12 | ! modified fields |
---|
13 | ! |
---|
14 | ! output fields |
---|
15 | |
---|
16 | ! |
---|
17 | ! local variable |
---|
18 | ! |
---|
19 | INTEGER(i_std) :: ji, jd, jg |
---|
20 | REAL(r_std) :: lev_diag, prev_diag, lev_prog, prev_prog |
---|
21 | REAL(r_std), SAVE, ALLOCATABLE, DIMENSION(:,:) :: intfactw |
---|
22 | !Isa |
---|
23 | REAL(r_std), DIMENSION(kjpindex) :: snow_h |
---|
24 | ! |
---|
25 | ! |
---|
26 | IF ( .NOT. ALLOCATED(intfactw)) THEN |
---|
27 | ALLOCATE(intfactw(ngrnd, nbdl)) |
---|
28 | ENDIF |
---|
29 | !Isa |
---|
30 | snow_h(:)=snow(:)/sn_dens |
---|
31 | |
---|
32 | do ji=1,kjpindex |
---|
33 | prev_diag = 0.0 |
---|
34 | DO jd = 1, ngrnd |
---|
35 | lev_diag = prev_diag + dz2(jd) |
---|
36 | prev_prog = 0.0+snow_h(ji) |
---|
37 | DO jg = 1, nbdl |
---|
38 | IF ( jg == nbdl .AND. diaglev(jg)+snow_h(ji) < lev_diag ) THEN |
---|
39 | !! Just make sure we cover the deepest layers |
---|
40 | lev_prog = lev_diag+snow_h(ji) |
---|
41 | ELSE |
---|
42 | lev_prog = diaglev(jg)+snow_h(ji) |
---|
43 | ENDIF |
---|
44 | intfactw(jd,jg) = MAX(MIN(lev_diag,lev_prog)-MAX(prev_diag, prev_prog), 0.0)/(lev_diag-prev_diag) |
---|
45 | prev_prog = lev_prog |
---|
46 | ENDDO |
---|
47 | prev_diag = lev_diag |
---|
48 | ENDDO |
---|
49 | |
---|
50 | DO jd = 1, nbdl |
---|
51 | DO jg = 1, ngrnd |
---|
52 | wetdiag(ji,jg) = wetdiag(ji,jg) + shumdiag(jd)*intfactw(jg,jd) |
---|
53 | ENDDO |
---|
54 | ENDDO |
---|
55 | enddo |
---|
56 | END SUBROUTINE thermosoil_humlev |
---|