#
# namelist  type  namelist_record  name  default_value
#
namelist integer   sw_model config_test_case            5
namelist character sw_model config_time_integration     SRK3
namelist real      sw_model config_dt                   172.8
namelist integer   sw_model config_ntimesteps           7500
namelist integer   sw_model config_output_interval      500
namelist real      sw_model config_h_mom_eddy_visc2     0.0
namelist real      sw_model config_h_mom_eddy_visc4     0.0
namelist real      sw_model config_v_mom_eddy_visc2     0.0
namelist real      sw_model config_h_theta_eddy_visc2   0.0
namelist real      sw_model config_h_theta_eddy_visc4   0.0
namelist real      sw_model config_v_theta_eddy_visc2   0.0
namelist integer   sw_model config_number_of_sub_steps  4
namelist integer   sw_model config_theta_adv_order      2
namelist integer   sw_model config_scalar_adv_order     2
namelist logical   sw_model config_positive_definite    false
namelist logical   sw_model config_monotonic            true
namelist integer   sw_model config_mp_physics           0
namelist real      sw_model config_apvm_upwinding       0.5
namelist integer   dimensions config_nvertlevels        26
namelist character io       config_input_name           grid.nc
namelist character io       config_output_name          output.nc
namelist character io       config_restart_name         restart.nc
namelist character io       config_decomp_file_prefix   graph.info.part.
namelist integer   restart  config_restart_interval     0
namelist logical   restart  config_do_restart           false
namelist real      restart  config_restart_time         172800.0

#
# dim  type  name_in_file  name_in_code
#
dim nCells nCells
dim nEdges nEdges
dim maxEdges maxEdges
dim maxEdges2 maxEdges2
dim nVertices nVertices
dim TWO 2
dim vertexDegree vertexDegree
dim FIFTEEN 15
dim TWENTYONE 21
dim R3 3
#dim nVertLevels nVertLevels
dim nVertLevels namelist:config_nvertlevels
#dim nTracers nTracers
dim nVertLevelsP1 nVertLevels+1

#
# var persistence type  name_in_file  ( dims )  time_levs iro-  name_in_code struct super-array array_class
#
var persistent real    xtime ( Time ) 2 ro xtime state - -

var persistent real    latCell ( nCells ) 0 iro latCell mesh - -
var persistent real    lonCell ( nCells ) 0 iro lonCell mesh - -
var persistent real    xCell ( nCells ) 0 iro xCell mesh - -
var persistent real    yCell ( nCells ) 0 iro yCell mesh - -
var persistent real    zCell ( nCells ) 0 iro zCell mesh - -
var persistent integer indexToCellID ( nCells ) 0 iro indexToCellID mesh - -

var persistent real    latEdge ( nEdges ) 0 iro latEdge mesh - -
var persistent real    lonEdge ( nEdges ) 0 iro lonEdge mesh - -
var persistent real    xEdge ( nEdges ) 0 iro xEdge mesh - -
var persistent real    yEdge ( nEdges ) 0 iro yEdge mesh - -
var persistent real    zEdge ( nEdges ) 0 iro zEdge mesh - -
var persistent integer indexToEdgeID ( nEdges ) 0 iro indexToEdgeID mesh - -

var persistent real    latVertex ( nVertices ) 0 iro latVertex mesh - -
var persistent real    lonVertex ( nVertices ) 0 iro lonVertex mesh - -
var persistent real    xVertex ( nVertices ) 0 iro xVertex mesh - -
var persistent real    yVertex ( nVertices ) 0 iro yVertex mesh - -
var persistent real    zVertex ( nVertices ) 0 iro zVertex mesh - -
var persistent integer indexToVertexID ( nVertices ) 0 iro indexToVertexID mesh - -

var persistent integer cellsOnEdge ( TWO nEdges ) 0 iro cellsOnEdge mesh - -
var persistent integer nEdgesOnCell ( nCells ) 0 iro nEdgesOnCell mesh - -
var persistent integer nEdgesOnEdge ( nEdges ) 0 iro nEdgesOnEdge mesh - -
var persistent integer edgesOnCell ( maxEdges nCells ) 0 iro edgesOnCell mesh - -
var persistent integer edgesOnEdge ( maxEdges2 nEdges ) 0 iro edgesOnEdge mesh - -

var persistent real    weightsOnEdge ( maxEdges2 nEdges ) 0 iro weightsOnEdge mesh - -
var persistent real    dvEdge ( nEdges ) 0 iro dvEdge mesh - -
var persistent real    dcEdge ( nEdges ) 0 iro dcEdge mesh - -
var persistent real    angleEdge ( nEdges ) 0 iro angleEdge mesh - -
var persistent real    areaCell ( nCells ) 0 iro areaCell mesh - -
var persistent real    areaTriangle ( nVertices ) 0 iro areaTriangle mesh - -

var persistent real    edgeNormalVectors ( R3 nEdges ) 0 o edgeNormalVectors mesh - -
var persistent real    localVerticalUnitVectors ( R3 nCells ) 0 o localVerticalUnitVectors mesh - -
var persistent real    cellTangentPlane ( R3 TWO nEdges ) 0 o cellTangentPlane mesh - -

var persistent integer cellsOnCell ( maxEdges nCells ) 0 iro cellsOnCell mesh - -
var persistent integer verticesOnCell ( maxEdges nCells ) 0 iro verticesOnCell mesh - -
var persistent integer verticesOnEdge ( TWO nEdges ) 0 iro verticesOnEdge mesh - -
var persistent integer edgesOnVertex ( vertexDegree nVertices ) 0 iro edgesOnVertex mesh - -
var persistent integer cellsOnVertex ( vertexDegree nVertices ) 0 iro cellsOnVertex mesh - -
var persistent real    kiteAreasOnVertex ( vertexDegree nVertices ) 0 iro kiteAreasOnVertex mesh - -
var persistent real    fEdge ( nEdges ) 0 iro fEdge mesh - -
var persistent real    fVertex ( nVertices ) 0 iro fVertex mesh - -
var persistent real    h_s ( nCells ) 0 iro h_s mesh - -

# description of the vertical grid structure
var persistent real    rdnu ( nVertLevels ) 0 iro rdnu mesh - -
var persistent real    rdnw ( nVertLevels ) 0 iro rdnw mesh - -
var persistent real    fnm ( nVertLevels ) 0 iro fnm mesh - -
var persistent real    fnp ( nVertLevels ) 0 iro fnp mesh - -
var persistent real    dbn ( nVertLevels ) 0 iro dbn mesh - -
var persistent real    dnu ( nVertLevels ) 0 iro dnu mesh - -
var persistent real    dnw ( nVertLevels ) 0 iro dnw mesh - -

# Prognostic variables: read from input, saved in restart, and written to output
var persistent real    u ( nVertLevels nEdges Time ) 2 iro u state - -
var persistent real    theta ( nVertLevels nCells Time ) 2 iro theta state - -
var persistent real    surface_pressure ( nCells Time ) 2 iro surface_pressure state - -
var persistent real    qv ( nVertLevels nCells Time ) 2 iro qv state scalars moist
var persistent real    qc ( nVertLevels nCells Time ) 2 iro qc state scalars moist
var persistent real    qr ( nVertLevels nCells Time ) 2 iro qr state scalars moist
#var persistent real    tracers ( nTracers nVertLevels nCells Time ) 2 iro state tracers - -

# state variables diagnosed from prognostic state
var persistent real    h ( nVertLevels nCells Time ) 2 ro h state - -
var persistent real    ww ( nVertLevelsP1 nCells Time ) 2 ro ww state - -
var persistent real    w ( nVertLevelsP1 nCells Time ) 2 ro w state - -
var persistent real    pressure ( nVertLevelsP1 nCells Time ) 2 ro pressure state - -
var persistent real    geopotential ( nVertLevelsP1 nCells Time ) 2 ro geopotential state - -
var persistent real    alpha ( nVertLevels nCells Time ) 2 iro alpha state - -

# Diagnostic fields: only written to output
var persistent real    v ( nVertLevels nEdges Time ) 2 o v state - -
var persistent real    divergence ( nVertLevels nCells Time ) 2 o divergence state - -
var persistent real    vorticity ( nVertLevels nVertices Time ) 2 o vorticity state - -
var persistent real    pv_edge ( nVertLevels nEdges Time ) 2 o pv_edge state - -
var persistent real    h_edge ( nVertLevels nEdges Time ) 2 o h_edge state - -
var persistent real    ke ( nVertLevels nCells Time ) 2 o ke state - -
var persistent real    pv_vertex ( nVertLevels nVertices Time ) 2 o pv_vertex state - -
var persistent real    pv_cell ( nVertLevels nCells Time ) 2 o pv_cell state - -
var persistent real    uReconstructX ( nVertLevels nCells Time ) 2 o uReconstructX state - -
var persistent real    uReconstructY ( nVertLevels nCells Time ) 2 o uReconstructY state - -
var persistent real    uReconstructZ ( nVertLevels nCells Time ) 2 o uReconstructZ state - -
var persistent real    uReconstructZonal ( nVertLevels nCells Time ) 2 o uReconstructZonal state - -
var persistent real    uReconstructMeridional ( nVertLevels nCells Time ) 2 o uReconstructMeridional state - -

# Tendency variables
var persistent real    tend_h ( nVertLevels nCells Time ) 1 - h tend - -
var persistent real    tend_u ( nVertLevels nEdges Time ) 1 - u tend - -
var persistent real    tend_vh ( nVertLevels nEdges Time ) 1 - vh tend - -
var persistent real    tend_theta ( nVertLevels nCells Time ) 1 - theta tend - -
var persistent real    tend_qv ( nVertLevels nCells Time ) 1 - qv tend scalars moist
var persistent real    tend_qc ( nVertLevels nCells Time ) 1 - qc tend scalars moist
var persistent real    tend_qr ( nVertLevels nCells Time ) 1 - qr tend scalars moist

# Other diagnostic variables: neither read nor written to any files
var persistent real    vh ( nVertLevels nEdges Time ) 2 - vh state - -
var persistent real    circulation ( nVertLevels nVertices Time ) 2 - circulation state - -
var persistent real    gradPVt ( nVertLevels nEdges Time ) 2 - gradPVt state - -
var persistent real    gradPVn ( nVertLevels nEdges Time ) 2 - gradPVn state - -

var persistent real    uhAvg ( nVertLevels nEdges ) 0 - uhAvg mesh - -
var persistent real    wwAvg ( nVertLevelsP1 nCells ) 0 - wwAvg mesh - -
var persistent real    qtot ( nVertLevels nCells ) 0 - qtot mesh - -
var persistent real    cqu  ( nVertLevels nEdges ) 0 - cqu mesh - -
var persistent real    h_diabatic  ( nVertLevels nCells ) 0 - h_diabatic mesh - -
var persistent real    dpsdt ( nCells ) 0 - dpsdt mesh - -

var persistent real    u_old ( nVertLevels nEdges ) 0 - u_old mesh - -
var persistent real    ww_old ( nVertLevelsP1 nCells ) 0 - ww_old mesh - -
var persistent real    theta_old ( nVertLevels nCells ) 0 - theta_old mesh - -
var persistent real    h_edge_old ( nVertLevels nEdges ) 0 - h_edge_old mesh - -
var persistent real    h_old ( nVertLevels nCells ) 0 - h_old mesh - -
var persistent real    pressure_old ( nVertLevelsP1 nCells ) 0 - pressure_old mesh - -
var persistent real    qv_old ( nVertLevels nCells ) 0 - qv_old mesh scalars_old moist_old
var persistent real    qc_old ( nVertLevels nCells ) 0 - qc_old mesh scalars_old moist_old
var persistent real    qr_old ( nVertLevels nCells ) 0 - qr_old mesh scalars_old moist_old
#var persistent real    tracers_old ( nTracers nVertLevels nCells ) 0 - tracers_old mesh - -

# Space needed for advection
var persistent real    deriv_two ( FIFTEEN TWO nEdges ) 0 o deriv_two mesh - -
var persistent integer advCells ( TWENTYONE nCells ) 0 - advCells mesh - -

# Arrays required for reconstruction of velocity field
var persistent real    coeffs_reconstruct ( R3 maxEdges nCells ) 0 - coeffs_reconstruct mesh - -

