[[PageOutline]] = 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 [http://forge.ipsl.fr/orchidee/changeset/947 revsion 947]. Validations are on going. Commit [http://forge.ipsl.fr/orchidee/changeset/944 revison 944] on the Hydrology branch needs to be validated before inclusion in the trunk. = Simulations = == Offline == Tests on going...[[BR]] 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...[[BR]] NB!! The routing does not work in coupled mode. This was already the case at the Hydrology branch. '''Without routing'''[[BR]] Some shorter test can be found at IDRIS/gaya [[BR]] See readme : /u/rech/dzt/rdzt893/IGCM_OUT/LMDZOR/TEST/ValidWithoutRoutage '''With routing'''[[BR]] 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[[BR]] /u/rech/dzt/rdzt893/IGCM_OUT/LMDZOR/TEST/ValidWithRoutage[[BR]] Get modified subroutine [https://forge.ipsl.fr/orchidee/attachment/wiki/trunk/ValidHydroIntoTrunk/routing_trunk955_modif.f90 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.