DevelopmentActivities/MergeHydro/Martial_notes_on_merge: correction_indices

File correction_indices, 2.0 KB (added by mmaipsl, 9 years ago)

correction proposée sur le bug de shumdiag

Line 
1!*************** dans hydrol_var_init:
2
3CALL calcule_frac_hydro_diag
4
5    DO jst=1,nstm
6       DO jd=1,nbdl
7          DO ji=1,kjpindex
8                DO jsl = 1, nslm
9                  shumdiag(ji,jd)= shumdiag(ji,jd) + soil_wet(ji,jsl,jst) *frac_hydro_diag(jsl,jd)* &
10                  & ((mcs(njsc(ji))-mcw(njsc(ji)))/(mcf(njsc(ji))-mcw(njsc(ji)))) * &
11                  & soiltile(ji,jst)
12                ENDDO
13                shumdiag(ji,jd) = MAX(MIN(shumdiag(ji,jd), un), zero)
14          ENDDO
15       ENDDO
16   ENDDO
17
18!************* à la place de :
19 
20!     DO jst=1,nstm
21!        DO jsl=1,nbdl
22!           DO ji = 1, kjpindex
23!              shumdiag(ji,jsl)= shumdiag(ji,jsl) + soil_wet(ji,jsl,jst) * &
24!                   & ((mcs(njsc(ji))-mcw(njsc(ji)))/(mcf(njsc(ji))-mcw(njsc(ji)))) * &
25!                   & soiltile(ji,jst)
26!              shumdiag(ji,jsl) = MAX(MIN(shumdiag(ji,jsl), un), zero)
27!           END DO
28!        END DO
29!     END DO
30
31!************* avec:
32!introduction de frac_hydro_diag comme variable de module,
33  REAL(r_std), ALLOCATABLE, SAVE, DIMENSION (:,:)    :: frac_hydro_diag
34! et allocation comme il se doit
35    ALLOCATE (frac_hydro_diag(nslm, nbdl),stat=ier)
36    IF (ier.NE.0) THEN
37       WRITE (numout,*) ' error in frac_hydro_diag allocation. We stop'
38       STOP 'calcule_frac_hydro_diag'
39    END IF
40! puis calcul:
41
42  SUBROUTINE calcule_frac_hydro_diag
43!output : frac_hydro_diag
44!locals
45        INTEGER(i_std) :: jd, jh
46        REAL(r_std)    :: prev_hydro, next_hydro, prev_diag, next_diag
47!
48                frac_hydro_diag(:,:)=0.
49                prev_diag = 0.0
50
51                DO jd = 1, nbdl
52
53                        next_diag = diaglev(jd)
54                        prev_hydro = 0.0
55                        DO jh = 1, nslm
56                                if (jh.EQ.1) then
57                                        next_hydro = zz(2,nstm)/1000./2.
58                                elseif (jh.EQ.nslm) then
59                                        next_hydro = zz(nslm,nstm)/1000.
60                                else
61                                        next_hydro = zz(jh, nstm)/1000.+(zz(jh+1,nstm)-zz(jh,nstm))/1000./2.
62                                endif
63                            frac_hydro_diag(jh,jd) = MAX(MIN(next_hydro, next_diag)-MAX(prev_hydro, prev_diag), 0.)/(next_diag - prev_diag)
64                            prev_hydro=next_hydro
65                        ENDDO
66
67                        prev_diag = next_diag
68                ENDDO
69  END SUBROUTINE calcule_frac_hydro_diag
70