Contact: B. Wyman Reviewers: Change history: WebCVS Log for bgrid_prog_var.f90
Initializes a derived-type variable that contains prognostic variables for the B-grid dynamical core.
This modules defines and initializes a derived-type variable (prog_var_type) that contains the following prognostic fields: surface pressure, temperature, momentum, and tracers. The main initialization interface allocates storage for a prog_var_type variable. Additional interfaces allocate storage for separate fields. All array storage includes the halo region when the allocation is done. There are also operators and interfaces for performing some simple operations between prog_var_type variables.
bgrid_horiz_mod bgrid_vert_mod bgrid_halo_mod bgrid_cold_start_mod fms_mod field_manager_mod tracer_manager_mod
use bgrid_prog_var_mod [, only: prog_var_type, prog_var_init, var_init, prog_var_times_scalar, prog_var_equals_scalar, prog_var_time_diff, open_prog_var_file, read_prog_var, write_prog_var ] prog_var_type derived-type that contains horizontal and vertical grid sizes, and the prognostic variables for pressure, momentum, temperature, and tracers. prog_var_init initializes prog_var_type variable (all data arrays are set to zero) var_init initializes storage for real arrays (sets to zero) prog_var_times_scalar multiplies the prognostic variables within a prog_var_type variable by a constant real scalar prog_var_time_diff performs explicit time differencing prog_var_equals_scalar assigns a scalar to all prognostic variables in a prog_var_type open_prog_var_file opens the restart file for bgrid prognostic variables read_prog_var reads the restart file for bgrid prognostic variables write_prog_var reads the restart file for bgrid prognostic variables
type prog_var_type --- integers (scalar) --- nlon = number of longitude points (first dimension) excludes halo points nlat = number of latitude points (second dimension) excludes halo points nlev = number of vertical levels ntrace = number of tracers ilb = lower bound (1st dimension) includes halo points iub = upper bound (1st dimension) includes halo points jlb = lower bound (2nd dimension) includes halo points jub = upper bound (2nd dimension) includes halo points klb = lower bound (3rd dimension) kub = upper bound (3rd dimension) --- prognostic fields (real arrays) --- ps = surface pressure [real, dimension (ilb:iub, jlb:jub) ] pssl = surface pressure at eta=1 (sea level) [real, dimension (ilb:iub, jlb:jub) ] u = zonal wind component [real, dimension (ilb:iub, jlb:jub, klb:kub) ] v = meridional wind component [real, dimension (ilb:iub, jlb:jub, klb:kub) ] t = temperature [real, dimension (ilb:iub, jlb:jub, klb:kub) ] r = arbitrary number of tracers (includes specific humidity) [real, dimension (ilb:iub, jlb:jub, klb:kub, 1:ntrace) ]
call prog_var_init ( Hgrid, nlev, ntrs, Vars ) INPUT Hgrid Derived-type variable containing horizontal grid constants. [type(horiz_grid_type), see horiz_grid_mod] nlev The number of full model levels for the prognostic variables. [integer] ntrs The total number of tracers. [integer] INPUT/OUTPUT Vars Derived-type variable containing the model's prognostic fields (see above). [type(prog_var_type)] --------------------------------------------------------------------- The interface var_init can take several forms. var => var_init ( Hgrid ) var => var_init ( Hgrid, kdim ) var => var_init ( Hgrid, kdim, ntrace ) var => var_init ( ilb, iub, jlb, jub ) var => var_init ( ilb, iub, jlb, jub, kdim ) var => var_init ( ilb, iub, jlb, jub, kdim, ntrace ) INPUT Hgrid Derived-type variable containing horizontal grid constants. [type(horiz_grid_type), see horiz_grid_mod] ilb Lower bound/index for first dimension. [integer] iub Upper bound/index for first dimension. [integer] jlb Lower bound/index for second dimension. [integer] jub Upper bound/index for second dimension. [integer] kdim The size of the third dimension (or level dimension). [integer] ntrace The size of the fourth dimension (or tracer dimension). [integer] RETURNS The returned value is a pointer to memory. Fields that are initialized this way must be declared at pointers. Use the following syntax: real, pointer :: var(:,:) or var(:,:,:) or var(:,:,:,:) --------------------------------------------------------------------- call prog_var_times_scalar ( Var, scalar ) INPUT/OUTPUT Var prog_var_type which on output will have the prognostic variable components (u,v,t,r,ps,pssl) multiplied by scalar INPUT scalar a real scalar quantity --------------------------------------------------------------------- call prog_var_equals_scalar ( Var, scalar ) INPUT/OUTPUT Var prog_var_type which on output will have the prognostic variable components (u,v,t,r,ps,pssl) multiplied by scalar INPUT scalar a real scalar quantity --------------------------------------------------------------------- call prog_var_time_diff ( dt, Var_dt, Var, nt ) INPUT dt time step [real] INPUT/OUTPUT Var_dt input value is the tendency for prognostic variables, the output value is zero [prog_var_type] Var the prognostic variables, the input values are at time level n, and the output values are at time level n+1 [prog_var_type] OPTIONAL INPUT nt number of tracers to be advanced in time, by default all tracers will be advanced from time n to n+1 --------------------------------------------------------------------- call open_prog_var_file ( ix, jx, kx ) OUTPUT ix, jx, kx The 3-dimensional size of a prognostic field. [integer] ------------------------------------------------------------- call read_prog_var ( Hgrid, Var, eta, peta, fis, res ) INPUT/OUTPUT Hgrid Var OUTPUT eta peta fis res ------------------------------------------------------------- call write_prog_var ( Var, Hgrid, Vgrid, fis, res ) INPUT Var Hgrid Vgrid fis res
None.
None.
None.
Need routines to release allocated memory. These may be called prog_var_end and var_end.