#include <misc.h> #include <preproc.h> module RunoffMod 9,4 #if (defined RTM) !----------------------------------------------------------------------- !BOP ! ! !MODULE: RunoffMod ! ! !DESCRIPTION: ! Module containing utilities for history file and coupler runoff data ! ! !USES: use shr_kind_mod, only : r8 => shr_kind_r8 use abortutils , only : endrun use clm_mct_mod use clmtype , only : allrof ! !PUBLIC TYPES: implicit none private integer,parameter,public :: nt_rtm = 2 ! number of tracers character(len=3),parameter,public :: rtm_tracers(nt_rtm) = & (/'LIQ','ICE'/) public :: runoff_flow type runoff_flow ! - local real(r8), pointer :: runoff(:,:) ! RTM flow (m**3 H2O/s) real(r8), pointer :: runofflnd(:,:) ! runoff masked for land (m**3 H2O/s) real(r8), pointer :: runoffocn(:,:) ! runoff masked for ocn (m**3 H2O/s) real(r8), pointer :: dvolrdt(:,:) ! RTM change in storage (m**3/s) real(r8), pointer :: dvolrdtlnd(:,:) ! dvolrdt masked for land (m**3/s) real(r8), pointer :: dvolrdtocn(:,:) ! dvolrdt masked for ocn (m**3/s) real(r8), pointer :: volr(:,:) ! RTM storage (m**3) real(r8), pointer :: volrlnd(:,:) ! RTM storage masked for land (m**3) real(r8), pointer :: lonc(:) ! lon of cell real(r8), pointer :: latc(:) ! lat of cell real(r8), pointer :: area(:) ! area of cell integer , pointer :: gindex(:) ! global index integer , pointer :: mask(:) ! mask of cell 0=none, 1=lnd, 2=ocn integer , pointer :: dsi(:) ! downstream index ! - global real(r8), pointer :: rlon(:) ! rtm longitude list, 1d real(r8), pointer :: rlat(:) ! rtm latitude list, 1d integer , pointer :: num_rtm(:) ! num of cells on each pe ! - local integer :: begr,endr ! local start/stop indices integer :: lnumr ! rtm gdc local number of cells integer :: begrl,endrl ! local start/stop indices integer :: lnumrl ! rtm gdc local number of lnd cells integer :: begro,endro ! local start/stop indices integer :: lnumro ! rtm gdc local number of ocn cells integer :: numr ! rtm gdc global number of cells integer :: numrl ! rtm gdc global number of lnd cells integer :: numro ! rtm gdc global number of ocn cells ! - need 1d field pointers for history files real(r8), pointer :: runofflnd_nt1(:) real(r8), pointer :: runofflnd_nt2(:) real(r8), pointer :: runoffocn_nt1(:) real(r8), pointer :: runoffocn_nt2(:) real(r8), pointer :: dvolrdtlnd_nt1(:) real(r8), pointer :: dvolrdtlnd_nt2(:) real(r8), pointer :: dvolrdtocn_nt1(:) real(r8), pointer :: dvolrdtocn_nt2(:) real(r8), pointer :: volr_nt1(:) real(r8), pointer :: volr_nt2(:) end type runoff_flow ! type (runoff_flow) ,public :: runoff type(mct_gsMap) ,target ,public :: gsMap_rtm_gdc2glo type(mct_sMatP) ,public :: sMatP_l2r ! ! !PUBLIC MEMBER FUNCTIONS: public get_proc_rof_bounds public get_proc_rof_total public get_proc_rof_global ! ! !REVISION HISTORY: ! Mariana Vertenstein: Created 10/2003 ! !EOP !----------------------------------------------------------------------- contains !----------------------------------------------------------------------- !BOP ! ! !IROUTINE: get_proc_rof_total ! ! !INTERFACE: subroutine get_proc_rof_total(pid, num_rtm),1 ! ! !DESCRIPTION: ! Determine number of land and ocean runoff points for this process ! ! !USES: use shr_kind_mod, only : r8 => shr_kind_r8 ! ! !ARGUMENTS: implicit none integer, intent(in) :: pid ! integer, intent(out) :: num_lnd ! integer, intent(out) :: num_ocn integer, intent(out) :: num_rtm ! ! !REVISION HISTORY: ! Mariana Vertenstein: Created 10/2003 ! !EOP !----------------------------------------------------------------------- num_rtm = runoff%num_rtm(pid) end subroutine get_proc_rof_total !----------------------------------------------------------------------- !BOP ! ! !IROUTINE: get_proc_rof_bounds ! ! !INTERFACE: subroutine get_proc_rof_bounds(beg_rtm, end_rtm) 3,1 ! ! !DESCRIPTION: ! Determine beginning and ending indices of land and ocean runoff ! for this processor. ! ! !USES: use shr_kind_mod, only : r8 => shr_kind_r8 ! ! !ARGUMENTS: implicit none integer, intent(out) :: beg_rtm integer, intent(out) :: end_rtm ! ! !REVISION HISTORY: ! Mariana Vertenstein: Created 10/2003 ! !EOP !----------------------------------------------------------------------- beg_rtm = runoff%begr end_rtm = runoff%endr end subroutine get_proc_rof_bounds !----------------------------------------------------------------------- !BOP ! ! !IROUTINE: get_proc_rof_global ! ! !INTERFACE: subroutine get_proc_rof_global(num_rtm, num_lnd, num_ocn) 4,2 ! ! !DESCRIPTION: ! Determine number of land and ocean runoff points across all processors. ! ! !USES: use shr_kind_mod, only : r8 => shr_kind_r8 use spmdMod , only : npes ! ! !ARGUMENTS: implicit none integer, intent(out) :: num_rtm integer, optional, intent(out) :: num_lnd integer, optional, intent(out) :: num_ocn ! ! !REVISION HISTORY: ! Mariana Vertenstein: Created 10/2003 ! ! ! !LOCAL VARIABLES: !EOP integer :: pid !----------------------------------------------------------------------- num_rtm = runoff%numr if (present(num_lnd)) then num_lnd = runoff%numrl endif if (present(num_ocn)) then num_ocn = runoff%numro endif end subroutine get_proc_rof_global !----------------------------------------------------------------------- #endif end module RunoffMod