#!/usr/bin/env python

# CCPP prebuild config for GFDL Finite-Volume Cubed-Sphere Model (FV3)


###############################################################################
# Definitions                                                                 #
###############################################################################

HOST_MODEL_IDENTIFIER = "FV3"

# Add all files with metadata tables on the host model side and in CCPP,
# relative to basedir = top-level directory of host model. This includes
# kind and type definitions used in CCPP physics. Also add any internal
# dependencies of these files to the list.
VARIABLE_DEFINITION_FILES = [
    # actual variable definition files
    'framework/src/ccpp_types.F90',
    'physics/physics/machine.F',
    'physics/physics/radsw_param.f',
    'physics/physics/radlw_param.f',
    'physics/physics/h2o_def.f',
    'physics/physics/ozne_def.f',
    'physics/physics/radiation_surface.f',
    'physics/physics/rte-rrtmgp/rrtmgp/mo_gas_optics_rrtmgp.F90',
    'physics/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90',
    'physics/physics/rte-rrtmgp/rte/mo_optical_props.F90',
    'physics/physics/rte-rrtmgp/extensions/cloud_optics/mo_cloud_optics.F90',
    'physics/physics/rte-rrtmgp/rte/mo_source_functions.F90',
    'data/CCPP_typedefs.F90',
    'data/GFS_typedefs.F90',
    'data/CCPP_data.F90',
    ]

TYPEDEFS_NEW_METADATA = {
    'ccpp_types' : {
        'ccpp_t' : 'cdata',
        'ccpp_types' : '',
        },
    'machine' : {
        'machine' : '',
        },
    'module_radlw_parameters' : {
        'module_radsw_parameters' : '',
        },
    'module_radlw_parameters' : {
        'module_radlw_parameters' : '',
        },
    'CCPP_typedefs' : {
        'GFS_interstitial_type' : 'GFS_Interstitial(cdata%thrd_no)',
        'GFDL_interstitial_type' : 'GFDL_interstitial',
        'CCPP_typedefs' : '',
        },
    'CCPP_data' : {
        'CCPP_data' : '',
        },
    'GFS_typedefs' : {
        'GFS_control_type'      : 'GFS_Control',
        'GFS_data_type'         : 'GFS_Data(cdata%blk_no)',
        'GFS_diag_type'         : 'GFS_Data(cdata%blk_no)%Intdiag',
        'GFS_tbd_type'          : 'GFS_Data(cdata%blk_no)%Tbd',
        'GFS_sfcprop_type'      : 'GFS_Data(cdata%blk_no)%Sfcprop',
        'GFS_coupling_type'     : 'GFS_Data(cdata%blk_no)%Coupling',
        'GFS_statein_type'      : 'GFS_Data(cdata%blk_no)%Statein',
        'GFS_cldprop_type'      : 'GFS_Data(cdata%blk_no)%Cldprop',
        'GFS_radtend_type'      : 'GFS_Data(cdata%blk_no)%Radtend',
        'GFS_grid_type'         : 'GFS_Data(cdata%blk_no)%Grid',
        'GFS_stateout_type'     : 'GFS_Data(cdata%blk_no)%Stateout',
        'GFS_typedefs' : '',
        },
    'mo_gas_concentrations' : {
        'ty_gas_concs' : '',
        'mo_gas_concentrations' : '',
        },
    'mo_gas_optics_rrtmgp' : {
        'ty_gas_optics_rrtmgp' : '',
        'mo_gas_optics_rrtmgp' : '',
        },
    'mo_optical_props' : {
        'ty_optical_props_1scl' : '',
        'ty_optical_props_2str' : '',
        'mo_optical_props' : '',
        },
    'mo_cloud_optics' : {
        'ty_cloud_optics' : '',
        'mo_cloud_optics' : '',
        },
    'mo_source_functions' : {
        'ty_source_func_lw' : '',
        'mo_source_functions' : '',
        },
    }

# Add all physics scheme files relative to basedir
SCHEME_FILES = [
    # Relative path to source (from where ccpp_prebuild.py is called) : [ list of physics sets in which scheme may be called ];
    # current restrictions are that each scheme can only belong to one physics set, and all schemes within one group in the
    # suite definition file have to belong to the same physics set
    'physics/physics/GFS_DCNV_generic_pre.F90',
    'physics/physics/GFS_DCNV_generic_post.F90',
    'physics/physics/GFS_GWD_generic_pre.F90',
    'physics/physics/GFS_GWD_generic_post.F90',
    'physics/physics/GFS_MP_generic_pre.F90',
    'physics/physics/GFS_MP_generic_post.F90',
    'physics/physics/GFS_PBL_generic_pre.F90',
    'physics/physics/GFS_PBL_generic_post.F90',
    'physics/physics/GFS_SCNV_generic_pre.F90',
    'physics/physics/GFS_SCNV_generic_post.F90',
    'physics/physics/GFS_debug.F90',
    'physics/physics/GFS_phys_time_vary.fv3.F90',
    'physics/physics/GFS_rad_time_vary.fv3.F90',
    'physics/physics/GFS_radiation_surface.F90',
    'physics/physics/GFS_rrtmg_post.F90',
    'physics/physics/GFS_rrtmg_pre.F90',
    'physics/physics/GFS_rrtmg_setup.F90',
    'physics/physics/GFS_stochastics.F90',
    'physics/physics/GFS_suite_interstitial_rad_reset.F90',
    'physics/physics/GFS_suite_interstitial_phys_reset.F90',
    'physics/physics/GFS_suite_interstitial_1.F90',
    'physics/physics/GFS_suite_interstitial_2.F90',
    'physics/physics/GFS_suite_stateout_reset.F90',
    'physics/physics/GFS_suite_stateout_update.F90',
    'physics/physics/GFS_suite_interstitial_3.F90',
    'physics/physics/GFS_suite_interstitial_4.F90',
    'physics/physics/GFS_suite_interstitial_5.F90',
    'physics/physics/GFS_surface_generic_pre.F90',
    'physics/physics/GFS_surface_generic_post.F90',
    'physics/physics/GFS_surface_composites_pre.F90',
    'physics/physics/GFS_surface_composites_inter.F90',
    'physics/physics/GFS_surface_composites_post.F90',
    'physics/physics/GFS_surface_loop_control_part1.F90',
    'physics/physics/GFS_surface_loop_control_part2.F90',
    'physics/physics/GFS_time_vary_pre.fv3.F90',
    'physics/physics/cires_ugwp.F90',
    'physics/physics/cires_ugwp_post.F90',
    'physics/physics/unified_ugwp.F90',
    'physics/physics/unified_ugwp_post.F90',
    'physics/physics/ugwpv1_gsldrag.F90',
    'physics/physics/ugwpv1_gsldrag_post.F90',
    'physics/physics/cnvc90.f',
    'physics/physics/cs_conv_pre.F90',
    'physics/physics/cs_conv.F90',
    'physics/physics/cs_conv_post.F90',
    'physics/physics/cs_conv_aw_adj.F90',
    'physics/physics/cu_ntiedtke_pre.F90',
    'physics/physics/cu_ntiedtke.F90',
    'physics/physics/cu_ntiedtke_post.F90',
    'physics/physics/dcyc2t3.f',
    'physics/physics/drag_suite.F90',
    'physics/physics/shoc.F90',
    'physics/physics/get_prs_fv3.F90',
    'physics/physics/get_phi_fv3.F90',
    'physics/physics/gfdl_cloud_microphys.F90',
    'physics/physics/fv_sat_adj.F90',
    'physics/physics/gfdl_sfc_layer.F90',
    'physics/physics/zhaocarr_gscond.f',
    'physics/physics/gwdc_pre.f',
    'physics/physics/gwdc.f',
    'physics/physics/gwdc_post.f',
    'physics/physics/gwdps.f',
    'physics/physics/h2ophys.f',
    'physics/physics/samfdeepcnv.f',
    'physics/physics/samfshalcnv.f',
    'physics/physics/sascnvn.F',
    'physics/physics/shalcnv.F',
    'physics/physics/maximum_hourly_diagnostics.F90',
    'physics/physics/m_micro.F90',
    'physics/physics/m_micro_pre.F90',
    'physics/physics/m_micro_post.F90',
    'physics/physics/cu_gf_driver_pre.F90',
    'physics/physics/cu_gf_driver.F90',
    'physics/physics/cu_gf_driver_post.F90',
    'physics/physics/hedmf.f',
    'physics/physics/moninshoc.f',
    'physics/physics/satmedmfvdif.F',
    'physics/physics/satmedmfvdifq.F',
    'physics/physics/shinhongvdif.F90',
    'physics/physics/ysuvdif.F90',
    'physics/physics/mynnedmf_wrapper.F90',
    'physics/physics/mynnsfc_wrapper.F90',
    'physics/physics/sgscloud_radpre.F90',
    'physics/physics/sgscloud_radpost.F90',
    'physics/physics/myjsfc_wrapper.F90',
    'physics/physics/myjpbl_wrapper.F90',
    'physics/physics/mp_thompson_pre.F90',
    'physics/physics/mp_thompson.F90',
    'physics/physics/mp_thompson_post.F90',
    'physics/physics/mp_nssl.F90'                      ,
    'physics/physics/ozphys.f',
    'physics/physics/ozphys_2015.f',
    'physics/physics/zhaocarr_precpd.f',
    'physics/physics/phys_tend.F90',
    'physics/physics/radlw_main.F90',
    'physics/physics/radsw_main.F90',
    'physics/physics/rascnv.F90',
    'physics/physics/rayleigh_damp.f',
    'physics/physics/rrtmg_lw_post.F90',
    'physics/physics/rrtmg_lw_pre.F90',
    'physics/physics/rrtmg_sw_post.F90',
    'physics/physics/rad_sw_pre.F90',
    'physics/physics/sfc_diag.f',
    'physics/physics/sfc_diag_post.F90',
    'physics/physics/lsm_ruc.F90',
    'physics/physics/sfc_cice.f',
    'physics/physics/sfc_diff.f',
    'physics/physics/lsm_noah.f',
    'physics/physics/noahmpdrv.F90',
    'physics/physics/flake_driver.F90',
    'physics/physics/sfc_nst_pre.f',
    'physics/physics/sfc_nst.f',
    'physics/physics/sfc_nst_post.f',
    'physics/physics/sfc_ocean.F',
    'physics/physics/sfc_sice.f',
    # HAFS FER_HIRES
    'physics/physics/mp_fer_hires.F90',
    # SMOKE
    'physics/smoke/rrfs_smoke_wrapper.F90',
    'physics/smoke/rrfs_smoke_postpbl.F90',
    'physics/smoke/rrfs_smoke_lsdep_wrapper.F90',
    # RRTMGP
    'physics/physics/rrtmgp_lw_gas_optics.F90',
    'physics/physics/rrtmgp_lw_cloud_optics.F90',
    'physics/physics/rrtmgp_sw_gas_optics.F90',
    'physics/physics/rrtmgp_sw_cloud_optics.F90',
    'physics/physics/rrtmgp_aerosol_optics.F90',
    'physics/physics/rrtmgp_lw_rte.F90',
    'physics/physics/rrtmgp_sw_rte.F90',
    'physics/physics/GFS_rrtmgp_setup.F90',
    'physics/physics/GFS_rrtmgp_pre.F90',
    'physics/physics/rrtmgp_lw_pre.F90',
    'physics/physics/GFS_rrtmgp_lw_post.F90',
    'physics/physics/rrtmgp_lw_cloud_sampling.F90',
    'physics/physics/rrtmgp_sw_cloud_sampling.F90',
    'physics/physics/GFS_cloud_diagnostics.F90',
    'physics/physics/GFS_rrtmgp_cloud_mp.F90',
    'physics/physics/GFS_rrtmgp_cloud_overlap.F90',
    'physics/physics/GFS_rrtmgp_sw_post.F90'
    ]

# Default build dir, relative to current working directory,
# if not specified as command-line argument
DEFAULT_BUILD_DIR = 'build'

# Auto-generated makefile/cmakefile snippets that contain all type definitions
TYPEDEFS_MAKEFILE   = '{build_dir}/physics/CCPP_TYPEDEFS.mk'
TYPEDEFS_CMAKEFILE  = '{build_dir}/physics/CCPP_TYPEDEFS.cmake'
TYPEDEFS_SOURCEFILE = '{build_dir}/physics/CCPP_TYPEDEFS.sh'

# Auto-generated makefile/cmakefile snippets that contain all schemes
SCHEMES_MAKEFILE   = '{build_dir}/physics/CCPP_SCHEMES.mk'
SCHEMES_CMAKEFILE  = '{build_dir}/physics/CCPP_SCHEMES.cmake'
SCHEMES_SOURCEFILE = '{build_dir}/physics/CCPP_SCHEMES.sh'

# Auto-generated makefile/cmakefile snippets that contain all caps
CAPS_MAKEFILE   = '{build_dir}/physics/CCPP_CAPS.mk'
CAPS_CMAKEFILE  = '{build_dir}/physics/CCPP_CAPS.cmake'
CAPS_SOURCEFILE = '{build_dir}/physics/CCPP_CAPS.sh'

# Directory where to put all auto-generated physics caps
CAPS_DIR = '{build_dir}/physics'

# Directory where the suite definition files are stored
SUITES_DIR = 'suites'

# Directory where to write static API to
STATIC_API_DIR = '{build_dir}/physics'
STATIC_API_CMAKEFILE = '{build_dir}/physics/CCPP_STATIC_API.cmake'
STATIC_API_SOURCEFILE = '{build_dir}/physics/CCPP_STATIC_API.sh'

# Directory for writing HTML pages generated from metadata files
# used by metadata2html.py for generating scientific documentation
METADATA_HTML_OUTPUT_DIR = '{build_dir}/physics/physics/docs'

# HTML document containing the model-defined CCPP variables
HTML_VARTABLE_FILE = '{build_dir}/physics/CCPP_VARIABLES_FV3.html'

# LaTeX document containing the provided vs requested CCPP variables
LATEX_VARTABLE_FILE = '{build_dir}/framework/doc/DevelopersGuide/CCPP_VARIABLES_FV3.tex'