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)