!----------------------------------------------------------------------- ! ! !MODULE: comsrf ! ! !DESCRIPTION: Module to handle surface fluxes for the subcomponents of cam/csm ! Currently this is a hodge-podge of 2D arrays without a lot ! of thought or design. We are under the process of removing ! this completely and moving the relevent arrays to the modules ! that actually use the data. ! ! See: http://swiki.ucar.edu/start/66 ! !----------------------------------------------------------------------- module comsrf 7,4 ! ! USES: ! use shr_kind_mod, only: r8 => shr_kind_r8, r4 => shr_kind_r4 use ppgrid, only: pcols, begchunk, endchunk use infnan, only: nan use abortutils, only: endrun implicit none !----------------------------------------------------------------------- ! PRIVATE: Make default data and interfaces private !----------------------------------------------------------------------- private ! By default all data is private to this module ! ! ! PUBLIC MEMBER FUNCTIONS: ! public initialize_comsrf ! Set the surface temperature and sea-ice fraction ! ! Public data ! public landm, sgh, sgh30, fv, ram1, fsns, fsds public fsnt, flns, flnt, srfrpdel, psm1, prcsnw public trefmxav, trefmnav real(r8), allocatable:: landm(:,:) ! land/ocean/sea ice flag real(r8), allocatable:: sgh(:,:) ! land/ocean/sea ice flag real(r8), allocatable:: sgh30(:,:) ! land/ocean/sea ice flag real(r8), allocatable:: fv(:,:) ! needed for dry dep velocities (over land) real(r8), allocatable:: ram1(:,:) ! needed for dry dep velocities (over land) real(r8), allocatable:: fsns(:,:) ! surface absorbed solar flux real(r8), allocatable:: fsds(:,:) ! downward solar flux real(r8), allocatable:: fsnt(:,:) ! Net column abs solar flux at model top real(r8), allocatable:: flns(:,:) ! Srf longwave cooling (up-down) flux real(r8), allocatable:: flnt(:,:) ! Net outgoing lw flux at model top real(r8), allocatable:: srfrpdel(:,:) ! 1./(pint(k+1)-pint(k)) real(r8), allocatable:: psm1(:,:) ! surface pressure real(r8), allocatable:: prcsnw(:,:) ! cam tot snow precip real(r8), allocatable:: trefmxav(:,:) ! diagnostic: tref max over the day real(r8), allocatable:: trefmnav(:,:) ! diagnostic: tref min over the day ! Private module data !=============================================================================== CONTAINS !=============================================================================== !====================================================================== ! PUBLIC ROUTINES: Following routines are publically accessable !====================================================================== !----------------------------------------------------------------------- ! ! BOP ! ! !IROUTINE: initialize_comsrf ! ! !DESCRIPTION: ! ! Initialize the procedure for specifying sea surface temperatures ! Do initial read of time-varying ice boundary dataset, reading two ! consecutive months on either side of the current model date. ! ! Method: ! ! Author: ! !----------------------------------------------------------------------- ! ! !INTERFACE ! subroutine initialize_comsrf 2,1 use cam_control_mod, only: ideal_phys, adiabatic !----------------------------------------------------------------------- ! ! Purpose: ! Initialize surface data ! ! Method: ! ! Author: Mariana Vertenstein ! !----------------------------------------------------------------------- integer k,c ! level, constituent indices if(.not. (adiabatic .or. ideal_phys)) then allocate (landm (pcols,begchunk:endchunk)) allocate (sgh (pcols,begchunk:endchunk)) allocate (sgh30 (pcols,begchunk:endchunk)) allocate (fv (pcols,begchunk:endchunk)) allocate (ram1 (pcols,begchunk:endchunk)) allocate (fsns (pcols,begchunk:endchunk)) allocate (fsds (pcols,begchunk:endchunk)) allocate (fsnt (pcols,begchunk:endchunk)) allocate (flns (pcols,begchunk:endchunk)) allocate (flnt (pcols,begchunk:endchunk)) allocate (srfrpdel(pcols,begchunk:endchunk)) allocate (psm1 (pcols,begchunk:endchunk)) allocate (prcsnw (pcols,begchunk:endchunk)) allocate (trefmxav(pcols,begchunk:endchunk)) allocate (trefmnav(pcols,begchunk:endchunk)) ! ! Initialize to NaN or Inf ! elements of the array outside valid surface points must be set to ! zero if these fields are to be written to netcdf history files. ! landm (:,:) = nan sgh (:,:) = nan sgh30 (:,:) = nan fsns (:,:) = nan fsds (:,:) = nan fsnt (:,:) = nan flns (:,:) = nan flnt (:,:) = nan srfrpdel (:,:) = nan psm1 (:,:) = nan prcsnw (:,:) = nan trefmxav (:,:) = -1.0e36_r8 trefmnav (:,:) = 1.0e36_r8 end if end subroutine initialize_comsrf end module comsrf