next up previous contents
Next: 17 Time Coordination Up: 2 Modules used in Previous: 15 Data Declerations   Contents

Subsections

16 Flux Calculations

16.1 Module flux_mod - Coupler's flux calculations. (Source File: flux_mod.F90)

The coupler is required to do certain flux calculations - those calculations are located in this module. Details about the calculations performed can be found in Part III of the Cpl6 Combined User's Guide, Source Code Reference and Scientific Description.


REVISION HISTORY:

       2002-Jun-10 - B. Kauffman - first version
INTERFACE:
 
 module flux_mod
USES:
 
    use shr_sys_mod     ! shared system routines
    use shr_date_mod    ! shared date module
    use shr_mpi_mod     ! shared mpi layer
    use cpl_kind_mod    ! kinds
    use cpl_const_mod   ! constants module
    use cpl_mct_mod     ! mct library
    use cpl_comm_mod    ! communicator module
    use cpl_fields_mod  ! list of fields found in bundles
    use cpl_domain_mod  ! domain data types
    use cpl_bundle_mod  ! bundle data types
    use cpl_control_mod, dbug=>cpl_control_infoDBug
 
    implicit none
 
    private ! except
PUBLIC TYPES:
 
   ! none
PUBLIC MEMBER FUNCTIONS:
 
    public :: flux_atmOcn  ! computes atm/ocn fluxes
    public :: flux_albo    ! computes ocn albedos
    public :: flux_albi    ! modifies ice reference albedo
    public :: flux_solar   ! computes ocn net solar
    public :: flux_epbal   ! forces evap/precip/runoff balance
PUBLIC DATA MEMBERS:
 
   ! none

16.1.1 flux_atmOcn - wrapper to atm/ocn flux calculation

Using data from the ocean model in bun_ocn and data from the atmosphere model (already mapped to the ocean grid) in bun_atm, calculate the ocean-atmosphere fluxes and return them in bun_flux.

If optional argument fabricate is present, this routine will use pre-set values instead of the input data. This is useful when using dead models.


REMARKS:

       All data must be on the ocean domain.
REVISION HISTORY:
       2002-Jun-10 - B. Kauffman - first version
INTERFACE:
 
 subroutine flux_atmOcn(bun_ocn,bun_atm,fabricate,bun_flux)
USES:
    use shr_timer_mod
INPUT/OUTPUT PARAMETERS:
 
    type(cpl_bundle),intent(in ) :: bun_ocn    ! ocn state fields on ocn domain
    type(cpl_bundle),intent(in ) :: bun_atm    ! atm state fields on ocn domain
    logical         ,intent(in ) :: fabricate  ! T <=> fabriate/clobber input data
    type(cpl_bundle),intent(out) :: bun_flux   ! flux fields on ocn grid

16.1.2 flux_albo - ocean albedo calculation

Depending on choices below, alter the abledos in the input bun_ocn

If Coupler namelist variable flux_albav = .true.
Compute four effective daily avg surface albedos for all combinations of visible/near-infrared and direct/diffuse radiation without accounting for zenith angle (ie. a "daily average" albedo)

If flux_albav = .false. then
Compute four surface albedos for all combinations of visible/ near-infrared and direct/diffuse radiation, accounting for instantaneous zenith angle calculated from input argument date and the following:

For more details see Briegleb, Bruce P., 1992: ``Delta-Eddington Approximation for Solar Radiation in the NCAR Community Climate Model'', Journal of Geophysical Research, Vol. 97, D7, pp7603-7612.


REVISION HISTORY:

      198x        - CCM1, original version
      1992-Jun    - J. Rosinski -- standardized
      1994-May    - J. Rosinski -- rewritten for land only
      1994-Jul    - B. Kauffman -- rewritten for ocean only
      2002-Oct-26 - R. Jacob -- Rewritten for cpl6
INTERFACE:
 
 subroutine flux_albo(date,bun_ocn)
USES:
 
    use shr_orb_mod ! orbital constants and methods
 
    implicit none
INPUT/OUTPUT PARAMETERS:
 
    type(cpl_bundle),intent(inout ) :: bun_ocn ! ocn albedo fields
    type(shr_date)  ,intent(in )    :: date    ! current date

16.1.3 flux_albi - ice albedo modification

Depending on choices below, alter the albedos in the input bun_ice

If Coupler namelist variable flux_albav = .false.,
impose a zenith angle dependance on the ice model ``reference albedo''. Currently this only involves setting albedos to zero on the dark side of the earth. Use input date to determine zenith angle.

If Coupler namelist variable flux_albav = .true.,
do not alter ice albedos. Ice albedos are zenith-angle independent


REMARKS:

     o upon input, albedos are assumed to be a 60 degree reference albedo
REVISION HISTORY:
     199x-       - B. Kauffman -- original cpl5 version
     2002-Oct-26 - R. Jacob -- rewritten for cpl6
INTERFACE:
 
 subroutine flux_albi(date,bun_ice)
USES:
 
    use shr_orb_mod
 
    implicit none
INPUT/OUTPUT PARAMETERS:
 
    type(cpl_bundle),intent(inout)  :: bun_ice ! contains ice albedo fields
    type(shr_date)  ,intent(in )    :: date    ! current date

16.1.4 flux_solar - compute atm/ocn absorbed short-wave (net sw)

Use the downward shortwave radiation in bun_atm and the albedos in bun_ocn and compute the atm/ocn absorbed short-wave (net sw) and return it in bun_aoflux.


REVISION HISTORY:

     2000-Jan-03 - B. Kauffman -- original cpl5 version
     2002-Oct-26 - R. Jacob -- rewritten for cpl6
INTERFACE:
 
 subroutine flux_solar(bun_atm,bun_ocn,bun_aoflux)
USES:
 
    implicit none
INPUT/OUTPUT PARAMETERS:
 
    type(cpl_bundle),intent(in  ) :: bun_atm    ! contains atm sw down fields
    type(cpl_bundle),intent(in  ) :: bun_ocn    ! contains ocn albedo fields
    type(cpl_bundle),intent(out ) :: bun_aoflux ! contains a/o net-sw fields

16.1.5 flux_epbal - Calculate precip/runoff adjustment factor

If Coupler namelist varible flx_epbal is not ``off'', adjust precip (an atm output flux) and runoff (a lnd output) sent to ice & ocn by a scalar factor $f$, so that

\begin{displaymath}P'+R'+E = f(P+R)+E=0 \end{displaymath}

This will insure a net zero fresh-water flux into ocn+ice. This could be used to compensate for fresh-water flux imbalances, e.g. due to the lack of river runoff from the lnd model.

if flx_epbal = ``ocn'', factor $f$ must be sent by the ocean model in the infobuffer.

if flx_epbal = ``inst'', factor $f$ will be calculated by this routine.

bun_aoflux contains the atm/ocean evaporation, bun_i2c the ice/atm evaporation, bun_prec contains the total snow and rain, bun_r2c contains the runoff and bun_frac contains the ocean domain surface fractions. If adjustment is performed, on return the runoff in bun_r2c and rain and snow in bun_prec will be altered to balance the evaporation.


REVISION HISTORY:

     199x        - B. Kauffman -- Original cpl5 version
     2003-Feb-17 - R. Jacob -- rewritten for cpl6
INTERFACE:
 
 subroutine flux_epbal(date,bun_aoflux,bun_i2c,bun_prec,bun_r2c,bun_frac)
USES:
 
    implicit none
INPUT/OUTPUT PARAMETERS:
 
    type(shr_date)  ,intent(in   ) :: date       ! current date
    type(cpl_bundle),intent(in   ) :: bun_i2c    ! ice to cpl bundle: ice evap
    type(cpl_bundle),intent(in   ) :: bun_aoflux ! a/o flux bundle  : ocn evap
    type(cpl_bundle),intent(inout) :: bun_prec   ! a/x precip bundle: i+o prec
    type(cpl_bundle),intent(inout) :: bun_r2c    ! runoff bundle    : ocn roff
    type(cpl_bundle),intent(in   ) :: bun_frac   ! fractions on ocn domain



next up previous contents
Next: 17 Time Coordination Up: 2 Modules used in Previous: 15 Data Declerations   Contents
cesm.ucar.edu