CAM
vertical_se Module Reference

Data Types

type  solver_args
 
type  velem_t
 

Functions/Subroutines

type(solver_args) function pack_solver_args (np1, nm1, n0, qn0, dt, hvcoord, hybrid, deriv, nets, nete, compute_diagnostics, eta_ave_w)
 
real(rl) elemental function s2eta (s_coord, eta_t, eta_b)
 
real(dd) elemental function eta2s (eta_coord, eta_t, eta_b)
 
real(rl) function, dimension(n, n) mass_matrix (gll, n)
 
real(rl) function, dimension(n) barycentric_weights (gll, n)
 
real(rl) function, dimension(n, n) first_derivative_matrix (gll, n)
 
real(rl) function, dimension(np, np) column_sum (f)
 
real(rl) function, dimension(n_uniquecompress (f)
 
real(rl) function, dimension(nlev) decompress (f)
 
subroutine precompute_lu ()
 
real(rl) function, dimension(npv, nrhs) solve_lu (B, LU, ipiv, NRHS)
 
real(rl) function, dimension(mleast_squares_integral (B, A)
 
real(rl) function, dimension(msolve (A, B, M)
 
real(rl) function, dimension(np, np, nlev) eta_integral_from_1 (f, bc_1)
 
real(rl) function, dimension(np, np, nlev) eta_integral_from_n (f, bc_n)
 
real(rl) function, dimension(nlev) eta_derivative_1d (f)
 
real(rl) function, dimension(np, np, nlev) eta_derivative (f)
 
real(rl) function, dimension(np, np, nlev) eta_derivative_pow (f, x)
 
real(rl) function, dimension(ni) evenly_spaced_eta_coords (ni)
 
real(rl) function, dimension(np, np, nlev) advection (f, u, v, eta_dot, a, elem)
 
real(rl) function, dimension(np, np, nlev) advection2 (f, df_deta, u, v, eta_dot, a, elem)
 
real(rl) function, dimension(np, np, 2, nlev) self_advection (u, v, eta_dot, a, elem)
 
real(rl) function, dimension(np, np, 2, nlev) self_advection2 (u, v, du_dn, dv_dn, eta_dot, a, elem)
 
subroutine vertical_dss (f)
 
subroutine vertical_dss_1d (f)
 
real(rl) function, dimension(size(s)) lagrange_polynomial (s, j, gll)
 
subroutine init_vertical_interp (levels, ni)
 
real(rl) function, dimension(ni) v_interpolate (f, ni)
 
real(rl) function, dimension(ni, nlev) vertical_interp_matrix (s, ni)
 
subroutine neumann_bcs_bottom_elem (f, dfdn)
 
subroutine neumann_bcs_top_elem (f, dfdn)
 
subroutine neumann_bcs_bottom (f, dfdn)
 
subroutine neumann_bcs_top (f, dfdn)
 
subroutine neumann_bcs_top_bottom (f, dfdn_t, dfdn_b)
 
subroutine set_hvcoeffs_from_etai (hvcoord, hybrid)
 
subroutine append_scalar_to_file (filename, scalar, erase)
 
subroutine write_scalar_field_1d (filename, field)
 
subroutine write_scalar_field_2d (filename, field)
 
subroutine write_scalar_field_3d (filename, field)
 
subroutine make_vertical_mesh (hybrid, hvcoord)
 
subroutine test_vertical_operators (hybrid)
 

Variables

integer, parameter, public npv = 5
 
integer, parameter, public nev = nlev/npv
 
integer, parameter, public n_unique = nev*(npv-1)+1
 
real(rl), dimension(npv, npvddn
 
real(rl), dimension(npv, npvddn2
 
real(rl), dimension(npv, npvddn3
 
real(rl), dimension(npv, npvddn4
 
real(rl), dimension(npv, npvddn_1
 
real(rl), dimension(npv, npvddn_n
 
real(rl), dimension(npv, npvm
 
real(rl), dimension(npv, npvlu_1
 
real(rl), dimension(npv, npvlu_n
 
type(quadrature_tgll
 
real(rl) eta_t
 
real(rl) eta_b
 
real(rl) ds_deta
 
real(rl) deta_ds
 
real(rl), dimension(nlev) eta
 
real(rl), dimension(nlev) ddn_hyam
 
real(rl), dimension(nlev) ddn_hybm
 
real(rl), dimension(nlevp) ddn_hyai
 
real(rl), dimension(nlevp) ddn_hybi
 
integer, dimension(npvipiv_1
 
integer, dimension(npvipiv_n
 
type(velem_t), dimension(:), allocatable ev
 
real(rl) elem_height
 
real(rl), dimension(:,:), allocatable m_interp
 
real(rl), dimension(:), allocatable l_interp
 

Function/Subroutine Documentation

◆ advection()

real(rl) function, dimension (np,np,nlev) vertical_se::advection ( real(rl), dimension(np,np,nlev), intent(in)  f,
real(rl), dimension(np,np,nlev), intent(in)  u,
real(rl), dimension(np,np,nlev), intent(in)  v,
real(rl), dimension(np,np,nlev), intent(in)  eta_dot,
type(solver_args), intent(in)  a,
type (element_t), intent(in), target  elem 
)
Here is the call graph for this function:

◆ advection2()

real(rl) function, dimension (np,np,nlev) vertical_se::advection2 ( real(rl), dimension(np,np,nlev), intent(in)  f,
real(rl), dimension(np,np,nlev), intent(in)  df_deta,
real(rl), dimension(np,np,nlev), intent(in)  u,
real(rl), dimension(np,np,nlev), intent(in)  v,
real(rl), dimension(np,np,nlev), intent(in)  eta_dot,
type(solver_args), intent(in)  a,
type (element_t), intent(in), target  elem 
)

◆ append_scalar_to_file()

subroutine vertical_se::append_scalar_to_file ( character*(*), intent(in)  filename,
real(rl), intent(in)  scalar,
logical, intent(in)  erase 
)

◆ barycentric_weights()

real(rl) function, dimension(n) vertical_se::barycentric_weights ( type (quadrature_t), intent(in)  gll,
integer, intent(in)  n 
)
Here is the caller graph for this function:

◆ column_sum()

real (rl) function, dimension(np,np) vertical_se::column_sum ( real (rl), dimension(np,np,nlev), intent(in)  f)

◆ compress()

real(rl) function, dimension(n_unique) vertical_se::compress ( real(rl), dimension(nlev), intent(in)  f)

◆ decompress()

real(rl) function, dimension(nlev) vertical_se::decompress ( real(rl), dimension(n_unique), intent(in)  f)

◆ eta2s()

real(dd) elemental function vertical_se::eta2s ( real(rl), intent(in)  eta_coord,
real(rl), intent(in)  eta_t,
real(rl), intent(in)  eta_b 
)
Here is the caller graph for this function:

◆ eta_derivative()

real (rl) function, dimension(np,np,nlev) vertical_se::eta_derivative ( real (rl), dimension(np,np,nlev), intent(in)  f)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eta_derivative_1d()

real (rl) function, dimension(nlev) vertical_se::eta_derivative_1d ( real (rl), dimension(nlev), intent(in)  f)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eta_derivative_pow()

real (rl) function, dimension(np,np,nlev) vertical_se::eta_derivative_pow ( real (rl), dimension(np,np,nlev), intent(in)  f,
integer, intent(in)  x 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eta_integral_from_1()

real (rl) function, dimension(np,np,nlev) vertical_se::eta_integral_from_1 ( real (rl), dimension(np,np,nlev), intent(in)  f,
real (rl), dimension(np,np), intent(in)  bc_1 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eta_integral_from_n()

real (rl) function, dimension(np,np,nlev) vertical_se::eta_integral_from_n ( real (rl), dimension(np,np,nlev), intent(in)  f,
real (rl), dimension(np,np), intent(in)  bc_n 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ evenly_spaced_eta_coords()

real(rl) function, dimension(ni) vertical_se::evenly_spaced_eta_coords ( integer  ni)
Here is the caller graph for this function:

◆ first_derivative_matrix()

real(rl) function, dimension(n,n) vertical_se::first_derivative_matrix ( type (quadrature_t), intent(in)  gll,
integer, intent(in)  n 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ init_vertical_interp()

subroutine vertical_se::init_vertical_interp ( real(rl), dimension(ni), intent(in)  levels,
integer, intent(in)  ni 
)
Here is the call graph for this function:

◆ lagrange_polynomial()

real(rl) function, dimension(size(s)) vertical_se::lagrange_polynomial ( real(rl), dimension(:), intent(in)  s,
integer, intent(in)  j,
type (quadrature_t), intent(in)  gll 
)
Here is the caller graph for this function:

◆ least_squares_integral()

real(rl) function, dimension(m) vertical_se::least_squares_integral ( real(rl), dimension(npv), intent(in)  B,
real(rl), dimension(npv,npv), intent(in)  A 
)

◆ make_vertical_mesh()

subroutine vertical_se::make_vertical_mesh ( type (hybrid_t), intent(in)  hybrid,
type (hvcoord_t), intent(inout)  hvcoord 
)
Here is the call graph for this function:

◆ mass_matrix()

real(rl) function, dimension(n,n) vertical_se::mass_matrix ( type (quadrature_t), intent(in)  gll,
integer, intent(in)  n 
)
Here is the caller graph for this function:

◆ neumann_bcs_bottom()

subroutine vertical_se::neumann_bcs_bottom ( real(rl), dimension(np,np,nlev), intent(inout)  f,
real(rl), dimension(np,np), intent(in)  dfdn 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neumann_bcs_bottom_elem()

subroutine vertical_se::neumann_bcs_bottom_elem ( real(rl), dimension(np,np,npv), intent(inout)  f,
real(rl), dimension(np,np), intent(in)  dfdn 
)
Here is the caller graph for this function:

◆ neumann_bcs_top()

subroutine vertical_se::neumann_bcs_top ( real(rl), dimension(np,np,nlev), intent(inout)  f,
real(rl), dimension(np,np), intent(in)  dfdn 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ neumann_bcs_top_bottom()

subroutine vertical_se::neumann_bcs_top_bottom ( real(rl), dimension(np,np,nlev), intent(inout)  f,
real(rl), dimension(np,np), intent(in)  dfdn_t,
real(rl), dimension(np,np), intent(in)  dfdn_b 
)
Here is the call graph for this function:

◆ neumann_bcs_top_elem()

subroutine vertical_se::neumann_bcs_top_elem ( real(rl), dimension(np,np,npv), intent(inout)  f,
real(rl), dimension(np,np), intent(in)  dfdn 
)
Here is the caller graph for this function:

◆ pack_solver_args()

type(solver_args) function vertical_se::pack_solver_args ( integer, intent(in)  np1,
integer, intent(in)  nm1,
integer, intent(in)  n0,
integer, intent(in)  qn0,
real*8, intent(in)  dt,
type (hvcoord_t), intent(in)  hvcoord,
type (hybrid_t), intent(in)  hybrid,
type (derivative_t), intent(in)  deriv,
integer, intent(in)  nets,
integer, intent(in)  nete,
logical, intent(in)  compute_diagnostics,
real (rl), intent(in)  eta_ave_w 
)

◆ precompute_lu()

subroutine vertical_se::precompute_lu ( )
Here is the caller graph for this function:

◆ s2eta()

real(rl) elemental function vertical_se::s2eta ( real(dd), intent(in)  s_coord,
real(rl), intent(in)  eta_t,
real(rl), intent(in)  eta_b 
)
Here is the caller graph for this function:

◆ self_advection()

real(rl) function, dimension(np,np,2,nlev) vertical_se::self_advection ( real(rl), dimension(np,np,nlev), intent(in)  u,
real(rl), dimension(np,np,nlev), intent(in)  v,
real(rl), dimension(np,np,nlev), intent(in)  eta_dot,
type(solver_args), intent(in)  a,
type (element_t), intent(in), target  elem 
)
Here is the call graph for this function:

◆ self_advection2()

real(rl) function, dimension(np,np,2,nlev) vertical_se::self_advection2 ( real(rl), dimension(np,np,nlev), intent(in)  u,
real(rl), dimension(np,np,nlev), intent(in)  v,
real(rl), dimension(np,np,nlev), intent(in)  du_dn,
real(rl), dimension(np,np,nlev), intent(in)  dv_dn,
real(rl), dimension(np,np,nlev), intent(in)  eta_dot,
type(solver_args), intent(in)  a,
type (element_t), intent(in), target  elem 
)

◆ set_hvcoeffs_from_etai()

subroutine vertical_se::set_hvcoeffs_from_etai ( type(hvcoord_t), intent(inout)  hvcoord,
type(hybrid_t), intent(in)  hybrid 
)
Here is the caller graph for this function:

◆ solve()

real(rl) function, dimension(m) vertical_se::solve ( real(rl), dimension(m,m), intent(in)  A,
real(rl), dimension(m), intent(in)  B,
integer, intent(in)  M 
)

◆ solve_lu()

real(rl) function, dimension(npv,nrhs) vertical_se::solve_lu ( real(rl), dimension(npv,nrhs), intent(in)  B,
real(rl), dimension(npv,npv), intent(in)  LU,
integer, dimension(npv), intent(in)  ipiv,
integer, intent(in)  NRHS 
)
Here is the caller graph for this function:

◆ test_vertical_operators()

subroutine vertical_se::test_vertical_operators ( type (hybrid_t), intent(in)  hybrid)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ v_interpolate()

real(rl) function, dimension(ni) vertical_se::v_interpolate ( real(rl), dimension(nlev), intent(in)  f,
integer, intent(in)  ni 
)

◆ vertical_dss()

subroutine vertical_se::vertical_dss ( real(rl), dimension(np,np,nlev), intent(inout)  f)
Here is the caller graph for this function:

◆ vertical_dss_1d()

subroutine vertical_se::vertical_dss_1d ( real(rl), dimension(nlev), intent(inout)  f)
Here is the caller graph for this function:

◆ vertical_interp_matrix()

real(rl) function, dimension(ni,nlev ) vertical_se::vertical_interp_matrix ( real(rl), dimension(:), intent(in)  s,
integer  ni 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_scalar_field_1d()

subroutine vertical_se::write_scalar_field_1d ( character*(*), intent(in)  filename,
real(rl), dimension(:), intent(in)  field 
)
Here is the caller graph for this function:

◆ write_scalar_field_2d()

subroutine vertical_se::write_scalar_field_2d ( character*(*), intent(in)  filename,
real(rl), dimension(:,:), intent(in)  field 
)

◆ write_scalar_field_3d()

subroutine vertical_se::write_scalar_field_3d ( character*(*), intent(in)  filename,
real(rl), dimension(:,:,:), intent(in)  field 
)

Variable Documentation

◆ ddn

real(rl), dimension(npv,npv) vertical_se::ddn

◆ ddn2

real(rl), dimension(npv,npv) vertical_se::ddn2

◆ ddn3

real(rl), dimension(npv,npv) vertical_se::ddn3

◆ ddn4

real(rl), dimension(npv,npv) vertical_se::ddn4

◆ ddn_1

real(rl), dimension(npv,npv) vertical_se::ddn_1

◆ ddn_hyai

real(rl), dimension(nlevp) vertical_se::ddn_hyai

◆ ddn_hyam

real(rl), dimension(nlev) vertical_se::ddn_hyam

◆ ddn_hybi

real(rl), dimension(nlevp) vertical_se::ddn_hybi

◆ ddn_hybm

real(rl), dimension(nlev) vertical_se::ddn_hybm

◆ ddn_n

real(rl), dimension(npv,npv) vertical_se::ddn_n

◆ deta_ds

real(rl) vertical_se::deta_ds

◆ ds_deta

real(rl) vertical_se::ds_deta

◆ elem_height

real(rl) vertical_se::elem_height

◆ eta

real(rl), dimension(nlev) vertical_se::eta

◆ eta_b

real(rl) vertical_se::eta_b

◆ eta_t

real(rl) vertical_se::eta_t

◆ ev

type(velem_t), dimension(:), allocatable vertical_se::ev

◆ gll

type (quadrature_t) vertical_se::gll

◆ ipiv_1

integer, dimension(npv) vertical_se::ipiv_1

◆ ipiv_n

integer, dimension(npv) vertical_se::ipiv_n

◆ l_interp

real(rl), dimension(:), allocatable vertical_se::l_interp

◆ lu_1

real(rl), dimension(npv,npv) vertical_se::lu_1

◆ lu_n

real(rl), dimension(npv,npv) vertical_se::lu_n

◆ m

real(rl), dimension(npv,npv) vertical_se::m

◆ m_interp

real(rl), dimension(:,:), allocatable vertical_se::m_interp

◆ n_unique

integer, parameter, public vertical_se::n_unique = nev*(npv-1)+1

◆ nev

integer, parameter, public vertical_se::nev = nlev/npv

◆ npv

integer, parameter, public vertical_se::npv = 5