@@ -357,6 +357,68 @@ def _update_genccpp_dir(utility_files, genccpp_dir):
357357 # end if
358358 # end for
359359
360+ ###############################################################################
361+ def _set_rrtmgp_dependencies (dependency_files , gpu_flag ):
362+ ###############################################################################
363+ """
364+ Modify the list of files that physics schemes depend on
365+ (as provided by the CCPP) so that the correct RRTMGP
366+ dependencies exist for either CPUs or GPUs.
367+
368+ This function returns a modified list with either the
369+ CPU or GPU RRTMGP dependencies, but not both.
370+
371+ >>> in_files = ['/some/path/file.F90','/some/rte-kernels/rrtmgp.F90', \
372+ '/some/rte-kernels/accel/rrtmgp.F90', \
373+ '/some/rte-kernels/mo_rte_solver_kernels.F90', \
374+ '/some/rte-kernels/accel/mo_rte_solver_kernels.F90', \
375+ '/some/other/path/file.F90', \
376+ '/other/rrtmgp-kernels/mo_gas_optics_rrtmgp_kernels.F90', \
377+ '/other/rrtmgp-kernels/accel/mo_gas_optics_rrtmgp_kernels.F90', ]
378+ >>> _set_rrtmgp_dependencies(in_files, False)
379+ ['/some/path/file.F90', '/some/rte-kernels/rrtmgp.F90', \
380+ '/some/rte-kernels/accel/rrtmgp.F90', '/some/rte-kernels/mo_rte_solver_kernels.F90', \
381+ '/some/other/path/file.F90', '/other/rrtmgp-kernels/mo_gas_optics_rrtmgp_kernels.F90']
382+
383+ >>> _set_rrtmgp_dependencies(in_files, True)
384+ ['/some/path/file.F90', '/some/rte-kernels/rrtmgp.F90', \
385+ '/some/rte-kernels/accel/rrtmgp.F90', \
386+ '/some/rte-kernels/accel/mo_rte_solver_kernels.F90', '/some/other/path/file.F90', \
387+ '/other/rrtmgp-kernels/accel/mo_gas_optics_rrtmgp_kernels.F90']
388+ """
389+
390+ # Create new list of CCPP-dependent files:
391+ new_dependency_files = []
392+
393+ # List of directory strings that indicate
394+ # RRTMGP dependencies:
395+ rrtmgp_subdirs = ['rte-kernels' , 'rrtmgp-kernels' ]
396+
397+ # List of RRTMGP files that differ between CPUs and GPUs:
398+ rrtmgp_files = ['mo_rte_solver_kernels.F90' ,
399+ 'mo_optical_props_kernels.F90' ,
400+ 'mo_gas_optics_rrtmgp_kernels.F90' ]
401+
402+
403+ for file_path in dependency_files :
404+ if any (subdir in file_path for subdir in rrtmgp_subdirs ):
405+ if any (rfile in file_path for rfile in rrtmgp_files ):
406+ if (gpu_flag and 'accel' in file_path ):
407+ #If GPU-enabled and is "accelerated", include it:
408+ new_dependency_files .append (file_path )
409+ elif (not gpu_flag and 'accel' not in file_path ):
410+ #If CPU-only and not "accelerated", include it:
411+ new_dependency_files .append (file_path )
412+ else :
413+ #Not a hardware-dependent file, so include it:
414+ new_dependency_files .append (file_path )
415+ else :
416+ #Not an RRTMGP file, so include it:
417+ new_dependency_files .append (file_path )
418+
419+ # Return newly-modified dependency files:
420+ return new_dependency_files
421+
360422###############################################################################
361423def generate_registry (data_search , build_cache , atm_root , bldroot ,
362424 source_mods_dir , dycore , gen_fort_indent ):
@@ -420,7 +482,8 @@ def generate_registry(data_search, build_cache, atm_root, bldroot,
420482###############################################################################
421483def generate_physics_suites (build_cache , preproc_defs , host_name ,
422484 phys_suites_str , atm_root , bldroot ,
423- reg_dir , reg_files , source_mods_dir , force ):
485+ reg_dir , reg_files , source_mods_dir ,
486+ gpu_flag , force ):
424487###############################################################################
425488 """
426489 Generate the source for the configured physics suites,
@@ -664,8 +727,6 @@ def generate_physics_suites(build_cache, preproc_defs, host_name,
664727 build_cache .update_ccpp (sdfs , scheme_files , host_files , xml_files ,
665728 scheme_nl_meta_files , nl_groups , create_nl_file ,
666729 preproc_cache_str , kind_types )
667- ##XXgoldyXX: v Temporary fix: Copy CCPP Framework source code into
668- ##XXgoldyXX: v generated code directory
669730 request = DatatableReport ("utility_files" )
670731 ufiles_str = datatable_report (cap_output_file , request , ";" )
671732 utility_files = ufiles_str .split (';' )
@@ -674,8 +735,15 @@ def generate_physics_suites(build_cache, preproc_defs, host_name,
674735 dep_str = datatable_report (cap_output_file , request , ";" )
675736 if len (dep_str ) > 0 :
676737 dependency_files = dep_str .split (';' )
738+ # If using RRTMGP in the physics suite, then modify
739+ # the provided dependency files list to use the correct
740+ # CPU or GPU RRTMGP dependencies:
741+ if any ("rrtmgp_" in scheme_name for scheme_name in scheme_names ):
742+ dependency_files = _set_rrtmgp_dependencies (dependency_files ,
743+ gpu_flag )
744+
745+ # Copy dependencies files into CCPP build directory
677746 _update_genccpp_dir (dependency_files , genccpp_dir )
678- ##XXgoldyXX: ^ Temporary fix:
679747 # End if
680748
681749 return [physics_blddir , genccpp_dir ], do_gen_ccpp , cap_output_file , \
@@ -695,7 +763,7 @@ def generate_init_routines(build_cache, bldroot, force_ccpp, force_init,
695763 and/or script).
696764 """
697765
698- #Add new directory to build path:
766+ # Add new directory to build path:
699767 init_dir = os .path .join (bldroot , "phys_init" )
700768 # Use this for cache check
701769 gen_init_file = os .path .join (_REG_GEN_DIR , "write_init_files.py" )
@@ -706,11 +774,11 @@ def generate_init_routines(build_cache, bldroot, force_ccpp, force_init,
706774 if force_ccpp or force_init :
707775 do_gen_init = True
708776 else :
709- #If not, then check cache to see if actual
710- #"write_init_files.py" was modified:
777+ # If not, then check cache to see if actual
778+ # "write_init_files.py" was modified:
711779 do_gen_init = build_cache .init_write_mismatch (gen_init_file )
712780 else :
713- #If no directory exists, then one will need
781+ # If no directory exists, then one will need
714782 # to create new routines:
715783 os .mkdir (init_dir )
716784 do_gen_init = True
0 commit comments