Esempio n. 1
0
def generate_scheme_caps(metadata, arguments, caps_dir, module_use_template_scheme_cap):
    """Generate scheme caps for all schemes parsed."""
    success = True
    # Change to physics directory
    os.chdir(caps_dir)
    # List of filenames of scheme caps
    scheme_caps = []
    for module_name in arguments.keys():
        for scheme_name in arguments[module_name].keys():
            for subroutine_name in arguments[module_name][scheme_name].keys():
                # Skip subroutines without argument table or with empty argument table
                if not arguments[module_name][scheme_name][subroutine_name]:
                    continue
            # Create cap
            cap = Cap()
            cap.filename = "{0}_cap.F90".format(scheme_name)
            scheme_caps.append(cap.filename)
            # Parse all subroutines and their arguments to generate the cap
            capdata = collections.OrderedDict()
            for subroutine_name in arguments[module_name][scheme_name].keys():
                capdata[subroutine_name] = []
                for var_name in arguments[module_name][scheme_name][subroutine_name]:
                    container = encode_container(module_name, scheme_name, subroutine_name)
                    for var in metadata[var_name]:
                        if var.container == container:
                            capdata[subroutine_name].append(var)
                            break
            # If required (not at the moment), add module use statements to module_use_template_scheme_cap
            module_use_statement = module_use_template_scheme_cap
            # Write cap
            cap.write(module_name, module_use_statement, capdata)
    #
    os.chdir(BASEDIR)
    return (success, scheme_caps)
def generate_scheme_caps(metadata_define, metadata_request, arguments,
                         pset_schemes, ccpp_field_maps, caps_dir):
    """Generate scheme caps for all schemes parsed."""
    success = True
    # Change to caps directory
    os.chdir(caps_dir)
    # List of filenames of scheme caps
    scheme_caps = []
    for module_name in arguments.keys():
        for scheme_name in arguments[module_name].keys():
            for subroutine_name in arguments[module_name][scheme_name].keys():
                # Skip subroutines without argument table or with empty argument table
                if not arguments[module_name][scheme_name][subroutine_name]:
                    continue
            # Create cap
            cap = Cap()
            cap.filename = "{0}_cap.F90".format(scheme_name)
            scheme_caps.append(cap.filename)
            # Parse all subroutines and their arguments to generate the cap
            capdata = collections.OrderedDict()
            for subroutine_name in arguments[module_name][scheme_name].keys():
                capdata[subroutine_name] = []
                for var_name in arguments[module_name][scheme_name][
                        subroutine_name]:
                    container = encode_container(module_name, scheme_name,
                                                 subroutine_name)
                    for var in metadata_request[var_name]:
                        if var.container == container:
                            capdata[subroutine_name].append(var)
                            break
            # Write cap using the unique physics set for the scheme
            pset = pset_schemes[scheme_name][0]
            cap.write(module_name, capdata, ccpp_field_maps[pset],
                      metadata_define)
    #
    os.chdir(BASEDIR)
    return (success, scheme_caps)