PUBLIC INTERFACE ~ PUBLIC DATA ~ PUBLIC ROUTINES ~ NAMELIST ~ DIAGNOSTIC FIELDS ~ ERROR MESSAGES ~ REFERENCES ~ NOTES

Module physics_driver_mod

Contact:  fil
Reviewers: 
Change History: WebCVS Log


OVERVIEW

Provides high level interfaces for calling the entire FMS atmospheric physics package.

physics_driver_mod accesses the model's physics modules and obtains tendencies and boundary fluxes due to the physical processes that drive atmospheric time tendencies and supply boundary forcing to the surface models.

This version of physics_driver_mod has been designed around the implicit version diffusion scheme of the GCM. It requires two routines to advance the model one time step into the future. These two routines correspond to the down and up sweeps of the standard tridiagonal solver. Radiation, Rayleigh damping, gravity wave drag, vertical diffusion of momentum and tracers, and the downward pass of vertical diffusion for temperature and specific humidity are performed in the down routine. The up routine finishes the vertical diffusion and computes moisture related terms (convection,large-scale condensation, and precipitation).


OTHER MODULES USED

       time_manager_mod
field_manager_mod
tracer_manager_mod
atmos_tracer_driver_mod
fms_mod
fms_io_mod
rad_utilities_mod
moist_processes_mod
vert_turb_driver_mod
vert_diff_driver_mod
radiation_driver_mod
cloud_spec_mod
aerosol_mod
radiative_gases_mod
damping_driver_mod

PUBLIC INTERFACE

physics_driver_init:
physics_driver_init is the constructor for physics_driver_mod.
physics_driver_down:
physics_driver_down calculates "first pass" physics tendencies, associated with radiation, damping and turbulence, and obtains the vertical diffusion tendencies to be passed to the surface and used in the semi-implicit vertical diffusion calculation.
physics_driver_up:
physics_driver_up completes the calculation of vertical diffusion and also handles moist physical processes.
physics_driver_end:
physics_driver_end is the destructor for physics_driver_mod.
do_moist_in_phys_up:
do_moist_in_phys_up returns the value of do_moist_processes
get_diff_t:
returns the values of array diff_t
get_radturbten:
returns the values of array radturbten
zero_radturbten:
sets all values of array radturbten to zero
read_restart_file:
read_restart_file will read the physics_driver.res file and process its contents. if no restart data can be found, the module variables are initialized to flag values.
read_restart_nc:
read_restart_nc will read the physics_driver.res file and process its contents. if no restart data can be found, the module variables are initialized to flag values.
check_args:
check_args determines if the input arrays to physics_driver_down are of a consistent size.
check_dim_2d:
check_dim_2d compares the size of two-dimensional input arrays with supplied expected dimensions and returns an error if any inconsistency is found.
check_dim_3d:
check_dim_3d compares the size of three-dimensional input arrays with supplied expected dimensions and returns an error if any inconsistency is found.
check_dim_4d:
check_dim_4d compares the size of four-dimensional input arrays with supplied expected dimensions and returns an error if any inconsistency is found.


PUBLIC DATA

Name Type Value Units Description
surf_diff_type surf_diff_type, dimension Defined in vert_diff_driver_mod, republished here. See vert_diff_mod for details.


PUBLIC ROUTINES

  1. physics_driver_init

    call physics_driver_init (Time, lonb, latb, axes, pref, & trs, Surf_diff, phalf, mask, kbot )
    DESCRIPTION
    physics_driver_init is the constructor for physics_driver_mod.


    INPUT
    Time    current time
       [time_type]
    pref    reference prssure profiles
       [real]
    latb    array of model latitudes at cell boundaries [radians]
       [real]
    lonb    array of model longitudes at cell boundaries [radians]
       [real]
    axes    axis indices, (/x,y,pf,ph/) (returned from diag axis manager)
       [integer]
    phalf    pressure at model interface levels
       [real]
    kbot    OPTIONAL: present when running eta vertical coordinate, index of lowest model level above ground
       [integer]
    mask    OPTIONAL: present when running eta vertical coordinate, mask to remove points below ground
       [real]

    INPUT/OUTPUT
    trs    atmospheric tracer fields
       [real]
    Surf_diff    surface diffusion derived type
       [surf_diff_type]

  2. physics_driver_down

    call physics_driver_down (is, ie, js, je, & Time_prev, Time, Time_next, & lat, lon, area, & p_half, p_full, z_half, z_full, & u, v, t, q, r, um, vm, tm, qm, rm, & frac_land, rough_mom, & albedo, t_surf_rad, & u_star, b_star, q_star, & dtau_du, dtau_dv, tau_x, tau_y, & udt, vdt, tdt, qdt, rdt, & flux_sw, flux_lw, coszen, gust, & Surf_diff, gavg_rrv, & mask, kbot
    DESCRIPTION
    physics_driver_down calculates "first pass" physics tendencies, associated with radiation, damping and turbulence, and obtains the vertical diffusion tendencies to be passed to the surface and used in the semi-implicit vertical diffusion calculation.


    INPUT
    Time_prev    previous time, for variable um, vm, tm, qm, rm
       [time_type]
    Time    current time
       [time_type]
    Time_next    next time, used for diagnostics
       [time_type]
    lat    array of model latitudes at model points [radians]
       [real]
    lon    array of model longitudes at model points [radians]
       [real]
    area    grid box area - current not used
       [real]
    p_half    pressure at model interface levels (offset from t,q,u,v,r)
       [real]
    p_full    pressure at full levels
    z_half    height at model interface levels
       [real]
    z_full    height at full levels
    u    zonal wind at current time step
       [real]
    v    meridional wind at current time step
       [real]
    t    temperature at current time step
       [real]
    q    specific humidity at current time step
       [real]
    r    multiple 3d tracer fields at current time step
    um    zonal wind at previous time step
       [real]
    vm    meridional wind at previous time step
       [real]
    tm    temperature at previous time step
       [real]
    qm    specific humidity at previous time step
       [real]
    rm    multiple 3d tracer fields at previous time step
    frac_land    fraction of land coverage in a model grid point
       [real]
    rough_mom    boundary layer roughness
       [real]
    albedo    surface albedo
       [real]
    t_surf_rad    surface radiative temperature
       [real]
    u_star    boundary layer wind speed (frictional speed)
       [real]
    b_star    ???
       [real]
    q_star    boundary layer specific humidity
       [real]
    dtau_du    derivative of zonal surface stress w.r.t zonal wind speed
       [real]
    dtau_dv    derivative of meridional surface stress w.r.t meridional wind speed
       [real]
    gavg_rrv    array containing global average of tracer volume mixing ratio
       [real]
    kbot    OPTIONAL: present when running eta vertical coordinate, index of lowest model level above ground
       [integer]
    mask    OPTIONAL: present when running eta vertical coordinate, mask to remove points below ground
       [real]
    diff_cum_mom    OPTIONAL: present when do_moist_processes=.false. cu_mo_trans diffusion coefficients, which are passed through to vert_diff_down. Should not be present when do_moist_processes=.true., since these values are passed out from moist_processes.
       [real]
    moist_convect    OPTIONAL: present when do_moist_processes=.false. Should not be present when do_moist_processes=.true., since these values are passed out from moist_processes.
       [real]

    INPUT/OUTPUT
    rd    multiple 3d diagnostic tracer fields
       [real]
    tau_x    boundary layer meridional component of wind shear
       [real]
    tau_y    boundary layer zonal component of wind shear
       [real]
    udt    zonal wind tendency
       [real]
    vdt    meridional wind tendency
       [real]
    tdt    temperature tendency
       [real]
    qdt    moisture tracer tendencies
       [real]
    rdt    multiple tracer tendencies
       [real]
    Surf_diff    Surface diffusion
       [surface_diffusion_type]

    OUTPUT
    flux_sw    Shortwave flux from radiation package
       [real]
    flux_lw    Longwave flux from radiation package
       [real]
    coszen    cosine of zenith angle
       [real]
    gust   
       [real]

  3. physics_driver_up

    call physics_driver_up (is, ie, js, je, & Time_prev, Time, Time_next, & lat, lon, area, & p_half, p_full, z_half, z_full, & omega, & u, v, t, q, r, um, vm, tm, qm, rm, & frac_land, & udt, vdt, tdt, qdt, rdt, & Surf_diff, & lprec, fprec, gust, & mask, kbot )
    DESCRIPTION
    physics_driver_up completes the calculation of vertical diffusion and also handles moist physical processes.


    INPUT
    Time_prev    previous time, for variable um, vm, tm, qm, rm
       [time_type]
    Time    current time
       [time_type]
    Time_next    next time, used for diagnostics
       [time_type]
    lat    array of model latitudes at model points [radians]
       [real]
    lon    array of model longitudes at model points [radians]
       [real]
    area    grid box area - current not used
       [real]
    p_half    pressure at model interface levels (offset from t,q,u,v,r)
       [real]
    p_full    pressure at full levels
    z_half    height at model interface levels
       [real]
    z_full    height at full levels
    omega    Veritical pressure tendency
       [real]
    u    zonal wind at current time step
       [real]
    v    meridional wind at current time step
       [real]
    t    temperature at current time step
       [real]
    q    specific humidity at current time step
       [real]
    r    multiple 3d tracer fields at current time step
    um    zonal wind at previous time step
       [real]
    vm    meridional wind at previous time step
       [real]
    tm    temperature at previous time step
       [real]
    qm    specific humidity at previous time step
       [real]
    rm    multiple 3d tracer fields at previous time step
    frac_land    fraction of land coverage in a model grid point
       [real]
    kbot    OPTIONAL: present when running eta vertical coordinate, index of lowest model level above ground
       [integer]
    mask    OPTIONAL: present when running eta vertical coordinate, mask to remove points below ground
       [real]

    INPUT/OUTPUT
    udt    zonal wind tendency
       [real]
    vdt    meridional wind tendency
       [real]
    tdt    temperature tendency
       [real]
    qdt    moisture tracer tendencies
       [real]
    rdt    multiple tracer tendencies
       [real]
    Surf_diff    Surface diffusion
       [surface_diffusion_type]

    OUTPUT
    lprec   
       [real]
    fprec   
       [real]
    gust   
       [real]

  4. physics_driver_end

    call physics_driver_end (Time)
    DESCRIPTION
    physics_driver_end is the destructor for physics_driver_mod.


    INPUT
    Time    current time
       [time_type]

  5. do_moist_in_phys_up

    logical = do_moist_in_phys_up ()
    DESCRIPTION
    do_moist_in_phys_up returns the value of do_moist_processes


  6. get_diff_t

    diff_t(:,:,:) = get_diff_t ()
    DESCRIPTION
    returns the values of array diff_t


  7. get_radturbten

    radturbten(:,:,:) = get_radturbten ()
    DESCRIPTION
    returns the values of array radturbten


  8. zero_radturbten

    call zero_radturbten ()
    DESCRIPTION
    sets all values of array radturbten to zero


  9. read_restart_file

    call read_restart_file 
    
    DESCRIPTION
    read_restart_file will read the physics_driver.res file and process its contents. if no restart data can be found, the module variables are initialized to flag values.


  10. read_restart_nc

    call read_restart_nc 
    
    DESCRIPTION
    read_restart_nc will read the physics_driver.res file and process its contents. if no restart data can be found, the module variables are initialized to flag values.


  11. check_args

    call check_args (lat, lon, area, p_half, p_full, z_half, z_full,& u, v, t, q, r, um, vm, tm, qm, rm, & udt, vdt, tdt, qdt, rdt, mask, kbot)
    DESCRIPTION
    check_args determines if the input arrays to physics_driver_down are of a consistent size.


    INPUT
    lat    array of model latitudes at model points [radians]
       [real]
    lon    array of model longitudes at model points [radians]
       [real]
    area    grid box area - current not used
       [real]
    p_half    pressure at model interface levels (offset from t,q,u,v,r)
       [real]
    p_full    pressure at full levels
    z_half    height at model interface levels
       [real]
    z_full    height at full levels
    u    zonal wind at current time step
       [real]
    v    meridional wind at current time step
       [real]
    t    temperature at current time step
       [real]
    q    specific humidity at current time step
       [real]
    r    multiple 3d tracer fields at current time step
    um    zonal wind at previous time step
       [real]
    vm    meridional wind at previous time step
       [real]
    tm    temperature at previous time step
       [real]
    qm    specific humidity at previous time step
       [real]
    rm    multiple 3d tracer fields at previous time step
    udt    zonal wind tendency
       [real]
    vdt    meridional wind tendency
       [real]
    tdt    temperature tendency
       [real]
    qdt    moisture tracer tendencies
       [real]
    rdt    multiple tracer tendencies
       [real]
    kbot    OPTIONAL: present when running eta vertical coordinate, index of lowest model level above ground
       [integer]
    mask    OPTIONAL: present when running eta vertical coordinate, mask to remove points below ground
       [real]

  12. check_dim_2d

     
    check_dim_2d (data,name,id,jd) result (ierr)
    DESCRIPTION
    check_dim_2d compares the size of two-dimensional input arrays with supplied expected dimensions and returns an error if any inconsistency is found.


    INPUT
    data    array of data to be checked
       [real]
    name    name associated with array to be checked
       [character]
    id, jd    expected i and j dimensions
       [integer]

  13. check_dim_3d

     
    check_dim_3d (data,name,id,jd, kd) result (ierr)
    DESCRIPTION
    check_dim_3d compares the size of three-dimensional input arrays with supplied expected dimensions and returns an error if any inconsistency is found.


    INPUT
    data    array of data to be checked
       [real]
    name    name associated with array to be checked
       [character]
    id, jd, kd    expected i, j and k dimensions
       [integer]

  14. check_dim_4d

     
    check_dim_4d (data,name,id,jd, kd, nt) result (ierr)
    DESCRIPTION
    check_dim_4d compares the size of four-dimensional input arrays with supplied expected dimensions and returns an error if any inconsistency is found.


    INPUT
    data    array of data to be checked
       [real]
    name    name associated with array to be checked
       [character]
    id, jd, kd, nt    expected i, j, k and 4th dimensions
       [integer]


NAMELIST

&physics_driver_nml

do_netcdf_restart
netcdf/native format restart file
[logical, dimension, units: , default: .true.]
do_radiation
calculating radiative fluxes and heating rates?
[logical, dimension, units: , default: .true.]
do_moist_processes
call moist_processes routines
[logical, dimension, units: , default: .true.]
tau_diff
time scale for smoothing diffusion coefficients
[real, dimension, units: , default: 3600.]
diff_min
minimum value of a diffusion coefficient beneath which the coefficient is reset to zero
[real, dimension, units: , default: 1.e-3]
diffusion_smooth
diffusion coefficients should be smoothed in time?
[logical, dimension, units: , default: .true.]


DIAGNOSTIC FIELDS

Diagnostic fields may be output to a netcdf file by specifying the module name identifier and the desired field names (given below) in file diag_table. See the documentation for diag_manager.
Diagnostic fields for module name identifier: 



DATA SETS

physics_driver.res
native format restart file
physics_driver.res.nc
netcdf format restart file


ERROR MESSAGES

FATAL in physics_driver_init
physics_driver_init must be called first


REFERENCES



COMPILER SPECIFICS



PRECOMPILER OPTIONS



LOADER OPTIONS

        

TEST PROGRAM



KNOWN BUGS



NOTES



FUTURE PLANS

Deal with conservation of total energy?



top