def METHOD_NAME(prob_param_files, cxx_prefix):
    """write_probin will read through the list of parameter files and
    C++ header and source files to manage the runtime parameters"""
    params = []
    print(" ")
    print(f"write_probdata.py: creating prob_param C++ files")
    # read the parameters defined in the parameter files
    for f in prob_param_files:
        err = parse_param_file(params, f)
        if err:
            abort(f"Error parsing {f}")
    # now handle the C++ -- we need to write a header and a .cpp file
    # for the parameters
    cxx_base = os.path.basename(cxx_prefix)
    ofile = f"{cxx_prefix}_parameters.H"
    with open(ofile, "w") as fout:
        fout.write(CXX_HEADER)
        fout.write(f"  void init_{cxx_base}_parameters();\n\n")
        fout.write("  namespace problem {\n\n")
        for p in params:
            if p.dtype == "string":
                fout.write(f"  extern std::string {p.name};\n\n")
            else:
                if p.is_array():
                    if p.size == "nspec":
                        fout.write(f"  extern AMREX_GPU_MANAGED {p.get_cxx_decl()} {p.name}[NumSpec];\n\n")
                    else:
                        fout.write(f"  extern AMREX_GPU_MANAGED {p.get_cxx_decl()} {p.name}[{p.size}];\n\n")
                else:
                    fout.write(f"  extern AMREX_GPU_MANAGED {p.get_cxx_decl()} {p.name};\n\n")
        fout.write("  }\n\n")
        fout.write(CXX_FOOTER)
    # now the C++ job_info tests
    ofile = f"{cxx_prefix}_job_info_tests.H"
    with open(ofile, "w") as fout:
        for p in params:
            if not p.is_array():
                if p.in_namelist:
                    fout.write(p.get_job_info_test())
    # now the C++ initialization routines
    ofile = f"{cxx_prefix}_parameters.cpp"
    with open(ofile, "w") as fout:
        fout.write(f"#include <{cxx_base}_parameters.H>\n")
        fout.write("#include <AMReX_ParmParse.H>\n")
        fout.write("#include <AMReX_REAL.H>\n\n")
        for p in params:
            if p.dtype == "string":
                fout.write(f"  std::string problem::{p.name};\n\n")
            else:
                if p.is_array():
                    if p.size == "nspec":
                        fout.write(f"  AMREX_GPU_MANAGED {p.get_cxx_decl()} problem::{p.name}[NumSpec];\n\n")
                    else:
                        fout.write(f"  AMREX_GPU_MANAGED {p.get_cxx_decl()} problem::{p.name}[{p.size}];\n\n")
                else:
                    fout.write(f"  AMREX_GPU_MANAGED {p.get_cxx_decl()} problem::{p.name};\n\n")
        fout.write("\n")
        fout.write(f"  void init_{cxx_base}_parameters() {{\n")
        # now write the parmparse code to get the value from the C++
        # inputs.
        # open namespace
        fout.write("    {\n")
        # we need access to _rt
        fout.write("        using namespace amrex;\n")
        fout.write(f"        amrex::ParmParse pp(\"problem\");\n\n")
        for p in params:
            if p.is_array():
                size = p.size
                if (size == "nspec"):
                    size = "NumSpec"
                fout.write(f"        for (int n = 0; n < {size}; n++) {{\n")
                fout.write(f"            problem::{p.name}[n] = {p.default_format(lang='C++')};\n")
                fout.write(f"        }}\n")
            else:
                fout.write(f"        {p.get_default_string()}")
            if p.in_namelist:
                fout.write(f"        {p.get_query_string('C++')}")
            fout.write("\n")
        fout.write("    }\n")
        fout.write("  }\n")