masks_cbl.F90 Source File


This source code is part of the Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. This work is licensed under the CSIRO Open Source Software License Agreement (variation of the BSD / MIT License).

You may not use this file except in compliance with this License. A copy of the License (CSIRO_BSD_MIT_License_v2.0_CABLE.txt) can be found at https://github.com/CABLE-LSM/CABLE/blob/main/




Source Code

!******************************************************************************
! This source code is part of the
! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model.
! This work is licensed under the CSIRO Open Source Software License
! Agreement (variation of the BSD / MIT License).
!
! You may not use this file except in compliance with this License.
! A copy of the License (CSIRO_BSD_MIT_License_v2.0_CABLE.txt) can be found
! at https://github.com/CABLE-LSM/CABLE/blob/main/
!
!******************************************************************************
MODULE cbl_masks_mod

!-----------------------------------------------------------------------------
! Description:
!   Computes various masks for CABLE:
!     - veg_mask: TRUE where LAI > LAI threshold value
!     - sunlit_mask: TRUE where the cosine of zenith angle is higher than a
!                    specified tolerance.
!     - sunlit_veg_mask: TRUE where veg_mask and sunlit_mask are TRUE.
!
! This MODULE is USEd in:
!     cable_land_albedo_mod_cbl.F90 (JULES),
!     cable_cbm.F90 (ESM1.5),
!     cable_rad_driver.F90 (ESM1.5),
!     cbl_model_driver_offline.F90 (CABLE)
!
! This MODULE contains 3 public Subroutine:
!     fveg_mask,
!     fsunlit_mask,
!     fsunlit_veg_mask
!
! Module specific documentation: https://trac.nci.org.au/trac/cable/wiki/TBC
! Where it fits in the model flow: https://trac.nci.org.au/trac/cable/wiki/TBC
!-----------------------------------------------------------------------------

IMPLICIT NONE

PUBLIC fveg_mask
PUBLIC fsunlit_mask
PUBLIC fsunlit_veg_mask

CONTAINS

SUBROUTINE fveg_mask( veg_mask, mp, lai_thresh, reducedLAIdue2snow )
! Description:
!   Computes mask where LAI is higher than a given threshold.

IMPLICIT NONE
LOGICAL, INTENT(OUT) :: veg_mask(:)

INTEGER, INTENT(IN) :: mp
REAL,    INTENT(IN) :: lai_thresh
REAL,    INTENT(IN) :: reducedLAIdue2snow(mp)
!local vars
INTEGER :: i

veg_mask(:) = .FALSE.
! Define vegetation mask:
DO i=1, mp
  IF ( reducedLAIdue2snow(i) > LAI_thresh ) veg_mask(i) = .TRUE.
END DO

RETURN
END SUBROUTINE fveg_mask

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SUBROUTINE fsunlit_mask( sunlit_mask, mp, coszen_tols, coszen )
! Description:
!   Computes mask where the sun is above the horizon within a given tolerance.

IMPLICIT NONE
LOGICAL, INTENT(OUT) :: sunlit_mask(:)

INTEGER, INTENT(IN) :: mp
REAL,    INTENT(IN) :: coszen_tols
REAL,    INTENT(IN) :: coszen(mp)
!local vars
INTEGER :: i

sunlit_mask = .FALSE.
! Define sunlit mask:
DO i=1, mp
  IF ( coszen(i) > coszen_tols ) sunlit_mask(i) = .TRUE.
END DO

RETURN
END SUBROUTINE fsunlit_mask

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SUBROUTINE fsunlit_veg_mask(  sunlit_veg_mask, veg_mask, sunlit_mask, mp )
! Description:
!   Computes mask where the sun is above the horizon within a given tolerance
!   and the LAI is above a given threshold. This is the union of the
!   masks from fsunlit_mask() and fveg_mask().

IMPLICIT NONE
LOGICAL, INTENT(OUT) :: sunlit_veg_mask(:)

INTEGER, INTENT(IN) :: mp
LOGICAL, INTENT(IN) :: veg_mask(mp)
LOGICAL, INTENT(IN) :: sunlit_mask(mp)
!local vars
INTEGER :: i

sunlit_veg_mask = .FALSE.
! Define sunlit AND vegetation mask:
DO i=1, mp
  IF ( veg_mask(i) .AND.  sunlit_mask(i) ) sunlit_veg_mask(i) = .TRUE.
END DO

RETURN
END SUBROUTINE fsunlit_veg_mask

END MODULE cbl_masks_mod