Ignore:
Timestamp:
2011-06-17T14:02:17+02:00 (13 years ago)
Author:
didier.solyga
Message:

Externalized version merged with the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ORCHIDEE_EXT/ORCHIDEE/src_sechiba/hydrolc.f90

    r134 r257  
    33!! 
    44!! @author Marie-Alice Foujols and Jan Polcher 
    5 !! @Version : $Revision: 1.21 $, $Date: 2010/05/07 08:28:13 $ 
     5!! @Version : $Revision: 45 $, $Date: 2011-01-01 21:30:44 +0100 (Sat, 01 Jan 2011) $ 
    66!!  
    7 !! $Header: /home/ssipsl/CVSREP/ORCHIDEE/src_sechiba/hydrolc.f90,v 1.21 2010/05/07 08:28:13 ssipsl Exp $ 
     7!< $HeadURL: http://forge.ipsl.jussieu.fr/orchidee/svn/trunk/ORCHIDEE/src_sechiba/hydrolc.f90 $ 
     8!< $Date: 2011-01-01 21:30:44 +0100 (Sat, 01 Jan 2011) $ 
     9!< $Author: mmaipsl $ 
     10!< $Revision: 45 $ 
    811!! IPSL (2006) 
    912!!  This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC 
     
    145148    !! We consider that any water on the ice is snow and we only peforme a water balance to have consistency. 
    146149    !! The water balance is limite to + or - 10^6 so that accumulation is not endless 
     150    REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (inout) :: humrel        !! Relative humidity 
     151    REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (inout) :: vegstress     !! Veg. moisture stress (only for vegetation growth) 
     152    REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (inout) :: qsintveg      !! Water on vegetation due to interception 
    147153    ! output fields 
    148     REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: run_off_tot   !! Complete runoff 
    149     REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: drainage      !! Drainage 
    150     REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (out) :: humrel        !! Relative humidity 
    151     REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (out) :: vegstress     !! Veg. moisture stress (only for vegetation growth) 
     154    REAL(r_std),DIMENSION (kjpindex), INTENT (inout)     :: run_off_tot   !! Complete runoff 
     155    REAL(r_std),DIMENSION (kjpindex), INTENT (inout)     :: drainage      !! Drainage 
     156    REAL(r_std),DIMENSION (kjpindex,nbdl), INTENT (inout):: shumdiag      !! relative soil moisture 
     157 
    152158    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: rsol          !! Resistence to bare soil evaporation 
    153159    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: drysoil_frac  !! Fraction of visibly dry soil (between 0 and 1) 
    154     REAL(r_std),DIMENSION (kjpindex,nbdl), INTENT (out):: shumdiag      !! relative soil moisture 
    155160    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: litterhumdiag !! litter humidity 
    156161    REAL(r_std),DIMENSION (kjpindex), INTENT (out)     :: tot_melt      !! Total melt     
    157     REAL(r_std),DIMENSION (kjpindex,nvm), INTENT (out) :: qsintveg      !! Water on vegetation due to interception 
    158162 
    159163    ! 
     
    293297       CALL hydrolc_alma(kjpindex, index, .FALSE., qsintveg, snow, snow_nobio, soilwet) 
    294298    ENDIF 
    295  
    296299 
    297300    ! 
     
    313316          DO ji = 1, kjpindex 
    314317             IF ( vegtot(ji) .GT. zero ) THEN 
    315                 histvar(ji)=histvar(ji)+veget(ji,jv)/vegtot(ji)*MAX((0.1-dss(ji,jv))*mx_eau_eau, 0.0) 
     318                histvar(ji)=histvar(ji)+veget(ji,jv)/vegtot(ji)*MAX((0.1-dss(ji,jv))*mx_eau_eau, zero) 
    316319             ENDIF 
    317320          ENDDO 
     
    322325       CALL histwrite(hist_id, 'mrso', kjit, histvar, kjpindex, index) 
    323326 
    324        histvar(:)=run_off_tot(:)/86400. 
     327       histvar(:)=run_off_tot(:)/one_day 
    325328       CALL histwrite(hist_id, 'mrros', kjit, histvar, kjpindex, index) 
    326329 
    327        histvar(:)=(run_off_tot(:)+drainage(:))/86400. 
     330       histvar(:)=(run_off_tot(:)+drainage(:))/one_day 
    328331       CALL histwrite(hist_id, 'mrro', kjit, histvar, kjpindex, index) 
    329332 
    330        histvar(:)=(precip_rain(:)-SUM(precisol(:,:),dim=2))/86400. 
     333       histvar(:)=(precip_rain(:)-SUM(precisol(:,:),dim=2))/one_day 
    331334       CALL histwrite(hist_id, 'prveg', kjit, histvar, kjpindex, index) 
    332335 
     
    369372             DO ji = 1, kjpindex 
    370373                IF ( vegtot(ji) .GT. zero ) THEN 
    371                    histvar(ji)=histvar(ji)+veget(ji,jv)/vegtot(ji)*MAX((0.1-dss(ji,jv))*mx_eau_eau, 0.0) 
     374                   histvar(ji)=histvar(ji)+veget(ji,jv)/vegtot(ji)*MAX((0.1-dss(ji,jv))*mx_eau_eau, zero) 
    372375                ENDIF 
    373376             ENDDO 
     
    375378          CALL histwrite(hist2_id, 'mrsos', kjit, histvar, kjpindex, index) 
    376379 
    377           histvar(:)=(run_off_tot(:)+drainage(:))/86400. 
     380          histvar(:)=(run_off_tot(:)+drainage(:))/one_day 
    378381          CALL histwrite(hist2_id, 'mrro', kjit, histvar, kjpindex, index) 
    379382 
     
    772775        !Config        started without a restart file. 
    773776        ! 
    774         CALL setvar_p (snow, val_exp, 'HYDROL_SNOW', 0.0_r_std) 
     777        CALL setvar_p (snow, val_exp, 'HYDROL_SNOW', zero) 
    775778        ! 
    776779        !Config Key  = HYDROL_SNOWAGE 
     
    781784        !Config        started without a restart file. 
    782785        ! 
    783         CALL setvar_p (snow_age, val_exp, 'HYDROL_SNOWAGE', 0.0_r_std) 
     786        CALL setvar_p (snow_age, val_exp, 'HYDROL_SNOWAGE', zero) 
    784787        ! 
    785788        !Config Key  = HYDROL_SNOW_NOBIO 
     
    790793        !Config        started without a restart file. 
    791794        ! 
    792         CALL setvar_p (snow_nobio, val_exp, 'HYDROL_SNOW_NOBIO', 0.0_r_std) 
     795        CALL setvar_p (snow_nobio, val_exp, 'HYDROL_SNOW_NOBIO', zero) 
    793796        ! 
    794797        !Config Key  = HYDROL_SNOW_NOBIO_AGE 
     
    799802        !Config        started without a restart file. 
    800803        ! 
    801         CALL setvar_p (snow_nobio_age, val_exp, 'HYDROL_SNOW_NOBIO_AGE', 0.0_r_std) 
     804        CALL setvar_p (snow_nobio_age, val_exp, 'HYDROL_SNOW_NOBIO_AGE', zero) 
    802805        ! 
    803806        !Config Key  = HYDROL_HUMR 
     
    808811        !Config        started without a restart file. 
    809812        ! 
    810         CALL setvar_p (humrel, val_exp,'HYDROL_HUMR', 1.0_r_std) 
    811         CALL setvar_p (vegstress, val_exp,'HYDROL_HUMR', 1.0_r_std) 
     813        CALL setvar_p (humrel, val_exp,'HYDROL_HUMR', un) 
     814        CALL setvar_p (vegstress, val_exp,'HYDROL_HUMR', un) 
    812815        ! 
    813816        !Config Key  = HYDROL_BQSB 
     
    827830        !Config        started without a restart file. 
    828831        ! 
    829         CALL setvar_p (gqsb, val_exp, 'HYDROL_GQSB', 0.0_r_std) 
     832        CALL setvar_p (gqsb, val_exp, 'HYDROL_GQSB', zero) 
    830833        ! 
    831834        !Config Key  = HYDROL_DSG 
     
    836839        !Config        started without a restart file. 
    837840        ! 
    838         CALL setvar_p (dsg, val_exp, 'HYDROL_DSG', 0.0_r_std) 
     841        CALL setvar_p (dsg, val_exp, 'HYDROL_DSG', zero) 
    839842 
    840843        ! set inital value for dsp if needed 
     
    872875        !Config        the model is started without a restart file.  
    873876        ! 
    874         CALL setvar_p (qsintveg, val_exp, 'HYDROL_QSV', 0.0_r_std) 
     877        CALL setvar_p (qsintveg, val_exp, 'HYDROL_QSV', zero) 
    875878        ! 
    876879        tmpdss = dsg - gqsb / mx_eau_eau 
     
    889892                    IF (.NOT. (dsg(ji,1).EQ. zero .OR. gqsb(ji,1).EQ.zero)) THEN 
    890893                       ! Ajouts Nathalie - Fred - le 28 Mars 2006 
    891                        a_subgrd(ji)=MIN(MAX(dsg(ji,1)-dss(ji,1),0.)/dsg_min,1.) 
     894                       a_subgrd(ji)=MIN(MAX(dsg(ji,1)-dss(ji,1),zero)/dsg_min,un) 
    892895                       ! 
    893896                    ENDIF 
     
    906909                 IF (.NOT. (dsg(ji,1).EQ. zero .OR. gqsb(ji,1).EQ.zero)) THEN 
    907910                    ! Ajouts Nathalie - Fred - le 28 Mars 2006 
    908                     a_subgrd(ji)=MIN(MAX(dsg(ji,1)-dss(ji,1),0.)/dsg_min,1.) 
     911                    a_subgrd(ji)=MIN(MAX(dsg(ji,1)-dss(ji,1),zero)/dsg_min,un) 
    909912                    ! 
    910913                 ENDIF 
     
    915918           ! Correction Nathalie - le 28 Mars 2006 - re-ecriture drysoil_frac/hdry - Fred Hourdin 
    916919           ! revu 22 novembre 2007 
    917            hdry(:) = a_subgrd(:)*dss(:,1) + (1.-a_subgrd(:))*dsp(:,1) 
     920           hdry(:) = a_subgrd(:)*dss(:,1) + (un-a_subgrd(:))*dsp(:,1) 
    918921        ENDIF 
    919922        ! 
     
    10901093 
    10911094    ! The fraction of soil which is visibly dry (dry when dss = 0.1 m) 
    1092     drysoil_frac(:) = MIN(MAX(dss(:,1),0.)*10._r_std, un) 
     1095    drysoil_frac(:) = MIN(MAX(dss(:,1),zero)*10._r_std, un) 
    10931096    ! 
    10941097    ! Compute the resistance to bare soil evaporation 
     
    11021105          ! du fond. En gros, rsol=hdry*rsol_cste pour hdry < 1m70 
    11031106          !rsol(ji) = dss(ji,1) * rsol_cste 
    1104           !rsol(ji) =  ( drysoil_frac(ji) + 1./(10.*(dpu_cste - drysoil_frac(ji))+1.e-10)**2 ) * rsol_cste 
    1105           rsol(ji) =  ( hdry(ji) + 1./(10.*(dpu_cste - hdry(ji))+1.e-10)**2 ) * rsol_cste 
     1107          !rsol(ji) =  ( drysoil_frac(ji) + un/(10.*(dpu_cste - drysoil_frac(ji))+1.e-10)**2 ) * rsol_cste 
     1108          rsol(ji) =  ( hdry(ji) + un/(10.*(dpu_cste - hdry(ji))+1.e-10)**2 ) * rsol_cste 
    11061109       ENDIF 
    11071110    ENDDO 
     
    11241127!!$            ( mean_dsg(ji) .GT. min_sechiba ) .AND. & 
    11251128!!$            ( mean_dsg(ji) .LT. 5.E-4 ) ) THEN 
    1126 !!$        litterhumdiag(ji) = 0.0 
     1129!!$        litterhumdiag(ji) = zero 
    11271130!!$      ENDIF 
    11281131!!$    ENDDO 
     
    12731276         IF (snow(ji).GT.sneige) THEN  
    12741277            ! 
    1275             snowmelt(ji) = (1. - frac_nobio(ji,iice))*(temp_sol_new(ji) - tp_00) * soilcap(ji) / chalfu0  
     1278            snowmelt(ji) = (un - frac_nobio(ji,iice))*(temp_sol_new(ji) - tp_00) * soilcap(ji) / chalfu0  
    12761279            ! 
    12771280            ! 1.3.1.1 enough snow for melting or not 
     
    14091412                    &  (un - snow_nobio_age(ji,iice)/max_snow_age) * dtradia/one_day ) * & 
    14101413                    &  EXP(-precip_snow(ji) / snow_trans) - snow_nobio_age(ji,iice) 
    1411         IF (d_age(ji) .GT. 0. ) THEN 
     1414        IF (d_age(ji) .GT. zero ) THEN 
    14121415          xx(ji) = MAX( tp_00 - temp_sol_new(ji), zero ) 
    14131416          xx(ji) = ( xx(ji) / 7._r_std ) ** 4._r_std 
     
    14561459    REAL(r_std), DIMENSION (kjpindex,nvm)          :: zqsintvegnew 
    14571460    LOGICAL, SAVE                                  :: firstcall=.TRUE. 
    1458 !    REAL(r_std), SAVE, DIMENSION(nvm)              :: throughfall_by_pft 
    14591461 
    14601462    IF ( firstcall ) THEN 
     
    15781580        ENDIF 
    15791581    ! 
    1580         IF (resdist(ji,jv) .GT. 0.) THEN 
     1582        IF (resdist(ji,jv) .GT. zero) THEN 
    15811583         qsintveg2(ji,jv) = qsintveg(ji,jv)/resdist(ji,jv) 
    15821584        ELSE 
     
    15861588    ENDDO 
    15871589    ! 
    1588     vegchtot(:) = 0. 
     1590    vegchtot(:) = zero 
    15891591    DO jv = 1, nvm 
    15901592      DO ji = 1, kjpindex 
     
    15951597    DO jv = 1, nvm 
    15961598      DO ji = 1, kjpindex 
    1597         IF ( vegchtot(ji) .GT. 0. ) THEN 
     1599        IF ( vegchtot(ji) .GT. zero ) THEN 
    15981600          gdq(ji,jv) = ABS(vmr(ji,jv)) * gqsb(ji,jv) 
    15991601          bdq(ji,jv) = ABS(vmr(ji,jv)) * bqsb(ji,jv) 
     
    16131615    DO jv = 1, nvm 
    16141616      DO ji = 1, kjpindex 
    1615         IF ( ( vegchtot(ji) .GT. 0. ) .AND. ( vmr(ji,jv) .LT. 0. ) ) THEN 
     1617        IF ( ( vegchtot(ji) .GT. zero ) .AND. ( vmr(ji,jv) .LT. zero ) ) THEN 
    16161618          gtr(ji) = gtr(ji) + gdq(ji,jv) 
    16171619          btr(ji) = btr(ji) + bdq(ji,jv) 
     
    16251627    DO jv = 1, nvm 
    16261628      DO ji = 1, kjpindex 
    1627         IF ( vegchtot(ji) .GT. 0. .AND. ABS(vtr(ji)) .GT. EPS1) THEN 
     1629        IF ( vegchtot(ji) .GT. zero .AND. ABS(vtr(ji)) .GT. EPS1) THEN 
    16281630            fra(ji) = vmr(ji,jv) / vtr(ji) 
    1629              IF ( vmr(ji,jv) .GT. 0.)  THEN 
    1630               IF (veget(ji,jv) .GT. 0.) THEN 
     1631             IF ( vmr(ji,jv) .GT. zero)  THEN 
     1632              IF (veget(ji,jv) .GT. zero) THEN 
    16311633               gqsb(ji,jv) = (resdist(ji,jv)*gqsb(ji,jv) + fra(ji)*gtr(ji))/veget(ji,jv) 
    16321634               bqsb(ji,jv) = (resdist(ji,jv)*bqsb(ji,jv) + fra(ji)*btr(ji))/veget(ji,jv) 
     
    20032005    IF (long_print) WRITE(numout,*)  'hydrolc_soil 3.0 : Vertical diffusion' 
    20042006 
    2005     mean_bqsb(:) = 0. 
    2006     mean_gqsb(:) = 0. 
     2007    mean_bqsb(:) = zero 
     2008    mean_gqsb(:) = zero 
    20072009    DO jv = 1, nvm 
    20082010      DO ji = 1, kjpindex 
     
    20302032        DO ji = 1, kjpindex 
    20312033           IF (lbad_ij(ji)) THEN 
    2032               IF ( veget(ji,jv) .GT. 0. ) THEN 
     2034              IF ( veget(ji,jv) .GT. zero ) THEN 
    20332035                 ! 
    20342036                 bqsb(ji,jv) = mean_bqsb(ji) 
     
    20562058!        ! 
    20572059!        DO ji = 1, kjpindex 
    2058 !          IF ( veget(ji,jv) .GT. 0. ) THEN 
     2060!          IF ( veget(ji,jv) .GT. zero ) THEN 
    20592061!            ! 
    20602062!            bqsb(ji,jv) = mean_bqsb(ji) 
     
    20822084      ENDDO 
    20832085      ! 
    2084       mean_bqsb(:) = 0. 
    2085       mean_gqsb(:) = 0. 
     2086      mean_bqsb(:) = zero 
     2087      mean_gqsb(:) = zero 
    20862088      DO jv = 1, nvm 
    20872089        DO ji = 1, kjpindex 
     
    21802182               zhumrel_up(ji) = EXP( - humcste(jv) * dss(ji,jv)) 
    21812183               ! Ajouts Nathalie - Fred - le 28 Mars 2006 
    2182                a_subgrd(ji,jv)=MIN(MAX(dsg(ji,jv)-dss(ji,jv),0.)/dsg_min,1.) 
    2183                humrel(ji,jv)=a_subgrd(ji,jv)*zhumrel_up(ji)+(1.-a_subgrd(ji,jv))*zhumrel_lo(ji) 
     2184               a_subgrd(ji,jv)=MIN(MAX(dsg(ji,jv)-dss(ji,jv),zero)/dsg_min,un) 
     2185               humrel(ji,jv)=a_subgrd(ji,jv)*zhumrel_up(ji)+(un-a_subgrd(ji,jv))*zhumrel_lo(ji) 
    21842186               ! 
    21852187               vegstress(ji,jv) = zhumrel_lo(ji) + zhumrel_up(ji) - EXP( - humcste(jv) * dsg(ji,jv) )  
     
    22212223 
    22222224    ! The fraction of visibly dry soil (dry when dss(:,1) = 0.1 m) 
    2223     drysoil_frac(:) = MIN(MAX(dss(:,1),0.)*10._r_std, un) 
     2225    drysoil_frac(:) = MIN(MAX(dss(:,1),zero)*10._r_std, un) 
    22242226 
    22252227    ! Correction Nathalie - le 28 Mars 2006 - re-ecriture drysoil_frac/hdry - Fred Hourdin 
    22262228    ! revu 22 novembre 2007 
    2227     hdry(:) = a_subgrd(:,1)*dss(:,1) + (1.-a_subgrd(:,1))*dsp(:,1) 
     2229    hdry(:) = a_subgrd(:,1)*dss(:,1) + (un-a_subgrd(:,1))*dsp(:,1) 
    22282230    ! 
    22292231    ! Compute the resistance to bare soil evaporation. 
     
    22372239          ! du fond. En gros, rsol=hdry*rsol_cste pour hdry < 1m70 
    22382240          !rsol(ji) = dss(ji,1) * rsol_cste 
    2239           rsol(ji) =  ( hdry(ji) + 1./(10.*(dpu_cste - hdry(ji))+1.e-10)**2 ) * rsol_cste 
     2241          rsol(ji) =  ( hdry(ji) + un/(10.*(dpu_cste - hdry(ji))+1.e-10)**2 ) * rsol_cste 
    22402242       ENDIF 
    22412243    ENDDO 
     
    23892391       IF ( ABS(delta_water(ji)-tot_flux(ji)) .GT. allowed_err ) THEN 
    23902392          WRITE(numout,*) 'HYDROL does not conserve water. The erroneous point is : ', ji 
    2391           WRITE(numout,*) 'The error in mm/d is :', (delta_water(ji)-tot_flux(ji))/dtradia, & 
     2393          WRITE(numout,*) 'The error in mm/d is :', (delta_water(ji)-tot_flux(ji))/dtradia*one_day, & 
    23922394               & ' and in mm/dt : ', delta_water(ji)-tot_flux(ji) 
    23932395          WRITE(numout,*) 'delta_water : ', delta_water(ji), ' tot_flux : ', tot_flux(ji) 
     
    25202522      !Config  Key  = HYDROL_TAU_HDIFF 
    25212523      !Config  Desc = time scale (s) for horizontal diffusion of water 
    2522       !Config  Def  = 86400. 
     2524      !Config  Def  = one_day 
    25232525      !Config  If   = HYDROL_OK_HDIFF 
    25242526      !Config  Help = Defines how fast diffusion occurs horizontally between 
     
    25262528      !Config         diffusion. 
    25272529 
    2528       tau_hdiff = 86400. 
     2530      tau_hdiff = one_day 
    25292531      CALL getin_p('HYDROL_TAU_HDIFF',tau_hdiff) 
    25302532 
Note: See TracChangeset for help on using the changeset viewer.