diff --git a/geom_mgr/GeomManager.F90 b/geom_mgr/GeomManager.F90 index df5f2170d875..730672d1b70a 100644 --- a/geom_mgr/GeomManager.F90 +++ b/geom_mgr/GeomManager.F90 @@ -78,6 +78,13 @@ module mapl3g_GeomManager procedure new_GeomManager end interface GeomManager + abstract interface + logical function I_FactoryPredicate(factory) + import GeomFactory + class(GeomFactory), intent(in) :: factory + end function I_FactoryPredicate + end interface + interface module function new_GeomManager() result(mgr) type(GeomManager) :: mgr @@ -172,6 +179,13 @@ end function get_geom_from_id module function get_geom_manager() result(geom_mgr) type(GeomManager), pointer :: geom_mgr end function get_geom_manager + + module function find_factory(factories, predicate, rc) result(factory) + class(GeomFactory), pointer :: factory + type(GeomFactoryVector), pointer, intent(in) :: factories ! Force TARGET attr on actual + procedure(I_FactoryPredicate) :: predicate + integer, optional, intent(out) :: rc + end function find_factory end interface end module mapl3g_GeomManager diff --git a/geom_mgr/GeomManager/CMakeLists.txt b/geom_mgr/GeomManager/CMakeLists.txt index 235821db9af4..fd18be105d16 100644 --- a/geom_mgr/GeomManager/CMakeLists.txt +++ b/geom_mgr/GeomManager/CMakeLists.txt @@ -10,6 +10,7 @@ target_sources(MAPL.geom_mgr PRIVATE get_mapl_geom_from_id.F90 get_mapl_geom_from_spec.F90 add_mapl_geom.F90 + find_factory.F90 make_geom_spec_from_metadata.F90 make_geom_spec_from_hconfig.F90 make_mapl_geom_from_spec.F90 diff --git a/geom_mgr/GeomManager/add_factory.F90 b/geom_mgr/GeomManager/add_factory.F90 index e3d9cdfcb477..9b7ccd520387 100644 --- a/geom_mgr/GeomManager/add_factory.F90 +++ b/geom_mgr/GeomManager/add_factory.F90 @@ -1,26 +1,9 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) add_factory_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none - abstract interface - logical function I_FactoryPredicate(factory) - import GeomFactory - class(GeomFactory), intent(in) :: factory - end function I_FactoryPredicate - end interface - contains module subroutine add_factory(this, factory) diff --git a/geom_mgr/GeomManager/add_mapl_geom.F90 b/geom_mgr/GeomManager/add_mapl_geom.F90 index a3ef160ad916..52b1b08c68e6 100644 --- a/geom_mgr/GeomManager/add_mapl_geom.F90 +++ b/geom_mgr/GeomManager/add_mapl_geom.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) add_mapl_geom_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/delete_mapl_geom.F90 b/geom_mgr/GeomManager/delete_mapl_geom.F90 index 5c5723029dd2..afe231af0c5b 100644 --- a/geom_mgr/GeomManager/delete_mapl_geom.F90 +++ b/geom_mgr/GeomManager/delete_mapl_geom.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) delete_mapl_geom_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/find_factory.F90 b/geom_mgr/GeomManager/find_factory.F90 new file mode 100644 index 000000000000..8f9404e7e96c --- /dev/null +++ b/geom_mgr/GeomManager/find_factory.F90 @@ -0,0 +1,34 @@ +#include "MAPL_Generic.h" + +submodule (mapl3g_GeomManager) find_factory_smod + + implicit none + +! abstract interface +! logical function I_FactoryPredicate(factory) +! import GeomFactory +! class(GeomFactory), intent(in) :: factory +! end function I_FactoryPredicate +! end interface + +contains + + ! If factory not found, return a null pointer _and_ a nonzero rc. + module function find_factory(factories, predicate, rc) result(factory) + class(GeomFactory), pointer :: factory + type(GeomFactoryVector), pointer, intent(in) :: factories ! Force TARGET attr on actual + procedure(I_FactoryPredicate) :: predicate + integer, optional, intent(out) :: rc + + integer :: status + type(GeomFactoryVectorIterator) :: iter + + factory => null() + iter = find_if(factories%begin(), factories%end(), predicate) + _ASSERT(iter /= factories%end(), "No factory found satisfying given predicate.") + factory => iter%of() + + _RETURN(_SUCCESS) + end function find_factory + +end submodule find_factory_smod diff --git a/geom_mgr/GeomManager/get_geom_from_id.F90 b/geom_mgr/GeomManager/get_geom_from_id.F90 index 8a024bb05ec8..199725427c1e 100644 --- a/geom_mgr/GeomManager/get_geom_from_id.F90 +++ b/geom_mgr/GeomManager/get_geom_from_id.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) get_geom_from_id_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_hconfig.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_hconfig.F90 index c257a3c5786f..100944582e0e 100644 --- a/geom_mgr/GeomManager/get_mapl_geom_from_hconfig.F90 +++ b/geom_mgr/GeomManager/get_mapl_geom_from_hconfig.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) get_mapl_geom_from_hconfig_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_id.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_id.F90 index afc4ddb4e73c..68457df9c324 100644 --- a/geom_mgr/GeomManager/get_mapl_geom_from_id.F90 +++ b/geom_mgr/GeomManager/get_mapl_geom_from_id.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) get_mapl_geom_from_id_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_metadata.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_metadata.F90 index 831c152d70cb..5c5c0bee23a9 100644 --- a/geom_mgr/GeomManager/get_mapl_geom_from_metadata.F90 +++ b/geom_mgr/GeomManager/get_mapl_geom_from_metadata.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) get_mapl_geom_from_metadata_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_spec.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_spec.F90 index 0dc3fae18770..1f08d493e9ba 100644 --- a/geom_mgr/GeomManager/get_mapl_geom_from_spec.F90 +++ b/geom_mgr/GeomManager/get_mapl_geom_from_spec.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) get_mapl_geom_from_spec_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/initialize.F90 b/geom_mgr/GeomManager/initialize.F90 index 463d1f126939..382e72e05d74 100644 --- a/geom_mgr/GeomManager/initialize.F90 +++ b/geom_mgr/GeomManager/initialize.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) initialize_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/make_geom_spec_from_hconfig.F90 b/geom_mgr/GeomManager/make_geom_spec_from_hconfig.F90 index a3847cb33aba..a0391b178e35 100644 --- a/geom_mgr/GeomManager/make_geom_spec_from_hconfig.F90 +++ b/geom_mgr/GeomManager/make_geom_spec_from_hconfig.F90 @@ -1,46 +1,11 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) make_geom_spec_from_hconfig_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none - abstract interface - logical function I_FactoryPredicate(factory) - import GeomFactory - class(GeomFactory), intent(in) :: factory - end function I_FactoryPredicate - end interface - contains - ! If factory not found, return a null pointer _and_ a nonzero rc. - function find_factory(factories, predicate, rc) result(factory) - class(GeomFactory), pointer :: factory - type(GeomFactoryVector), pointer, intent(in) :: factories ! Force TARGET attr on actual - procedure(I_FactoryPredicate) :: predicate - integer, optional, intent(out) :: rc - - integer :: status - type(GeomFactoryVectorIterator) :: iter - - factory => null() - iter = find_if(factories%begin(), factories%end(), predicate) - _ASSERT(iter /= factories%end(), "No factory found satisfying given predicate.") - factory => iter%of() - - _RETURN(_SUCCESS) - end function find_factory - module function make_geom_spec_from_hconfig(this, hconfig, rc) result(geom_spec) class(GeomSpec), allocatable :: geom_spec class(GeomManager), target, intent(inout) :: this diff --git a/geom_mgr/GeomManager/make_geom_spec_from_metadata.F90 b/geom_mgr/GeomManager/make_geom_spec_from_metadata.F90 index 32d353b96b83..7ff0bf7857c3 100644 --- a/geom_mgr/GeomManager/make_geom_spec_from_metadata.F90 +++ b/geom_mgr/GeomManager/make_geom_spec_from_metadata.F90 @@ -1,46 +1,11 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) make_geom_spec_from_metadata_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none - abstract interface - logical function I_FactoryPredicate(factory) - import GeomFactory - class(GeomFactory), intent(in) :: factory - end function I_FactoryPredicate - end interface - contains - ! If factory not found, return a null pointer _and_ a nonzero rc. - function find_factory(factories, predicate, rc) result(factory) - class(GeomFactory), pointer :: factory - type(GeomFactoryVector), pointer, intent(in) :: factories ! Force TARGET attr on actual - procedure(I_FactoryPredicate) :: predicate - integer, optional, intent(out) :: rc - - integer :: status - type(GeomFactoryVectorIterator) :: iter - - factory => null() - iter = find_if(factories%begin(), factories%end(), predicate) - _ASSERT(iter /= factories%end(), "No factory found satisfying given predicate.") - factory => iter%of() - - _RETURN(_SUCCESS) - end function find_factory - module function make_geom_spec_from_metadata(this, file_metadata, rc) result(geom_spec) class(GeomSpec), allocatable :: geom_spec class(GeomManager), target, intent(inout) :: this diff --git a/geom_mgr/GeomManager/make_mapl_geom_from_spec.F90 b/geom_mgr/GeomManager/make_mapl_geom_from_spec.F90 index afae210f4451..67d7c4d7ad19 100644 --- a/geom_mgr/GeomManager/make_mapl_geom_from_spec.F90 +++ b/geom_mgr/GeomManager/make_mapl_geom_from_spec.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) make_mapl_geom_from_spec_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains diff --git a/geom_mgr/GeomManager/new_GeomManager.F90 b/geom_mgr/GeomManager/new_GeomManager.F90 index 58ca65b9fb22..e442110c8d6b 100644 --- a/geom_mgr/GeomManager/new_GeomManager.F90 +++ b/geom_mgr/GeomManager/new_GeomManager.F90 @@ -1,17 +1,7 @@ #include "MAPL_Generic.h" submodule (mapl3g_GeomManager) new_GeomManager_smod - use mapl3g_GeomSpec - use mapl3g_NullGeomSpec - use mapl3g_MaplGeom - use mapl3g_GeomFactory - use mapl3g_GeomFactoryVector - use mapl3g_GeomSpecVector - use mapl3g_IntegerMaplGeomMap - use mapl_ErrorHandlingMod - use pfio_FileMetadataMod - use esmf - use gftl2_IntegerVector + implicit none contains