diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOS_SurfaceGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOS_SurfaceGridComp.F90 index d04378320..9b111edcf 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOS_SurfaceGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOS_SurfaceGridComp.F90 @@ -2732,9 +2732,9 @@ subroutine SetServices ( GC, RC ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC ,& - LONG_NAME = 'depth_to_water_table_from_surface',& + LONG_NAME = 'depth_to_water_table_from_surface_in_peat',& UNITS = 'm' ,& - SHORT_NAME = 'WATERTABLED' ,& + SHORT_NAME = 'PEATCLSM_WATERLEVEL' ,& DIMS = MAPL_DimsHorzOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -2743,7 +2743,7 @@ subroutine SetServices ( GC, RC ) call MAPL_AddExportSpec(GC ,& LONG_NAME = 'change_in_free_surface_water_reservoir_on_peat',& UNITS = 'kg m-2 s-1' ,& - SHORT_NAME = 'FSWCHANGE' ,& + SHORT_NAME = 'PEATCLSM_FSWCHANGE' ,& DIMS = MAPL_DimsHorzOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -5125,8 +5125,8 @@ subroutine RUN2 ( GC, IMPORT, EXPORT, CLOCK, RC ) real, pointer, dimension(:,:) :: RMELTBC002 => NULL() real, pointer, dimension(:,:) :: RMELTOC001 => NULL() real, pointer, dimension(:,:) :: RMELTOC002 => NULL() - real, pointer, dimension(:,:) :: WATERTABLED => NULL() - real, pointer, dimension(:,:) :: FSWCHANGE => NULL() + real, pointer, dimension(:,:) :: PEATCLSM_WATERLEVEL => NULL() + real, pointer, dimension(:,:) :: PEATCLSM_FSWCHANGE => NULL() ! CN model real, pointer, dimension(:,:) :: CNLAI => NULL() @@ -5386,8 +5386,8 @@ subroutine RUN2 ( GC, IMPORT, EXPORT, CLOCK, RC ) real, pointer, dimension(:) :: RMELTBC002TILE => NULL() real, pointer, dimension(:) :: RMELTOC001TILE => NULL() real, pointer, dimension(:) :: RMELTOC002TILE => NULL() - real, pointer, dimension(:) :: WATERTABLEDTILE => NULL() - real, pointer, dimension(:) :: FSWCHANGETILE => NULL() + real, pointer, dimension(:) :: PEATCLSM_WATERLEVELTILE => NULL() + real, pointer, dimension(:) :: PEATCLSM_FSWCHANGETILE => NULL() real, pointer, dimension(:) :: CNLAITILE => NULL() real, pointer, dimension(:) :: CNTLAITILE => NULL() @@ -6222,8 +6222,8 @@ subroutine RUN2 ( GC, IMPORT, EXPORT, CLOCK, RC ) call MAPL_GetPointer(EXPORT , RMELTBC002 , 'RMELTBC002', RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT , RMELTOC001 , 'RMELTOC001', RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT , RMELTOC002 , 'RMELTOC002', RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT , WATERTABLED, 'WATERTABLED', RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT , FSWCHANGE , 'FSWCHANGE', RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT , PEATCLSM_WATERLEVEL, 'PEATCLSM_WATERLEVEL', RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT , PEATCLSM_FSWCHANGE, 'PEATCLSM_FSWCHANGE', RC=STATUS); VERIFY_(STATUS) IF(LSM_CHOICE > 1) THEN @@ -6798,8 +6798,8 @@ subroutine RUN2 ( GC, IMPORT, EXPORT, CLOCK, RC ) call MKTILE(RMELTBC002 ,RMELTBC002TILE ,NT,RC=STATUS); VERIFY_(STATUS) call MKTILE(RMELTOC001 ,RMELTOC001TILE ,NT,RC=STATUS); VERIFY_(STATUS) call MKTILE(RMELTOC002 ,RMELTOC002TILE ,NT,RC=STATUS); VERIFY_(STATUS) - call MKTILE(WATERTABLED,WATERTABLEDTILE,NT,RC=STATUS); VERIFY_(STATUS) - call MKTILE(FSWCHANGE ,FSWCHANGETILE ,NT,RC=STATUS); VERIFY_(STATUS) + call MKTILE(PEATCLSM_WATERLEVEL,PEATCLSM_WATERLEVELTILE,NT,RC=STATUS); VERIFY_(STATUS) + call MKTILE(PEATCLSM_FSWCHANGE ,PEATCLSM_FSWCHANGETILE ,NT,RC=STATUS); VERIFY_(STATUS) IF (LSM_CHOICE > 1) THEN call MKTILE(CNLAI ,CNLAITILE ,NT,RC=STATUS); VERIFY_(STATUS) @@ -7644,8 +7644,8 @@ subroutine RUN2 ( GC, IMPORT, EXPORT, CLOCK, RC ) if(associated(RMELTBC002 ))call MAPL_LocStreamTransform(LOCSTREAM,RMELTBC002 ,RMELTBC002TILE, RC=STATUS); VERIFY_(STATUS) if(associated(RMELTOC001 ))call MAPL_LocStreamTransform(LOCSTREAM,RMELTOC001 ,RMELTOC001TILE, RC=STATUS); VERIFY_(STATUS) if(associated(RMELTOC002 ))call MAPL_LocStreamTransform(LOCSTREAM,RMELTOC002 ,RMELTOC002TILE, RC=STATUS); VERIFY_(STATUS) - if(associated(WATERTABLED))call MAPL_LocStreamTransform(LOCSTREAM,WATERTABLED,WATERTABLEDTILE,RC=STATUS); VERIFY_(STATUS) - if(associated(FSWCHANGE ))call MAPL_LocStreamTransform(LOCSTREAM,FSWCHANGE ,FSWCHANGETILE, RC=STATUS); VERIFY_(STATUS) + if(associated(PEATCLSM_WATERLEVEL))call MAPL_LocStreamTransform(LOCSTREAM,PEATCLSM_WATERLEVEL,PEATCLSM_WATERLEVELTILE,RC=STATUS); VERIFY_(STATUS) + if(associated(PEATCLSM_FSWCHANGE ))call MAPL_LocStreamTransform(LOCSTREAM,PEATCLSM_FSWCHANGE ,PEATCLSM_FSWCHANGETILE, RC=STATUS); VERIFY_(STATUS) if(associated(CNLAI)) then call MAPL_LocStreamTransform( LOCSTREAM,CNLAI ,CNLAITILE , RC=STATUS) @@ -8179,8 +8179,8 @@ subroutine RUN2 ( GC, IMPORT, EXPORT, CLOCK, RC ) if(associated(RMELTBC002TILE )) deallocate(RMELTBC002TILE ) if(associated(RMELTOC001TILE )) deallocate(RMELTOC001TILE ) if(associated(RMELTOC002TILE )) deallocate(RMELTOC002TILE ) - if(associated(WATERTABLEDTILE)) deallocate(WATERTABLEDTILE) - if(associated(FSWCHANGETILE )) deallocate(FSWCHANGETILE ) + if(associated(PEATCLSM_WATERLEVELTILE)) deallocate(PEATCLSM_WATERLEVELTILE) + if(associated(PEATCLSM_FSWCHANGETILE )) deallocate(PEATCLSM_FSWCHANGETILE ) if(associated(CNLAITILE )) deallocate(CNLAITILE ) if(associated(CNTLAITILE )) deallocate(CNTLAITILE ) if(associated(CNSAITILE )) deallocate(CNSAITILE ) @@ -8516,9 +8516,9 @@ subroutine DOTYPE(type,RC) VERIFY_(STATUS) call MAPL_GetPointer(GEX(type), dum, 'RMELTOC002' , ALLOC=associated(RMELTOC002TILE ), notFoundOK=.true., RC=STATUS) VERIFY_(STATUS) - call MAPL_GetPointer(GEX(type), dum, 'WATERTABLED', ALLOC=associated(WATERTABLEDTILE ),notFoundOK=.true., RC=STATUS) + call MAPL_GetPointer(GEX(type), dum, 'PEATCLSM_WATERLEVEL', ALLOC=associated(PEATCLSM_WATERLEVELTILE), notFoundOK=.true., RC=STATUS) VERIFY_(STATUS) - call MAPL_GetPointer(GEX(type), dum, 'FSWCHANGE' , ALLOC=associated(FSWCHANGETILE ) , notFoundOK=.true., RC=STATUS) + call MAPL_GetPointer(GEX(type), dum, 'PEATCLSM_FSWCHANGE' , ALLOC=associated(PEATCLSM_FSWCHANGETILE ), notFoundOK=.true., RC=STATUS) VERIFY_(STATUS) IF (LSM_CHOICE > 1) THEN @@ -9088,8 +9088,8 @@ subroutine DOTYPE(type,RC) if(associated(RMELTBC002TILE)) call FILLOUT_TILE(GEX(type), 'RMELTBC002' , RMELTBC002TILE , XFORM, RC=STATUS);VERIFY_(STATUS) if(associated(RMELTOC001TILE)) call FILLOUT_TILE(GEX(type), 'RMELTOC001' , RMELTOC001TILE , XFORM, RC=STATUS);VERIFY_(STATUS) if(associated(RMELTOC002TILE)) call FILLOUT_TILE(GEX(type), 'RMELTOC002' , RMELTOC002TILE , XFORM, RC=STATUS);VERIFY_(STATUS) - if(associated(WATERTABLEDTILE))call FILLOUT_TILE(GEX(type), 'WATERTABLED', WATERTABLEDTILE, XFORM, RC=STATUS);VERIFY_(STATUS) - if(associated(FSWCHANGETILE)) call FILLOUT_TILE(GEX(type), 'FSWCHANGE' , FSWCHANGETILE , XFORM, RC=STATUS);VERIFY_(STATUS) + if(associated(PEATCLSM_WATERLEVELTILE)) call FILLOUT_TILE(GEX(type), 'PEATCLSM_WATERLEVEL', PEATCLSM_WATERLEVELTILE, XFORM, RC=STATUS);VERIFY_(STATUS) + if(associated(PEATCLSM_FSWCHANGETILE)) call FILLOUT_TILE(GEX(type), 'PEATCLSM_FSWCHANGE' , PEATCLSM_FSWCHANGETILE , XFORM, RC=STATUS);VERIFY_(STATUS) if(associated(CNLAITILE)) then call FILLOUT_TILE(GEX(type), 'CNLAI' , CNLAITILE , XFORM, RC=STATUS) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOS_LandGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOS_LandGridComp.F90 index bfca66893..e762166db 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOS_LandGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOS_LandGridComp.F90 @@ -920,8 +920,8 @@ subroutine SetServices ( GC, RC ) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTBC002', CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTOC001', CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTOC002', CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) - call MAPL_AddExportSpec ( GC, SHORT_NAME = 'WATERTABLED',CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) - call MAPL_AddExportSpec ( GC, SHORT_NAME = 'FSWCHANGE', CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) + call MAPL_AddExportSpec ( GC, SHORT_NAME = 'PEATCLSM_WATERLEVEL',CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) + call MAPL_AddExportSpec ( GC, SHORT_NAME = 'PEATCLSM_FSWCHANGE', CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) if (DO_GOSWIM /= 0) then call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RDU001', CHILD_ID = CATCH(1), RC=STATUS) ; VERIFY_(STATUS) @@ -1292,8 +1292,8 @@ subroutine SetServices ( GC, RC ) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTBC002', CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTOC001', CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTOC002', CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) - call MAPL_AddExportSpec ( GC, SHORT_NAME = 'WATERTABLED',CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) - call MAPL_AddExportSpec ( GC, SHORT_NAME = 'FSWCHANGE', CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) + call MAPL_AddExportSpec ( GC, SHORT_NAME = 'PEATCLSM_WATERLEVEL',CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) + call MAPL_AddExportSpec ( GC, SHORT_NAME = 'PEATCLSM_FSWCHANGE', CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) if (DO_GOSWIM /= 0) then call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RDU001', CHILD_ID = CATCHCN(1), RC=STATUS) ; VERIFY_(STATUS) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOS_CatchCNGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOS_CatchCNGridComp.F90 index e790bcd5f..b569ac07c 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOS_CatchCNGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOS_CatchCNGridComp.F90 @@ -984,8 +984,8 @@ subroutine SetServices ( GC, RC ) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTBC002', CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTOC001', CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RMELTOC002', CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) - call MAPL_AddExportSpec ( GC, SHORT_NAME = 'WATERTABLED',CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) - call MAPL_AddExportSpec ( GC, SHORT_NAME = 'FSWCHANGE' , CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) + call MAPL_AddExportSpec ( GC, SHORT_NAME = 'PEATCLSM_WATERLEVEL',CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) + call MAPL_AddExportSpec ( GC, SHORT_NAME = 'PEATCLSM_FSWCHANGE' ,CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) if (DO_GOSWIM /= 0) then call MAPL_AddExportSpec ( GC, SHORT_NAME = 'RDU001', CHILD_ID = CATCHCN, RC=STATUS) ; VERIFY_(STATUS) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM40_GridComp/GEOS_CatchCNCLM40GridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM40_GridComp/GEOS_CatchCNCLM40GridComp.F90 index f554a0bbf..2c290094f 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM40_GridComp/GEOS_CatchCNCLM40GridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM40_GridComp/GEOS_CatchCNCLM40GridComp.F90 @@ -51,7 +51,8 @@ module GEOS_CatchCNCLM40GridCompMod RHOFS => CATCH_SNWALB_RHOFS, & SNWALB_VISMAX => CATCH_SNWALB_VISMAX, & SNWALB_NIRMAX => CATCH_SNWALB_NIRMAX, & - SLOPE => CATCH_SNWALB_SLOPE + SLOPE => CATCH_SNWALB_SLOPE, & + PEATCLSM_POROS_THRESHOLD USE clm_varpar, ONLY : & NUM_ZON, NUM_VEG, VAR_COL, VAR_PFT, & @@ -61,8 +62,8 @@ module GEOS_CatchCNCLM40GridCompMod use MAPL_ConstantsMod,only: Tzero => MAPL_TICE, pi => MAPL_PI use clm_time_manager, only: get_days_per_year, get_step_size use pftvarcon, only: noveg - USE lsm_routines, ONLY : sibalb, catch_calc_soil_moist, & - catch_calc_zbar, catch_calc_watertabled, irrigation_rate, & + USE lsm_routines, ONLY : sibalb, catch_calc_soil_moist, & + catch_calc_zbar, catch_calc_peatclsm_waterlevel, irrigation_rate, & gndtmp implicit none @@ -3730,9 +3731,9 @@ subroutine SetServices ( GC, RC ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC ,& - LONG_NAME = 'depth_to_water_table_from_surface',& + LONG_NAME = 'depth_to_water_table_from_surface_in_peat',& UNITS = 'm' ,& - SHORT_NAME = 'WATERTABLED' ,& + SHORT_NAME = 'PEATCLSM_WATERLEVEL' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -3741,7 +3742,7 @@ subroutine SetServices ( GC, RC ) call MAPL_AddExportSpec(GC ,& LONG_NAME = 'change_in_free_surface_water_reservoir_on_peat',& UNITS = 'kg m-2 s-1' ,& - SHORT_NAME = 'FSWCHANGE' ,& + SHORT_NAME = 'PEATCLSM_FSWCHANGE' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -4904,8 +4905,8 @@ subroutine Driver ( RC ) real, pointer, dimension(:) :: RMELTOC001 real, pointer, dimension(:) :: RMELTOC002 real, pointer, dimension(:) :: IRRIGRATE - real, pointer, dimension(:) :: WATERTABLED - real, pointer, dimension(:) :: FSWCHANGE + real, pointer, dimension(:) :: PEATCLSM_WATERLEVEL + real, pointer, dimension(:) :: PEATCLSM_FSWCHANGE ! -------------------------------------------------------------------------- ! Local pointers for tile variables @@ -5536,8 +5537,8 @@ subroutine Driver ( RC ) call MAPL_GetPointer(EXPORT,RMELTBC002,'RMELTBC002', RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT,RMELTOC001,'RMELTOC001', RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT,RMELTOC002,'RMELTOC002', RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT,WATERTABLED ,'WATERTABLED', RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT,FSWCHANGE , 'FSWCHANGE', RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT,PEATCLSM_WATERLEVEL,'PEATCLSM_WATERLEVEL',RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT,PEATCLSM_FSWCHANGE ,'PEATCLSM_FSWCHANGE', RC=STATUS); VERIFY_(STATUS) IF (RUN_IRRIG /= 0) call MAPL_GetPointer(EXPORT,IRRIGRATE ,'IRRIGRATE' , RC=STATUS); VERIFY_(STATUS) NTILES = size(PS) @@ -7449,9 +7450,16 @@ subroutine Driver ( RC ) if(associated(RMELTBC002)) RMELTBC002 = RMELT(:,7) if(associated(RMELTOC001)) RMELTOC001 = RMELT(:,8) if(associated(RMELTOC002)) RMELTOC002 = RMELT(:,9) - if(associated(FSWCHANGE)) FSWCHANGE = FSW_CHANGE - if(associated(WATERTABLED)) then - WATERTABLED = catch_calc_watertabled( BF1, BF2, CDCR2, POROS, WPWET, CATDEF ) + if(associated(PEATCLSM_FSWCHANGE)) then + where (POROS >= PEATCLSM_POROS_THRESHOLD) + PEATCLSM_FSWCHANGE = FSW_CHANGE + elsewhere + PEATCLSM_FSWCHANGE = MAPL_UNDEF + end where + end if + + if(associated(PEATCLSM_WATERLEVEL)) then + PEATCLSM_WATERLEVEL = catch_calc_peatclsm_waterlevel( BF1, BF2, CDCR2, POROS, WPWET, CATDEF ) endif if(associated(TPSN1OUT)) then diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM45_GridComp/GEOS_CatchCNCLM45GridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM45_GridComp/GEOS_CatchCNCLM45GridComp.F90 index f1b24d30e..b6f73f83b 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM45_GridComp/GEOS_CatchCNCLM45GridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatchCN_GridComp/GEOScatchCNCLM45_GridComp/GEOS_CatchCNCLM45GridComp.F90 @@ -51,7 +51,8 @@ module GEOS_CatchCNCLM45GridCompMod RHOFS => CATCH_SNWALB_RHOFS, & SNWALB_VISMAX => CATCH_SNWALB_VISMAX, & SNWALB_NIRMAX => CATCH_SNWALB_NIRMAX, & - SLOPE => CATCH_SNWALB_SLOPE + SLOPE => CATCH_SNWALB_SLOPE, & + PEATCLSM_POROS_THRESHOLD USE clm_varpar, ONLY : & NUM_ZON, NUM_VEG, VAR_COL, VAR_PFT, & @@ -61,8 +62,8 @@ module GEOS_CatchCNCLM45GridCompMod use MAPL_ConstantsMod,only: Tzero => MAPL_TICE, pi => MAPL_PI use clm_time_manager, only: get_days_per_year, get_step_size use pftvarcon, only: noveg - USE lsm_routines, ONLY : sibalb, catch_calc_soil_moist, & - catch_calc_zbar, catch_calc_watertabled, irrigation_rate, & + USE lsm_routines, ONLY : sibalb, catch_calc_soil_moist, & + catch_calc_zbar, catch_calc_peatclsm_waterlevel, irrigation_rate, & gndtmp use update_model_para4cn, only : upd_curr_date_time @@ -3669,9 +3670,9 @@ subroutine SetServices ( GC, RC ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC ,& - LONG_NAME = 'depth_to_water_table_from_surface',& + LONG_NAME = 'depth_to_water_table_from_surface_in_peat',& UNITS = 'm' ,& - SHORT_NAME = 'WATERTABLED' ,& + SHORT_NAME = 'PEATCLSM_WATERLEVEL' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -3680,7 +3681,7 @@ subroutine SetServices ( GC, RC ) call MAPL_AddExportSpec(GC ,& LONG_NAME = 'change_in_free_surface_water_reservoir_on_peat',& UNITS = 'kg m-2 s-1' ,& - SHORT_NAME = 'FSWCHANGE' ,& + SHORT_NAME = 'PEATCLSM_FSWCHANGE' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -4852,8 +4853,8 @@ subroutine Driver ( RC ) real, pointer, dimension(:) :: RMELTOC001 real, pointer, dimension(:) :: RMELTOC002 real, pointer, dimension(:) :: IRRIGRATE - real, pointer, dimension(:) :: WATERTABLED - real, pointer, dimension(:) :: FSWCHANGE + real, pointer, dimension(:) :: PEATCLSM_WATERLEVEL + real, pointer, dimension(:) :: PEATCLSM_FSWCHANGE ! -------------------------------------------------------------------------- ! Local pointers for tile variables @@ -5538,8 +5539,8 @@ subroutine Driver ( RC ) call MAPL_GetPointer(EXPORT,RMELTBC002 ,'RMELTBC002' , RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT,RMELTOC001 ,'RMELTOC001' , RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT,RMELTOC002 ,'RMELTOC002' , RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT,WATERTABLED ,'WATERTABLED' , RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT,FSWCHANGE ,'FSWCHANGE' , RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT,PEATCLSM_WATERLEVEL,'PEATCLSM_WATERLEVEL' , RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT,PEATCLSM_FSWCHANGE ,'PEATCLSM_FSWCHANGE' , RC=STATUS); VERIFY_(STATUS) IF (RUN_IRRIG /= 0) call MAPL_GetPointer(EXPORT,IRRIGRATE ,'IRRIGRATE' , RC=STATUS); VERIFY_(STATUS) @@ -7702,9 +7703,16 @@ subroutine Driver ( RC ) if(associated(RMELTBC002)) RMELTBC002 = RMELT(:,7) if(associated(RMELTOC001)) RMELTOC001 = RMELT(:,8) if(associated(RMELTOC002)) RMELTOC002 = RMELT(:,9) - if(associated(FSWCHANGE)) FSWCHANGE = FSW_CHANGE - if(associated(WATERTABLED)) then - WATERTABLED = catch_calc_watertabled( BF1, BF2, CDCR2, POROS, WPWET, CATDEF ) + if(associated(PEATCLSM_FSWCHANGE )) then + where (POROS >= PEATCLSM_POROS_THRESHOLD) + PEATCLSM_FSWCHANGE = FSW_CHANGE + elsewhere + PEATCLSM_FSWCHANGE = MAPL_UNDEF + end where + end if + + if(associated(PEATCLSM_WATERLEVEL)) then + PEATCLSM_WATERLEVEL = catch_calc_peatclsm_waterlevel( BF1, BF2, CDCR2, POROS, WPWET, CATDEF ) endif if(associated(TPSN1OUT)) then diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatch_GridComp/GEOS_CatchGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatch_GridComp/GEOS_CatchGridComp.F90 index ebb728495..de12911f0 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatch_GridComp/GEOS_CatchGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/GEOScatch_GridComp/GEOS_CatchGridComp.F90 @@ -43,9 +43,11 @@ module GEOS_CatchGridCompMod RHOFS => CATCH_SNWALB_RHOFS, & SNWALB_VISMAX => CATCH_SNWALB_VISMAX, & SNWALB_NIRMAX => CATCH_SNWALB_NIRMAX, & - SLOPE => CATCH_SNWALB_SLOPE + SLOPE => CATCH_SNWALB_SLOPE, & + PEATCLSM_POROS_THRESHOLD - USE lsm_routines, ONLY : sibalb, catch_calc_soil_moist, catch_calc_watertabled + + USE lsm_routines, ONLY : sibalb, catch_calc_soil_moist, catch_calc_peatclsm_waterlevel !#for_ldas_coupling use catch_incr @@ -2679,9 +2681,9 @@ subroutine SetServices ( GC, RC ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC ,& - LONG_NAME = 'depth_to_water_table_from_surface',& + LONG_NAME = 'depth_to_water_table_from_surface_in_peat',& UNITS = 'm' ,& - SHORT_NAME = 'WATERTABLED' ,& + SHORT_NAME = 'PEATCLSM_WATERLEVEL' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -2690,7 +2692,7 @@ subroutine SetServices ( GC, RC ) call MAPL_AddExportSpec(GC ,& LONG_NAME = 'change_in_free_surface_water_reservoir_on_peat',& UNITS = 'kg m-2 s-1' ,& - SHORT_NAME = 'FSWCHANGE' ,& + SHORT_NAME = 'PEATCLSM_FSWCHANGE' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) @@ -3927,8 +3929,8 @@ subroutine Driver ( RC ) real, pointer, dimension(:) :: RMELTBC002 real, pointer, dimension(:) :: RMELTOC001 real, pointer, dimension(:) :: RMELTOC002 - real, pointer, dimension(:) :: WATERTABLED - real, pointer, dimension(:) :: FSWCHANGE + real, pointer, dimension(:) :: PEATCLSM_WATERLEVEL + real, pointer, dimension(:) :: PEATCLSM_FSWCHANGE ! -------------------------------------------------------------------------- ! Local pointers for tile variables @@ -4468,8 +4470,8 @@ subroutine Driver ( RC ) call MAPL_GetPointer(EXPORT,RMELTBC002,'RMELTBC002', RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT,RMELTOC001,'RMELTOC001', RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(EXPORT,RMELTOC002,'RMELTOC002', RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT,WATERTABLED,'WATERTABLED',RC=STATUS); VERIFY_(STATUS) - call MAPL_GetPointer(EXPORT,FSWCHANGE, 'FSWCHANGE', RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT,PEATCLSM_WATERLEVEL,'PEATCLSM_WATERLEVEL',RC=STATUS); VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT,PEATCLSM_FSWCHANGE, 'PEATCLSM_FSWCHANGE', RC=STATUS); VERIFY_(STATUS) NTILES = size(PS) @@ -5644,9 +5646,16 @@ subroutine Driver ( RC ) if(associated(RMELTBC002)) RMELTBC002 = RMELT(:,7) if(associated(RMELTOC001)) RMELTOC001 = RMELT(:,8) if(associated(RMELTOC002)) RMELTOC002 = RMELT(:,9) - if(associated(FSWCHANGE )) FSWCHANGE = FSW_CHANGE - if(associated(WATERTABLED )) then - WATERTABLED = catch_calc_watertabled( BF1, BF2, CDCR2, POROS, WPWET, CATDEF ) + if(associated(PEATCLSM_FSWCHANGE )) then + where (POROS >= PEATCLSM_POROS_THRESHOLD) + PEATCLSM_FSWCHANGE = FSW_CHANGE + elsewhere + PEATCLSM_FSWCHANGE = MAPL_UNDEF + end where + end if + + if(associated(PEATCLSM_WATERLEVEL )) then + PEATCLSM_WATERLEVEL = catch_calc_peatclsm_waterlevel( BF1, BF2, CDCR2, POROS, WPWET, CATDEF ) endif if(associated(TPSN1)) then diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/Shared/lsm_routines.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/Shared/lsm_routines.F90 index 4f4835c2e..91e9377d0 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/Shared/lsm_routines.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSsurface_GridComp/GEOSland_GridComp/Shared/lsm_routines.F90 @@ -21,6 +21,9 @@ MODULE lsm_routines ! large-scale throughfalls. FWETC and FWETL are now passed through the resource file. ! reichle, 27 Jan 2022 - moved "public" constants & subroutine echo_catch_constants() to catch_constants.f90 + use MAPL, ONLY: & + MAPL_UNDEF + USE MAPL_ConstantsMod, ONLY: & PIE => MAPL_PI, & ! - TF => MAPL_TICE, & ! K @@ -55,7 +58,7 @@ MODULE lsm_routines PRIVATE PUBLIC :: INTERC, SRUNOFF, RZDRAIN, BASE, PARTITION, RZEQUIL, gndtp0 - PUBLIC :: SIBALB, catch_calc_soil_moist, catch_calc_zbar, catch_calc_watertabled + PUBLIC :: SIBALB, catch_calc_soil_moist, catch_calc_zbar, catch_calc_peatclsm_waterlevel PUBLIC :: catch_calc_subtile2tile PUBLIC :: gndtmp, catch_calc_tp, catch_calc_wtotl, catch_calc_ght, catch_calc_FT PUBLIC :: dampen_tc_oscillations, irrigation_rate @@ -1969,6 +1972,20 @@ end subroutine catch_calc_soil_moist ! Calculate zbar for Catchment[CN] model. ! + ! For mineral tiles, zbar is a fitted function that approximates the + ! water table depth EXCEPT for wet conditions. For low values of + ! catdef, negative values on the order of -1 meter can be encountered, + ! which would imply crazy water tables well above the surface. + ! For this reason, zbar is not suitable for general estimation + ! of water table depth. + ! + ! For PEATCLSM, zbar is a well-fitted function that describes the + ! water table depth for all wetness conditions. At zbar=0, half of + ! the microtopography is flooeded. Slightly negative values of + ! up to -14 cm (-bf2) are theoretically possible but are not realized. + ! Lesser negative values would represent slightly elevated water levels + ! that imply more than half of the microtopography is flooded. + ! ! Convention: zbar positive below ground (downward). ! ! This convention applies to water calculations, incl. subroutines RZDRAIN(), @@ -1979,7 +1996,8 @@ end subroutine catch_calc_soil_moist ! diffusion model, incl. subroutines GNDTP0(), GNDTMP(), GNDTMP_CN(). ! ! - reichle, 29 Jan 2022 - + ! - reichle, 3 Jun 2022 (updated documentation above) + function catch_calc_zbar_scalar( bf1, bf2, catdef ) result(zbar) implicit none @@ -2008,18 +2026,30 @@ end function catch_calc_zbar_vector ! ******************************************************************* - function catch_calc_watertabled( bf1, bf2, cdcr2, poros, wpwet, catdef ) result(wtd) + function catch_calc_peatclsm_waterlevel( bf1, bf2, cdcr2, poros, wpwet, catdef ) result(waterlevel) - ! calculate water table depth [m] + ! calculate water level (a.k.a. water table depth) for PEATCLSM only [m] + ! + ! Convention: water leve positive above ground (opposite of zbar convention!) implicit none real, dimension(:), intent(in) :: bf1, bf2, cdcr2, poros, wpwet, catdef - real, dimension(size(bf1)) :: wtd - - wtd = MIN( catch_calc_zbar(BF1,BF2,CATDEF), CDCR2/(1.-WPWET)/POROS/1000. ) + real, dimension(size(bf1)) :: waterlevel - end function catch_calc_watertabled + WHERE (POROS >= PEATCLSM_POROS_THRESHOLD) + + ! note change of sign from zbar + + waterlevel = -1.*MIN( catch_calc_zbar(BF1,BF2,CATDEF), CDCR2/(1.-WPWET)/POROS/1000. ) + + ELSEWHERE + + waterlevel = MAPL_UNDEF + + ENDWHERE + + end function catch_calc_peatclsm_waterlevel ! *******************************************************************