The Intermediate Complexity Atmospheric Research model (ICAR)
A computationally efficient atmospheric model for downscaling.
|
This module provides a wrapper to call various microphysics models It sets up variables specific to the physics package to be used including history variables not currently stored in the domain level data structure More...
Public Member Functions | |
subroutine | mp_init (options) |
Initialize microphysical routines More... | |
subroutine | distribute_precip (current_precip, last_precip, local_fraction) |
Distribute the microphysics precipitation to neighboring grid cells More... | |
subroutine | mp (domain, options, dt_in, model_time) |
Microphysical driver More... | |
subroutine | mp_finish (options) |
Finalize microphysical routines More... | |
Public Attributes | |
integer | update_interval |
real *8 | last_model_time |
real, dimension(:,:), allocatable | sr |
real, dimension(:,:), allocatable | last_rain |
real, dimension(:,:), allocatable | last_snow |
real, dimension(:,:), allocatable | this_precip |
integer, parameter | npoints =8 |
real, dimension(npoints) | dist_fraction = [ 0.1,0.15,0.1, 0.15,0.15, 0.1,0.15,0.1] |
integer, dimension(npoints) | x_list = [ -1,0,1, -1,1, -1,0,1] |
integer, dimension(npoints) | y_list = [ 1,1,1, 0,0, -1,-1,-1] |
This module provides a wrapper to call various microphysics models It sets up variables specific to the physics package to be used including history variables not currently stored in the domain level data structure
The main entry point to the code is mp(domain,options,dt)
Call tree graph : mp_init->[ external initialization routines] mp->[ external microphysics routines] mp_finish
High level routine descriptions / purpose mp_init - allocates module data and initializes physics package mp - sets up and calls main physics package mp_finish - deallocates module memory, place to do the same for physics
Inputs: domain, options, dt domain,options = as defined in data_structures dt = time step (seconds)
subroutine microphysics::distribute_precip | ( | real, dimension(:,:), intent(inout) | current_precip, |
real, dimension(:,:), intent(inout) | last_precip, | ||
real, intent(in) | local_fraction | ||
) |
Distribute the microphysics precipitation to neighboring grid cells
Because ICAR can be too aggressive at putting precip on mountain tops, this routine smooths out the precip by keeping only a fraction of it locally, and distributing the rest to the neighboring grid cells, weighted by distance.
[in,out] | accumulated model precip at this time step | |
[in] | accumulated model precip prior to microphysics call | |
[in] | fraction of precip to maintain in the local gridcell |
subroutine microphysics::mp | ( | type(domain_type), intent(inout) | domain, |
type(options_type), intent(in) | options, | ||
real, intent(in) | dt_in, | ||
double precision, intent(in) | model_time | ||
) |
Microphysical driver
This routine handles calling the individual microphysics routine specified, that includes creating and passing any temporary variables, and checking when to update the microphysics based on the specified update_interval.
domain | ICAR model domain structure |
options | ICAR model options structure |
dt_in | Current driving time step (this is the advection step) |
model_time | Current model time (to check if it will exceed the update_interval) |
subroutine microphysics::mp_finish | ( | type(options_type), intent(in) | options | ) |
Finalize microphysical routines
This routine will call the finalization routines (if any) for the specified microphysics packages. It also deallocates any module level variables, e.g. SR
options | ICAR model options to specify required initializations |
subroutine microphysics::mp_init | ( | type(options_type), intent(in) | options | ) |
Initialize microphysical routines
This routine will call the initialization routines for the specified microphysics packages. It also initializes any module level variables, e.g. update_interval
options | ICAR model options to specify required initializations |
real, dimension(npoints) microphysics::dist_fraction = [ 0.1,0.15,0.1, 0.15,0.15, 0.1,0.15,0.1] |
real*8 microphysics::last_model_time |
real, dimension(:,:), allocatable microphysics::last_rain |
real, dimension(:,:), allocatable microphysics::last_snow |
integer, parameter microphysics::npoints =8 |
real, dimension(:,:), allocatable microphysics::sr |
real, dimension(:,:), allocatable microphysics::this_precip |
integer microphysics::update_interval |
integer, dimension(npoints) microphysics::x_list = [ -1,0,1, -1,1, -1,0,1] |
integer, dimension(npoints) microphysics::y_list = [ 1,1,1, 0,0, -1,-1,-1] |