DevelopmentActivities/MergeHydro/Martial_notes_on_merge: correction_neige

File correction_neige, 1.6 KB (added by mmaipsl, 12 years ago)

correction proposée sur le bug de la neige

Line 
1 
2
3SUBROUTINE 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
30snow_h(:)=snow(:)/sn_dens
31
32do 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
55enddo
56END SUBROUTINE thermosoil_humlev