wiki:trunk/ValidHydroIntoTrunk

Version 7 (modified by klaurent, 6 weeks ago) (diff)

--

Validation of the merge of Hydrology branch into the trunk

The developpements on the Hydrology branch(rev 941) has been integrated in the trunk in revsion 947. Validations are on going. Commit revison 944 on the Hydrology branch needs to be validated before inclusion in the trunk.

Simulations

Offline

Tests on going...

Run in standard set up, by Didier, seems to be correct between the tag 1.9.6, the Hydrology branch and the new trunk. See one point simulation at Obelix /home/users/dsolyga/orchidee02/MERGE_HYDRO_TRUNK/MERGE_HYDRO_TRUNK_TESTS_ONE_POINT/README for more information.

In Fabienne's set up there is a problem in the C4 grass. See offline simulations at obelix /home/satellites5/maignan/ORCHIDEE/HYDRO/RUN_ERAI_SEC/Readme.txt for more information.

LMDZ-ORCHIDEE

Tests on going...

NB!! The routing does not work in coupled mode. This was already the case at the Hydrology branch.

Without routing
Some shorter test can be found at IDRIS/gaya
See readme : /u/rech/dzt/rdzt893/IGCM_OUT/LMDZOR/TEST/ValidWithoutRoutage

With routing
Using the old subroutine routing_basins from tag 1.9.5 (same as 1.9.6) it is possible to run in coupled mode. Test for 3 years can be found at IDRIS/gaya here
/u/rech/dzt/rdzt893/IGCM_OUT/LMDZOR/TEST/ValidWithRoutage

Get modified subroutine routing.f90.

Merge into the trunk (rev 941) (Didier Solyga)

This section lists the modifications needed to merge the DOC/Hydro branch into the trunk :

  • hydrol : Move flag ok_throughfall_by_pft to pft_parameters :
         IF ( active_flags%hydrol_cwrr ) THEN
             
             !! 2.1 Read the flag ok_throughfall_by_pft to know if 
             !!      we have to use the parameter throughfall_by_pft
    
             !Config Key   = OK_THROUGHFALL_PFT
             !Config Desc  = Activate use of PERCENT_THROUGHFALL_PFT
             !Config If    = HYDROL_CWRR
             !Config Def   = FALSE
             !Config Help  = If NOT OFF_LINE_MODE it is always TRUE (coupled with a GCM)
             !Config Units = [FLAG]
             IF ( .NOT. OFF_LINE_MODE ) ok_throughfall_by_pft = .TRUE.
             CALL getin_p('OK_THROUGHFALL_PFT',ok_throughfall_by_pft)   
    
          END IF
    
    

The pft parameter throughfall_by_pft is initiliazed and read in pft_parameters.f90. Correct memory allocation and initialization for parameter throughfall_by_pft :

      IF ( .NOT.(active_flags%hydrol_cwrr) .OR. (active_flags%hydrol_cwrr .AND. ok_throughfall_by_pft) ) THEN
         ALLOCATE(throughfall_by_pft(nvm),stat=ier)
         l_error = l_error .OR. (ier /= 0)
         IF (l_error) THEN
            WRITE(numout,*) ' Memory allocation error for throughfall_by_pft. We stop. We need nvm words = ',nvm
            STOP 'pft_parameters_alloc'
         END IF
      END IF
      IF ( .NOT.(active_flags%hydrol_cwrr) .OR.  (active_flags%hydrol_cwrr .AND. ok_throughfall_by_pft) ) THEN
         throughfall_by_pft(:) = throughfall_by_mtc(pft_to_mtc(:))
      ENDIF

because throughfall_by_pft is still used with Choisnel hydrology but not automatically with CWRR. ===> Q: Inconsistency ?

  • pft_parameters : humcste has different default values according the value of dpu_max. We know that if we use the 11-layers hydrology, dpu_max should be set to 2 and humcste the corresponding values
       If (active_flags%hydrol_cwrr ) THEN
          humcste(:) = humcste_cwrr(pft_to_mtc(:)) ! values for 2m soil depth
       ELSE
          humcste(:) = humcste_mtc(pft_to_mtc(:))  ! values for 4m soil depth 
       END IF
    
  • constantes_soil : reintegrate the module constantes_soil. Add the corresponding "USE" in the code. The old hydrological parameters externalized which are obsolete now have been commented in constantes.f90. dpu_max is set at 4 meters by default (value used for AR5 + Choisnel)
  • intersurf : add a consistency test for dpu_max value. dpu_max can't be set to 4 if hydrol_cwrr is activated.
   IF (control_flags%hydrol_cwrr .AND. (dpu_max /= 2.)) THEN
       WRITE (numout,*) "You can not use the 11-layers hydrology with dpu_max /= 2. We set it to 2."
       dpu_max = 2.
    END IF
  • routing : Add documentation. the following lines have been adapted for the externalization :
    DO ig = 1, nbpt
       IF (MAXVAL(veget_max(ig,(nvm-3):nvm)) .GT. min_sechiba) THEN
          DO jv = nvm-3, nvm
             transpot_mean(ig) = transpot_mean(ig) + transpot(ig,jv) * veget_max(ig,jv)/ SUM(veget_max(ig,(nvm-3):nvm))
          ENDDO
       ELSE

The corresponding code now is :

   tot_vegfrac_nowoody(:) = zero
   DO jv  = 1, nvm
      IF (is_c3(jv) .OR. is_c4(jv)) THEN
         tot_vegfrac_nowoody(:) = tot_vegfrac_nowoody(:) + veget_max(:,jv) 
      END IF
   END DO

   DO ig = 1, nbpt
      IF ( tot_vegfrac_nowoody(ig) .GT. min_sechiba ) THEN
         DO jv = 1,nvm
            IF ( is_c3(jv) .OR. is_c4(jv) ) THEN
               transpot_mean(ig) = transpot_mean(ig) + transpot(ig,jv) * veget_max(ig,jv)/tot_vegfrac_nowoody(ig)  
            END IF
         END DO
  • MERGE DONE : Merge Hydrology(+Doc) branch revision 932 into trunk revision 945. Done on 19/07/2012 look at [947].

Differences explaining the differences between the trunk and the Hydrology branch

  • Initialization of lai : in the branch (and tag 196), the lai is initialized twice if we have no restart files, once in slowproc_lai, the second time in stomate.f90. In slowproc_lai, the lai is non-zero :
    IF  ( .NOT. read_lai ) THEN
    
       lai(: ,1) = zero
       ! On boucle sur 2,nvm au lieu de 1,nvm
       DO jv = 2,nvm
          SELECT CASE (type_of_lai(jv))
             
          CASE ("mean ")
             !
             ! 1. do the interpolation between laimax and laimin
             !
             lai(:,jv) = undemi * (llaimax(jv) + llaimin(jv))
             !
          CASE ("inter")
             !
             ! 2. do the interpolation between laimax and laimin
             !
             DO ji = 1,kjpindex
                lai(ji,jv) = llaimin(jv) + tempfunc(stempdiag(ji,lcanop)) * (llaimax(jv) - llaimin(jv))
             ENDDO
             !
          CASE default
             !
             ! 3. Problem
             !
             WRITE (numout,*) 'This kind of lai choice is not possible. '// &
                  ' We stop with type_of_lai ',jv,' = ', type_of_lai(jv) 
             STOP 'slowproc_lai'
             
          END SELECT

but once in stomate_f90, it is recalculated :

       IF (control%ok_pheno) THEN
          !! 5.1.1 Update LAI 
          ! Set lai of bare soil to zero
          lai(:,ibare_sechiba) = zero
          ! lai for all PFTs
          DO j = 2, nvm
             lai(:,j) = biomass(:,j,ileaf)*sla(j)
          ENDDO
       ELSE 
          ! 5.1.2 Use a prescribed lai
          ! WARNING: code in setlai is identical to the lines above
          ! Update subroutine if LAI has to be forced 
          CALL  setlai(kjpindex,lai) 
       ENDIF

lai could be positive in sechiba but once in stomate, it could be equal to zero! It was inconsistent with the BVOC : we have isopren emissions without vegetation! I add the following line (see [890]) in slowproc (after calling slowproc_lai):

          IF ( .NOT. read_lai ) THEN
             lai(:,:) = zero
          ENDIF

This modification was not possible in slowproc_lai because the error occurs only when we don't use restart files.

  • The second is the modification of solar module by N.Vuichard (see [861]) for using daily forcings. lhour is considered as a real and not an integer anymore.
  • The sla parameter is calculated in Hydrology branch but prescribed in the trunk. The values are relatively the same but could explain some little differences.
  • The CMOR outputs mrros, mrr, prveg, evspsblveg, evspsblsoi, tran have been corrected in the trunk (see ticket #9). Set SECHIBA_HIST_LEVEL to 10 to not activate them.

Differences explaining the differences between the trunk and the tag 196

  • In tag 196, when IMPOSE_VEG is activated veget is not calculated by the subroutine slowproc_veget. So as we have veget=veget_max, no fraction of bare soil is calculated.
  • In trunk (rev [947]), veget(:,1) is replaced by tot_frac_bare and slowproc_veget is called whatever the case. So a fraction is always calculated even in IMPOSE_VEG. This modification implies a modification of the value of z0 (and albedo). To have the same results, a call to slowproc_veget should be added in the tag version of slowproc :
           !
           !Config Key   = SLOWPROC_HEIGHT
           !Config Desc  = Height for all vegetation types
           !Config Def   = 0., 30., 30., 20., 20., 20., 15., 15., 15., .5, .6, 1.0, 1.0
           !Config If    = OK_SECHIBA
           !Config Help  = The height used in the 0dim mode. The values should be found
           !Config         in the restart file. The new values of height will be computed anyway
           !Config         at the end of the current day. The need for this variable is caused
           !Config         by the fact that the model may stop during a day and thus we have not
           !Config         yet been through the routines which compute the new surface conditions.
           !Config Units = [m]
           !
           CALL setvar_p (height, val_exp, 'SLOWPROC_HEIGHT', height_presc)
    
           CALL slowproc_veget (kjpindex, lai, frac_nobio, veget_max, veget)
    
        ELSE
    

This line lets ORCHIDEE to calculate a fraction of bare soil even in IMPOSE_VEG.

Attachments (1)

Download all attachments as: .zip