From af43ef0d8f4c75de3e0758fb3314e9d9ad3d763d Mon Sep 17 00:00:00 2001 From: Jules Kouatchou Date: Fri, 10 May 2024 14:28:55 -0400 Subject: [PATCH] Rename files and update the function get_base_name. --- generic3g/ComponentSpecParser.F90 | 687 +----------------- geom_mgr/CoordinateAxis/CMakeLists.txt | 18 +- ...ual_to_CoordinateAxis.F90 => equal_to.F90} | 0 ...ers_CoordinateAxis.F90 => get_centers.F90} | 0 ...dinateAxis.F90 => get_coordinates_dim.F90} | 0 ...ers_CoordinateAxis.F90 => get_corners.F90} | 0 ...me_CoordinateAxis.F90 => get_dim_name.F90} | 0 ...tent_CoordinateAxis.F90 => get_extent.F90} | 0 ...dic_CoordinateAxis.F90 => is_periodic.F90} | 0 ...rdinateAxis.F90 => new_CoordinateAxis.F90} | 0 ...to_CoordinateAxis.F90 => not_equal_to.F90} | 0 geom_mgr/GeomManager.F90 | 18 +- geom_mgr/GeomManager/CMakeLists.txt | 27 +- ...actory_GeomManager.F90 => add_factory.F90} | 0 ...geom_GeomManager.F90 => add_mapl_geom.F90} | 0 ...m_GeomManager.F90 => delete_mapl_geom.F90} | 0 ...d_GeomManager.F90 => get_geom_from_id.F90} | 0 geom_mgr/GeomManager/get_geom_manager.F90 | 19 + ...ger.F90 => get_mapl_geom_from_hconfig.F90} | 0 ...mManager.F90 => get_mapl_geom_from_id.F90} | 0 ...er.F90 => get_mapl_geom_from_metadata.F90} | 0 ...anager.F90 => get_mapl_geom_from_spec.F90} | 0 ...tialize_GeomManager.F90 => initialize.F90} | 0 ...er.F90 => make_geom_spec_from_hconfig.F90} | 0 ...r.F90 => make_geom_spec_from_metadata.F90} | 0 ...nager.F90 => make_mapl_geom_from_spec.F90} | 0 ...er_GeomManager.F90 => new_GeomManager.F90} | 0 geom_mgr/MaplGeom/CMakeLists.txt | 16 +- .../{get_basis_MaplGeom.F90 => get_basis.F90} | 0 ...t_factory_MaplGeom.F90 => get_factory.F90} | 0 ...ata_MaplGeom.F90 => get_file_metadata.F90} | 0 .../{get_geom_MaplGeom.F90 => get_geom.F90} | 0 ...dims_MaplGeom.F90 => get_gridded_dims.F90} | 0 .../{get_spec_MaplGeom.F90 => get_spec.F90} | 0 ...MaplGeom_MaplGeom.F90 => new_MaplGeom.F90} | 0 .../{set_id_MaplGeom.F90 => set_id.F90} | 0 geom_mgr/VectorBasis/CMakeLists.txt | 26 +- ...VectorBasis.F90 => MAPL_GeomGetCoords.F90} | 0 ...elds_VectorBasis.F90 => create_fields.F90} | 0 ...lds_VectorBasis.F90 => destroy_fields.F90} | 0 ...or_VectorBasis.F90 => get_unit_vector.F90} | 0 ...s_VectorBasis.F90 => grid_get_centers.F90} | 0 ...VectorBasis.F90 => grid_get_coords_1d.F90} | 0 ...VectorBasis.F90 => grid_get_coords_2d.F90} | 0 ...s_VectorBasis.F90 => grid_get_corners.F90} | 0 ...lon2xyz_VectorBasis.F90 => latlon2xyz.F90} | 0 ...here_VectorBasis.F90 => mid_pt_sphere.F90} | 0 ...ectorBasis.F90 => new_GridVectorBasis.F90} | 0 ...Basis_VectorBasis.F90 => new_NS_Basis.F90} | 0 ...2latlon_VectorBasis.F90 => xyz2latlon.F90} | 0 shared/MAPL_Throw.F90 | 20 +- 51 files changed, 117 insertions(+), 714 deletions(-) rename geom_mgr/CoordinateAxis/{equal_to_CoordinateAxis.F90 => equal_to.F90} (100%) rename geom_mgr/CoordinateAxis/{get_centers_CoordinateAxis.F90 => get_centers.F90} (100%) rename geom_mgr/CoordinateAxis/{get_coordinates_dim_CoordinateAxis.F90 => get_coordinates_dim.F90} (100%) rename geom_mgr/CoordinateAxis/{get_corners_CoordinateAxis.F90 => get_corners.F90} (100%) rename geom_mgr/CoordinateAxis/{get_dim_name_CoordinateAxis.F90 => get_dim_name.F90} (100%) rename geom_mgr/CoordinateAxis/{get_extent_CoordinateAxis.F90 => get_extent.F90} (100%) rename geom_mgr/CoordinateAxis/{is_periodic_CoordinateAxis.F90 => is_periodic.F90} (100%) rename geom_mgr/CoordinateAxis/{new_CoordinateAxis_CoordinateAxis.F90 => new_CoordinateAxis.F90} (100%) rename geom_mgr/CoordinateAxis/{not_equal_to_CoordinateAxis.F90 => not_equal_to.F90} (100%) rename geom_mgr/GeomManager/{add_factory_GeomManager.F90 => add_factory.F90} (100%) rename geom_mgr/GeomManager/{add_mapl_geom_GeomManager.F90 => add_mapl_geom.F90} (100%) rename geom_mgr/GeomManager/{delete_mapl_geom_GeomManager.F90 => delete_mapl_geom.F90} (100%) rename geom_mgr/GeomManager/{get_geom_from_id_GeomManager.F90 => get_geom_from_id.F90} (100%) create mode 100644 geom_mgr/GeomManager/get_geom_manager.F90 rename geom_mgr/GeomManager/{get_mapl_geom_from_hconfig_GeomManager.F90 => get_mapl_geom_from_hconfig.F90} (100%) rename geom_mgr/GeomManager/{get_mapl_geom_from_id_GeomManager.F90 => get_mapl_geom_from_id.F90} (100%) rename geom_mgr/GeomManager/{get_mapl_geom_from_metadata_GeomManager.F90 => get_mapl_geom_from_metadata.F90} (100%) rename geom_mgr/GeomManager/{get_mapl_geom_from_spec_GeomManager.F90 => get_mapl_geom_from_spec.F90} (100%) rename geom_mgr/GeomManager/{initialize_GeomManager.F90 => initialize.F90} (100%) rename geom_mgr/GeomManager/{make_geom_spec_from_hconfig_GeomManager.F90 => make_geom_spec_from_hconfig.F90} (100%) rename geom_mgr/GeomManager/{make_geom_spec_from_metadata_GeomManager.F90 => make_geom_spec_from_metadata.F90} (100%) rename geom_mgr/GeomManager/{make_mapl_geom_from_spec_GeomManager.F90 => make_mapl_geom_from_spec.F90} (100%) rename geom_mgr/GeomManager/{new_GeomManager_GeomManager.F90 => new_GeomManager.F90} (100%) rename geom_mgr/MaplGeom/{get_basis_MaplGeom.F90 => get_basis.F90} (100%) rename geom_mgr/MaplGeom/{get_factory_MaplGeom.F90 => get_factory.F90} (100%) rename geom_mgr/MaplGeom/{get_file_metadata_MaplGeom.F90 => get_file_metadata.F90} (100%) rename geom_mgr/MaplGeom/{get_geom_MaplGeom.F90 => get_geom.F90} (100%) rename geom_mgr/MaplGeom/{get_gridded_dims_MaplGeom.F90 => get_gridded_dims.F90} (100%) rename geom_mgr/MaplGeom/{get_spec_MaplGeom.F90 => get_spec.F90} (100%) rename geom_mgr/MaplGeom/{new_MaplGeom_MaplGeom.F90 => new_MaplGeom.F90} (100%) rename geom_mgr/MaplGeom/{set_id_MaplGeom.F90 => set_id.F90} (100%) rename geom_mgr/VectorBasis/{MAPL_GeomGetCoords_VectorBasis.F90 => MAPL_GeomGetCoords.F90} (100%) rename geom_mgr/VectorBasis/{create_fields_VectorBasis.F90 => create_fields.F90} (100%) rename geom_mgr/VectorBasis/{destroy_fields_VectorBasis.F90 => destroy_fields.F90} (100%) rename geom_mgr/VectorBasis/{get_unit_vector_VectorBasis.F90 => get_unit_vector.F90} (100%) rename geom_mgr/VectorBasis/{grid_get_centers_VectorBasis.F90 => grid_get_centers.F90} (100%) rename geom_mgr/VectorBasis/{grid_get_coords_1d_VectorBasis.F90 => grid_get_coords_1d.F90} (100%) rename geom_mgr/VectorBasis/{grid_get_coords_2d_VectorBasis.F90 => grid_get_coords_2d.F90} (100%) rename geom_mgr/VectorBasis/{grid_get_corners_VectorBasis.F90 => grid_get_corners.F90} (100%) rename geom_mgr/VectorBasis/{latlon2xyz_VectorBasis.F90 => latlon2xyz.F90} (100%) rename geom_mgr/VectorBasis/{mid_pt_sphere_VectorBasis.F90 => mid_pt_sphere.F90} (100%) rename geom_mgr/VectorBasis/{new_GridVectorBasis_VectorBasis.F90 => new_GridVectorBasis.F90} (100%) rename geom_mgr/VectorBasis/{new_NS_Basis_VectorBasis.F90 => new_NS_Basis.F90} (100%) rename geom_mgr/VectorBasis/{xyz2latlon_VectorBasis.F90 => xyz2latlon.F90} (100%) diff --git a/generic3g/ComponentSpecParser.F90 b/generic3g/ComponentSpecParser.F90 index f99d3a639429..35501f6c83c5 100644 --- a/generic3g/ComponentSpecParser.F90 +++ b/generic3g/ComponentSpecParser.F90 @@ -56,675 +56,52 @@ module mapl3g_ComponentSpecParser character(*), parameter :: KEY_UNGRIDDED_DIM_NAME = 'dim_name' character(*), parameter :: KEY_UNGRIDDED_DIM_EXTENT = 'extent' character(*), parameter :: KEY_VERTICAL_DIM_SPEC = 'vertical_dim_spec' - -contains - - type(ComponentSpec) function parse_component_spec(hconfig, rc) result(spec) - type(ESMF_HConfig), target, intent(inout) :: hconfig - integer, optional, intent(out) :: rc - - integer :: status - logical :: has_mapl_section - type(ESMF_HConfig) :: mapl_cfg - - has_mapl_section = ESMF_HConfigIsDefined(hconfig, keyString=MAPL_SECTION, _RC) - _RETURN_UNLESS(has_mapl_section) - mapl_cfg = ESMF_HConfigCreateAt(hconfig, keyString=MAPL_SECTION, _RC) - - spec%geometry_spec = parse_geometry_spec(mapl_cfg, _RC) - spec%var_specs = parse_var_specs(mapl_cfg, _RC) - spec%connections = parse_connections(mapl_cfg, _RC) - spec%children = parse_children(mapl_cfg, _RC) - - call ESMF_HConfigDestroy(mapl_cfg, _RC) - - _RETURN(_SUCCESS) - end function parse_component_spec - - - ! Geom subcfg is passed raw to the GeomManager layer. So little - ! processing is needed here. - function parse_geometry_spec(mapl_cfg, rc) result(geometry_spec) - type(GeometrySpec) :: geometry_spec - type(ESMF_HConfig), intent(in) :: mapl_cfg - integer, optional, intent(out) :: rc - - integer :: status - logical :: has_geometry_section - logical :: has_esmf_geom - logical :: has_geometry_kind - logical :: has_geometry_provider - character(:), allocatable :: geometry_kind_str - character(:), allocatable :: provider - integer :: geometry_kind - type(ESMF_HConfig) :: geometry_cfg - type(ESMF_HConfig) :: esmf_geom_cfg - type(GeomManager), pointer :: geom_mgr - class(GeomSpec), allocatable :: geom_spec - - has_geometry_section = ESMF_HConfigIsDefined(mapl_cfg,keyString=COMPONENT_GEOMETRY_SECTION, _RC) - _RETURN_UNLESS(has_geometry_section) - - geometry_cfg = ESMF_HConfigCreateAt(mapl_cfg, keyString=COMPONENT_GEOMETRY_SECTION, _RC) - - has_geometry_kind = ESMF_HConfigIsDefined(geometry_cfg, keyString='kind', _RC) - has_esmf_geom = ESMF_HConfigIsDefined(geometry_cfg, keyString=COMPONENT_ESMF_GEOM_SECTION, _RC) - - if (.not. (has_geometry_kind .or. has_esmf_geom)) then ! default - geometry_spec = GeometrySpec(GEOMETRY_FROM_PARENT) - call ESMF_HConfigDestroy(geometry_cfg, _RC) - _RETURN(_SUCCESS) - end if - - if (has_geometry_kind) then - geometry_kind_str = ESMF_HConfigAsString(geometry_cfg, keyString='kind', _RC) - end if - - if (has_esmf_geom) then - esmf_geom_cfg = ESMF_HConfigCreateAt(geometry_cfg, keyString=COMPONENT_ESMF_GEOM_SECTION, _RC) - end if - - if (has_geometry_kind .and. has_esmf_geom) then - _ASSERT(geometry_kind_str == 'provider', 'Geometry kind must be provider when using ESMF geom config.') - end if - if (has_esmf_geom) then - geom_mgr => get_geom_manager() - allocate(geom_spec, source=geom_mgr%make_geom_spec(esmf_geom_cfg, rc=status)) - _VERIFY(status) - call ESMF_HConfigDestroy(geometry_cfg, _RC) - geometry_spec = GeometrySpec(geom_spec) - _RETURN(_SUCCESS) - end if - - if (has_geometry_kind) then - select case (ESMF_UtilStringLowerCase(geometry_kind_str)) - case ('none') - geometry_spec = GeometrySpec(GEOMETRY_NONE) - case ('provider') - geometry_spec = GeometrySpec(GEOMETRY_PROVIDER) - case ('from_parent') - geometry_spec = GeometrySpec(GEOMETRY_FROM_PARENT) - case ('from_child') - has_geometry_provider = ESMF_HConfigIsDefined(geometry_cfg, keystring='provider', _RC) - _ASSERT(has_geometry_provider, 'Must name provider when using GEOMETRY_FROM_CHILD') - provider = ESMF_HConfigAsString(geometry_cfg, keystring='provider', _RC) - geometry_spec = GeometrySpec(provider) - case default - _FAIL('Invalid geometry kind') - end select - call ESMF_HConfigDestroy(geometry_cfg, _RC) - end if - - _RETURN(_SUCCESS) - end function parse_geometry_spec - - ! A component is not required to have var_specs. E.g, in theory GCM gridcomp will not - ! have var specs in MAPL3, as it does not really have a preferred geom on which to declare - ! imports and exports. - function parse_var_specs(hconfig, rc) result(var_specs) - type(VariableSpecVector) :: var_specs - type(ESMF_HConfig), optional, intent(in) :: hconfig - integer, optional, intent(out) :: rc - - integer :: status - logical :: has_states_section - type(ESMF_HConfig) :: subcfg - - has_states_section = ESMF_HConfigIsDefined(hconfig,keyString=COMPONENT_STATES_SECTION, _RC) - _RETURN_UNLESS(has_states_section) - - subcfg = ESMF_HConfigCreateAt(hconfig,keyString=COMPONENT_STATES_SECTION, _RC) - - call parse_state_specs(var_specs, subcfg, COMPONENT_INTERNAL_STATE_SECTION, _RC) - call parse_state_specs(var_specs, subcfg, COMPONENT_EXPORT_STATE_SECTION, _RC) - call parse_state_specs(var_specs, subcfg, COMPONENT_IMPORT_STATE_SECTION, _RC) - - call ESMF_HConfigDestroy(subcfg, _RC) - - _RETURN(_SUCCESS) - contains - - subroutine parse_state_specs(var_specs, hconfig, state_intent, rc) - type(VariableSpecVector), intent(inout) :: var_specs - type(ESMF_HConfig), target, intent(in) :: hconfig - character(*), intent(in) :: state_intent + !> + ! Submodule declarations + INTERFACE + module function parse_component_spec(hconfig, rc) result(spec) + type(ComponentSpec) :: spec + type(ESMF_HConfig), target, intent(inout) :: hconfig integer, optional, intent(out) :: rc + end function parse_component_spec - type(VariableSpec) :: var_spec - type(ESMF_HConfigIter) :: iter,e,b - character(:), allocatable :: name - character(:), allocatable :: short_name - type(ESMF_HConfig) :: attributes - type(ESMF_TypeKind_Flag) :: typekind - real, allocatable :: default_value - type(VerticalDimSpec) :: vertical_dim_spec - type(UngriddedDims) :: ungridded_dims - character(:), allocatable :: standard_name - character(:), allocatable :: units - type(ESMF_StateItem_Flag), allocatable :: itemtype - type(ESMF_StateIntent_Flag) :: esmf_state_intent - - type(StringVector) :: service_items - integer :: status - logical :: has_state - logical :: has_standard_name - logical :: has_units - type(ESMF_HConfig) :: subcfg - type(StringVector) :: dependencies - - has_state = ESMF_HConfigIsDefined(hconfig,keyString=state_intent, _RC) - _RETURN_UNLESS(has_state) - - subcfg = ESMF_HConfigCreateAt(hconfig,keyString=state_intent, _RC) - - b = ESMF_HConfigIterBegin(subcfg, _RC) - e = ESMF_HConfigIterEnd(subcfg, _RC) - iter = b - do while (ESMF_HConfigIterLoop(iter,b,e)) - name = ESMF_HConfigAsStringMapKey(iter, _RC) - attributes = ESMF_HConfigCreateAtMapVal(iter,_RC) - - short_name = name - typekind = to_typekind(attributes, _RC) - call val_to_float(default_value, attributes, 'default_value', _RC) - vertical_dim_spec = to_VerticalDimSpec(attributes,_RC) - ungridded_dims = to_UngriddedDims(attributes, _RC) - - has_standard_name = ESMF_HConfigIsDefined(attributes,keyString='standard_name', _RC) - if (has_standard_name) then - standard_name = ESMF_HConfigAsString(attributes,keyString='standard_name', _RC) - end if - - has_units = ESMF_HConfigIsDefined(attributes,keyString='units', _RC) - if (has_units) then - units = ESMF_HConfigAsString(attributes,keyString='units', _RC) - end if - - call to_itemtype(itemtype, attributes, _RC) - call to_service_items(service_items, attributes, _RC) - - dependencies = to_dependencies(attributes, _RC) - - esmf_state_intent = to_esmf_state_intent(state_intent) - - var_spec = VariableSpec(esmf_state_intent, short_name=short_name, & - itemtype=itemtype, & - service_items=service_items, & - standard_name=standard_name, & - units=units, & - typekind=typekind, & - default_value=default_value, & - vertical_dim_spec=vertical_dim_spec, & - ungridded_dims=ungridded_dims, & - dependencies=dependencies & - ) - if (allocated(units)) deallocate(units) - if (allocated(standard_name)) deallocate(standard_name) - - call var_specs%push_back(var_spec) - - call ESMF_HConfigDestroy(attributes, _RC) - - end do - - call ESMF_HConfigDestroy(subcfg, _RC) - - _RETURN(_SUCCESS) - end subroutine parse_state_specs - - subroutine val_to_float(x, attributes, key, rc) - real, allocatable, intent(out) :: x - type(ESMF_HConfig), intent(in) :: attributes - character(*), intent(in) :: key + module function parse_geometry_spec(mapl_cfg, rc) result(geometry_spec) + type(GeometrySpec) :: geometry_spec + type(ESMF_HConfig), intent(in) :: mapl_cfg integer, optional, intent(out) :: rc + end function parse_geometry_spec - integer :: status - logical :: has_default_value - - has_default_value = ESMF_HConfigIsDefined(attributes, keyString=KEY_DEFAULT_VALUE, _RC) - _RETURN_UNLESS(has_default_value) - - allocate(x) - x = ESMF_HConfigAsR4(attributes, keyString=KEY_DEFAULT_VALUE, _RC) - - _RETURN(_SUCCESS) - end subroutine val_to_float - - function to_typekind(attributes, rc) result(typekind) - use :: mapl3g_ESMF_Utilities, only: MAPL_TYPEKIND_MIRROR - type(ESMF_TypeKind_Flag) :: typekind - type(ESMF_HConfig), intent(in) :: attributes + module function parse_var_specs(hconfig, rc) result(var_specs) + type(VariableSpecVector) :: var_specs + type(ESMF_HConfig), optional, intent(in) :: hconfig integer, optional, intent(out) :: rc + end function parse_var_specs - integer :: status - logical :: typekind_is_specified - character(:), allocatable :: typekind_str - - typekind = ESMF_TYPEKIND_R4 ! GEOS defaults - - typekind_is_specified = ESMF_HConfigIsDefined(attributes, keyString='typekind', _RC) - _RETURN_UNLESS(typekind_is_specified) - - typekind_str= ESMF_HConfigAsString(attributes,keyString='typekind',_RC) - select case (ESMF_UtilStringLowerCase(typekind_str)) - case ('r4') - typekind = ESMF_TYPEKIND_R4 - case ('r8') - typekind = ESMF_TYPEKIND_R8 - case ('i4') - typekind = ESMF_TYPEKIND_I4 - case ('i8') - typekind = ESMF_TYPEKIND_I8 - case ('mirror') - typekind = MAPL_TYPEKIND_MIRROR - case default - _FAIL('Unsupported typekind: <'//typekind_str//'>') - end select - - _RETURN(_SUCCESS) - end function to_typekind - - function to_VerticalDimSpec(attributes, rc) result(vertical_dim_spec) - type(VerticalDimSpec) :: vertical_dim_spec - type(ESMF_HConfig), intent(in) :: attributes + module function parse_connections(hconfig, rc) result(connections) + type(ConnectionVector) :: connections + type(ESMF_HConfig), optional, intent(in) :: hconfig integer, optional, intent(out) :: rc + end function parse_connections - integer :: status - character(:), allocatable :: vertical_str - logical :: has_dim_spec - - vertical_dim_spec = VERTICAL_DIM_UNKNOWN - has_dim_spec = ESMF_HConfigIsDefined(attributes,keyString=KEY_VERTICAL_DIM_SPEC, _RC) - _RETURN_UNLESS(has_dim_spec) - - vertical_str = ESMF_HConfigAsString(attributes,keyString=KEY_VERTICAL_DIM_SPEC,_RC) - - select case (ESMF_UtilStringLowerCase(vertical_str)) - case ('vertical_dim_none', 'n', 'none') - vertical_dim_spec = VERTICAL_DIM_NONE - case ('vertical_dim_center', 'c', 'center') - vertical_dim_spec = VERTICAL_DIM_CENTER - case ('vertical_dim_edge', 'e', 'edge') - vertical_dim_spec = VERTICAL_DIM_EDGE - case ('vertical_dim_mirror', 'm', 'mirror') - vertical_dim_spec = VERTICAL_DIM_MIRROR - case default - _FAIL('Unsupported vertical_dim_spec') - end select - - _RETURN(_SUCCESS) - end function to_VerticalDimSpec - - function to_UngriddedDims(attributes,rc) result(ungridded_dims) - type(UngriddedDims) :: ungridded_dims - type(ESMF_HConfig), intent(in) :: attributes + module function parse_setservices(config, rc) result(user_ss) + type(DSOSetServices) :: user_ss + type(ESMF_HConfig), target, intent(in) :: config integer, optional, intent(out) :: rc + end function parse_setservices - integer :: status - type(ESMF_HConfig) :: dim_specs, dim_spec - character(len=:), allocatable :: dim_name - integer :: dim_size,i - type(UngriddedDim) :: temp_dim - - logical :: has_ungridded_dims - integer :: n_specs - - has_ungridded_dims = ESMF_HConfigIsDefined(attributes, keyString=KEY_UNGRIDDED_DIMS, _RC) - _RETURN_UNLESS(has_ungridded_dims) - - dim_specs = ESMF_HConfigCreateAt(attributes, keyString=KEY_UNGRIDDED_DIMS, _RC) - - n_specs = ESMF_HConfigGetSize(dim_specs, _RC) - do i = 1, n_specs - dim_spec = ESMF_HConfigCreateAt(dim_specs, index=i, _RC) - dim_name = ESMF_HConfigAsString(dim_spec, keyString=KEY_UNGRIDDED_DIM_NAME, _RC) - dim_size = ESMF_HConfigAsI4(dim_spec, keyString=KEY_UNGRIDDED_DIM_EXTENT, _RC) - temp_dim = UngriddedDim(dim_size) - call ungridded_dims%add_dim(temp_dim, _RC) - call ESMF_HConfigDestroy(dim_spec, _RC) - end do - - call ESMF_HConfigDestroy(dim_specs, _RC) - - _RETURN(_SUCCESS) - end function to_UngriddedDims - - - subroutine to_itemtype(itemtype, attributes, rc) - type(ESMF_StateItem_Flag), allocatable, intent(out) :: itemtype - type(ESMF_HConfig), target, intent(in) :: attributes + module function parse_children(hconfig, rc) result(children) + type(ChildSpecMap) :: children + type(ESMF_HConfig), intent(in) :: hconfig integer, optional, intent(out) :: rc + end function parse_children - integer :: status - character(:), allocatable :: subclass - logical :: has_itemtype - - has_itemtype = ESMF_HConfigIsDefined(attributes,keyString='class',_RC) - _RETURN_UNLESS(has_itemtype) - - subclass= ESMF_HConfigAsString(attributes, keyString='class',_RC) - - select case (ESMF_UtilStringLowerCase(subclass)) - case ('field') - itemtype = MAPL_STATEITEM_FIELD - case ('service') - itemtype = MAPL_STATEITEM_SERVICE - case ('wildcard') - itemtype = MAPL_STATEITEM_WILDCARD - case default - _FAIL('unknown subclass for state item: '//subclass) - end select - - _RETURN(_SUCCESS) - end subroutine to_itemtype - - subroutine to_service_items(service_items, attributes, rc) - type(StringVector), intent(out) :: service_items - type(ESMF_HConfig), target, intent(in) :: attributes + module function parse_child(hconfig, rc) result(child) + type(ChildSpec) :: child + type(ESMF_HConfig), intent(in) :: hconfig integer, optional, intent(out) :: rc + end function parse_child - integer :: status - type(ESMF_HConfig) :: seq - integer :: num_items, i - character(:), allocatable :: item_name - logical :: has_service_items - - has_service_items = ESMF_HConfigIsDefined(attributes,keyString='items',_RC) - _RETURN_UNLESS(has_service_items) - - seq = ESMF_HConfigCreateAt(attributes,keyString='items',_RC) - _ASSERT(ESMF_HConfigIsSequence(seq),"items must be a sequence") - num_items = ESMF_HConfigGetSize(seq,_RC) - do i = 1,num_items - item_name = ESMF_HConfigAsString(seq,index = i, _RC) - call service_items%push_back(item_name) - end do - - _RETURN(_SUCCESS) - end subroutine to_service_items - - function to_dependencies(attributes, rc) result(dependencies) - type(StringVector) :: dependencies - type(ESMF_HConfig), intent(in) :: attributes - integer, optional, intent(out) :: rc - - integer :: status - logical :: has_dependencies - type(ESMF_HConfig) :: dependencies_hconfig - integer :: i, n_dependencies - character(:), allocatable :: name - - dependencies = StringVector() - has_dependencies = ESMF_HConfigIsDefined(attributes, keyString='dependencies', _RC) - _RETURN_UNLESS(has_dependencies) - - dependencies_hconfig = ESMF_HConfigCreateAt(attributes, keyString='dependencies', _RC) - _ASSERT(ESMF_HConfigIsSequence(dependencies_hconfig), 'expected sequence for attribute ') - n_dependencies = ESMF_HConfigGetSize(dependencies_hconfig, _RC) - - do i = 1, n_dependencies - name = ESMF_HConfigAsString(dependencies_hconfig, index=i, _RC) - call dependencies%push_back(name) - end do - - _RETURN(_SUCCESS) - end function to_dependencies - - end function parse_var_specs - - - type(ConnectionVector) function parse_connections(hconfig, rc) result(connections) - type(ESMF_HConfig), optional, intent(in) :: hconfig - integer, optional, intent(out) :: rc - - type(ESMF_HConfig) :: conn_specs, conn_spec - class(Connection), allocatable :: conn - integer :: status, i, num_specs - logical :: has_connections - - has_connections = ESMF_HConfigIsDefined(hconfig,keyString=COMPONENT_CONNECTIONS_SECTION,_RC) - _RETURN_UNLESS(has_connections) - - conn_specs = ESMF_HConfigCreateAt(hconfig, keyString=COMPONENT_CONNECTIONS_SECTION, _RC) - - num_specs = ESMF_HConfigGetSize(conn_specs, _RC) - do i = 1, num_specs - conn_spec = ESMF_HConfigCreateAt(conn_specs, index=i, _RC) - allocate(conn, source=parse_connection(conn_spec, rc=status)); _VERIFY(status) - call connections%push_back(conn) - deallocate(conn) - enddo - - _RETURN(_SUCCESS) - - contains - - function parse_connection(config, rc) result(conn) - class(Connection), allocatable :: conn - type(ESMF_HConfig), optional, intent(in) :: config - integer, optional, intent(out) :: rc - - integer :: status - character(:), allocatable :: src_name, dst_name - character(:), allocatable :: src_comp, dst_comp - character(:), allocatable :: src_intent, dst_intent - - call get_comps(config, src_comp, dst_comp, _RC) - - if (ESMF_HConfigIsDefined(config,keyString='all_unsatisfied')) then - conn = MatchConnection( & - ConnectionPt(src_comp, VirtualConnectionPt(state_intent='export', short_name='^.*$')), & - ConnectionPt(dst_comp, VirtualConnectionPt(state_intent='import', short_name='^.*$')) & - ) - _RETURN(_SUCCESS) - end if - - call get_names(config, src_name, dst_name, _RC) - call get_intents(config, src_intent, dst_intent, _RC) - - associate ( & - src_pt => VirtualConnectionPt(state_intent=src_intent, short_name=src_name), & - dst_pt => VirtualConnectionPt(state_intent=dst_intent, short_name=dst_name) ) - - if (dst_intent == 'export') then - conn = ReexportConnection( & - ConnectionPt(src_comp, src_pt), & - ConnectionPt(dst_comp, dst_pt)) - else - conn = SimpleConnection( & - ConnectionPt(src_comp, src_pt), & - ConnectionPt(dst_comp, dst_pt)) - end if - - end associate - - _RETURN(_SUCCESS) - end function parse_connection - - subroutine get_names(config, src_name, dst_name, rc) - type(ESMF_HConfig), intent(in) :: config - character(:), allocatable :: src_name - character(:), allocatable :: dst_name - integer, optional, intent(out) :: rc - - integer :: status - - associate (provides_names => & - ESMF_HConfigIsDefined(config,keyString='name') .or. & - (ESMF_HConfigIsDefined(config,keyString='src_name') .and. ESMF_HConfigIsDefined(config,keyString='dst_name')) & - ) - _ASSERT(provides_names, "Must specify 'name' or 'src_name' .and. 'dst_name' in connection.") - end associate - - if (ESMF_HConfigIsDefined(Config,keystring='name')) then ! replicate for src and dst - src_name = ESMF_HConfigAsString(config,keyString='name',_RC) - dst_name = src_name - _RETURN(_SUCCESS) - end if - - src_name = ESMF_HConfigAsString(config,keyString='src_name',_RC) - dst_name = ESMF_HConfigAsString(config,keyString='dst_name',_RC) - - _RETURN(_SUCCESS) - end subroutine get_names - - subroutine get_comps(config, src_comp, dst_comp, rc) - type(ESMF_HConfig), intent(in) :: config - character(:), allocatable :: src_comp - character(:), allocatable :: dst_comp - integer, optional, intent(out) :: rc - - integer :: status - - _ASSERT(ESMF_HConfigIsDefined(config,keyString='src_comp'), 'Connection must specify a src component') - _ASSERT(ESMF_HConfigIsDefined(config,keyString='dst_comp'), 'Connection must specify a dst component') - src_comp = ESMF_HConfigAsString(config,keyString='src_comp',_RC) - dst_comp = ESMF_HConfigAsString(config,keyString='dst_comp',_RC) - _RETURN(_SUCCESS) - end subroutine get_comps - - subroutine get_intents(config, src_intent, dst_intent, rc) - type(ESMF_HConfig), intent(in) :: config - character(:), allocatable :: src_intent - character(:), allocatable :: dst_intent - integer, optional, intent(out) :: rc - - integer :: status - - ! defaults - src_intent = 'export' - dst_intent = 'import' - - if (ESMF_HConfigIsDefined(config,keyString='src_intent')) then - src_intent = ESMF_HConfigAsString(config,keyString='src_intent',_RC) - end if - if (ESMF_HConfigIsDefined(config,keyString='dst_intent')) then - dst_intent = ESMF_HConfigAsString(config,keyString='dst_intent',_RC) - end if - - _RETURN(_SUCCESS) - end subroutine get_intents - - end function parse_connections - + END INTERFACE - type(DSOSetServices) function parse_setservices(config, rc) result(user_ss) - type(ESMF_HConfig), target, intent(in) :: config - integer, optional, intent(out) :: rc - - character(:), allocatable :: sharedObj, userRoutine - integer :: status - - sharedObj = ESMF_HConfigAsString(config,keyString='sharedObj',rc=status) - _ASSERT(status == 0, 'setServices spec does not specify sharedObj') - - if (ESMF_HConfigIsDefined(config,keyString='userRoutine')) then - userRoutine = ESMF_HConfigAsString(config,keyString='userRoutine',_RC) - else - userRoutine = 'setservices_' - end if - - user_ss = user_setservices(sharedObj, userRoutine) - - _RETURN(_SUCCESS) - end function parse_setservices - - - function parse_children(hconfig, rc) result(children) - type(ChildSpecMap) :: children - type(ESMF_HConfig), intent(in) :: hconfig - integer, optional, intent(out) :: rc - - integer :: status - logical :: has_children - logical :: is_map - type(ESMF_HConfig) :: children_cfg, child_cfg - type(ESMF_HConfigIter) :: iter, iter_begin, iter_end - type(ChildSpec) :: child_spec - character(:), allocatable :: child_name - - - has_children = ESMF_HConfigIsDefined(hconfig, keyString=COMPONENT_CHILDREN_SECTION, _RC) - _RETURN_UNLESS(has_children) - - children_cfg = ESMF_HConfigCreateAt(hconfig, keyString=COMPONENT_CHILDREN_SECTION, _RC) - is_map = ESMF_HConfigIsMap(children_cfg, _RC) - - _ASSERT(is_map, 'children spec must be mapping') - - iter_begin = ESMF_HCOnfigIterBegin(children_cfg, _RC) - iter_end = ESMF_HConfigIterEnd(children_cfg, _RC) - iter = iter_begin - do while (ESMF_HConfigIterLoop(iter, iter_begin, iter_end)) - child_name = ESMF_HConfigAsStringMapKey(iter, _RC) - child_cfg = ESMF_HConfigCreateAtMapVal(iter, _RC) - child_spec = parse_child(child_cfg, _RC) - call children%insert(child_name, child_spec) - call ESMF_HConfigDestroy(child_cfg, _RC) - end do - - call ESMF_HConfigDestroy(children_cfg, _RC) - - _RETURN(_SUCCESS) - end function parse_children - - - function parse_child(hconfig, rc) result(child) - type(ChildSpec) :: child - type(ESMF_HConfig), intent(in) :: hconfig - integer, optional, intent(out) :: rc - - integer :: status - class(AbstractUserSetServices), allocatable :: setservices - - character(*), parameter :: dso_keys(*) = [character(len=9) :: 'dso', 'DSO', 'sharedObj', 'sharedobj'] - character(*), parameter :: userProcedure_keys(*) = [character(len=10) :: 'SetServices', 'setServices', 'setservices'] - integer :: i - character(:), allocatable :: dso_key, userProcedure_key, try_key - logical :: dso_found, userProcedure_found - logical :: has_key - logical :: has_config_file - character(:), allocatable :: sharedObj, userProcedure, config_file - - - dso_found = .false. - ! Ensure precisely one name is used for dso - do i = 1, size(dso_keys) - try_key = trim(dso_keys(i)) - has_key = ESMF_HconfigIsDefined(hconfig, keyString=try_key, _RC) - if (has_key) then - _ASSERT(.not. dso_found, 'multiple specifications for dso in hconfig for child') - dso_found = .true. - dso_key = try_key - end if - end do - _ASSERT(dso_found, 'Must specify a dso for hconfig of child') - sharedObj = ESMF_HconfigAsString(hconfig, keyString=dso_key, _RC) - - userProcedure_found = .false. - do i = 1, size(userProcedure_keys) - try_key = userProcedure_keys(i) - if (ESMF_HconfigIsDefined(hconfig, keyString=try_key)) then - _ASSERT(.not. userProcedure_found, 'multiple specifications for dso in hconfig for child') - userProcedure_found = .true. - userProcedure_key = try_key - end if - end do - userProcedure = 'setservices_' - if (userProcedure_found) then - userProcedure = ESMF_HconfigAsString(hconfig, keyString=userProcedure_key,_RC) - end if - - has_config_file = ESMF_HconfigIsDefined(hconfig, keyString='config_file', _RC) - if (has_config_file) then - config_file = ESMF_HconfigAsString(hconfig, keyString='config_file',_RC) - end if - - setservices = user_setservices(sharedObj, userProcedure) - child = ChildSpec(setservices, config_file=config_file) - - _RETURN(_SUCCESS) - end function parse_child - end module mapl3g_ComponentSpecParser diff --git a/geom_mgr/CoordinateAxis/CMakeLists.txt b/geom_mgr/CoordinateAxis/CMakeLists.txt index 5287a8900d99..ed7897e73f2a 100644 --- a/geom_mgr/CoordinateAxis/CMakeLists.txt +++ b/geom_mgr/CoordinateAxis/CMakeLists.txt @@ -1,12 +1,12 @@ target_sources(MAPL.geom_mgr PRIVATE - new_CoordinateAxis_CoordinateAxis.F90 - equal_to_CoordinateAxis.F90 - not_equal_to_CoordinateAxis.F90 - get_extent_CoordinateAxis.F90 - get_centers_CoordinateAxis.F90 - get_corners_CoordinateAxis.F90 - is_periodic_CoordinateAxis.F90 - get_dim_name_CoordinateAxis.F90 - get_coordinates_dim_CoordinateAxis.F90 + new_CoordinateAxis.F90 + equal_to.F90 + not_equal_to.F90 + get_extent.F90 + get_centers.F90 + get_corners.F90 + is_periodic.F90 + get_dim_name.F90 + get_coordinates_dim.F90 ) diff --git a/geom_mgr/CoordinateAxis/equal_to_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/equal_to.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/equal_to_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/equal_to.F90 diff --git a/geom_mgr/CoordinateAxis/get_centers_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/get_centers.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/get_centers_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/get_centers.F90 diff --git a/geom_mgr/CoordinateAxis/get_coordinates_dim_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/get_coordinates_dim.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/get_coordinates_dim_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/get_coordinates_dim.F90 diff --git a/geom_mgr/CoordinateAxis/get_corners_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/get_corners.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/get_corners_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/get_corners.F90 diff --git a/geom_mgr/CoordinateAxis/get_dim_name_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/get_dim_name.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/get_dim_name_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/get_dim_name.F90 diff --git a/geom_mgr/CoordinateAxis/get_extent_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/get_extent.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/get_extent_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/get_extent.F90 diff --git a/geom_mgr/CoordinateAxis/is_periodic_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/is_periodic.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/is_periodic_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/is_periodic.F90 diff --git a/geom_mgr/CoordinateAxis/new_CoordinateAxis_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/new_CoordinateAxis.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/new_CoordinateAxis_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/new_CoordinateAxis.F90 diff --git a/geom_mgr/CoordinateAxis/not_equal_to_CoordinateAxis.F90 b/geom_mgr/CoordinateAxis/not_equal_to.F90 similarity index 100% rename from geom_mgr/CoordinateAxis/not_equal_to_CoordinateAxis.F90 rename to geom_mgr/CoordinateAxis/not_equal_to.F90 diff --git a/geom_mgr/GeomManager.F90 b/geom_mgr/GeomManager.F90 index 56d31c887210..df5f2170d875 100644 --- a/geom_mgr/GeomManager.F90 +++ b/geom_mgr/GeomManager.F90 @@ -168,20 +168,10 @@ module function get_geom_from_id(this, id, rc) result(geom) integer, intent(in) :: id integer, optional, intent(out) :: rc end function get_geom_from_id - end interface - -contains - - function get_geom_manager() result(geom_mgr) - type(GeomManager), pointer :: geom_mgr - logical :: init = .false. - if (.not. init) then - call geom_manager%initialize() - init = .true. - end if - - geom_mgr => geom_manager - end function get_geom_manager + module function get_geom_manager() result(geom_mgr) + type(GeomManager), pointer :: geom_mgr + end function get_geom_manager + end interface end module mapl3g_GeomManager diff --git a/geom_mgr/GeomManager/CMakeLists.txt b/geom_mgr/GeomManager/CMakeLists.txt index c8ce5197663f..235821db9af4 100644 --- a/geom_mgr/GeomManager/CMakeLists.txt +++ b/geom_mgr/GeomManager/CMakeLists.txt @@ -1,16 +1,17 @@ target_sources(MAPL.geom_mgr PRIVATE - new_GeomManager_GeomManager.F90 - initialize_GeomManager.F90 - add_factory_GeomManager.F90 - delete_mapl_geom_GeomManager.F90 - get_mapl_geom_from_hconfig_GeomManager.F90 - get_mapl_geom_from_metadata_GeomManager.F90 - get_mapl_geom_from_id_GeomManager.F90 - get_mapl_geom_from_spec_GeomManager.F90 - add_mapl_geom_GeomManager.F90 - make_geom_spec_from_metadata_GeomManager.F90 - make_geom_spec_from_hconfig_GeomManager.F90 - make_mapl_geom_from_spec_GeomManager.F90 - get_geom_from_id_GeomManager.F90 + get_geom_manager.F90 + new_GeomManager.F90 + initialize.F90 + add_factory.F90 + delete_mapl_geom.F90 + get_mapl_geom_from_hconfig.F90 + get_mapl_geom_from_metadata.F90 + get_mapl_geom_from_id.F90 + get_mapl_geom_from_spec.F90 + add_mapl_geom.F90 + make_geom_spec_from_metadata.F90 + make_geom_spec_from_hconfig.F90 + make_mapl_geom_from_spec.F90 + get_geom_from_id.F90 ) diff --git a/geom_mgr/GeomManager/add_factory_GeomManager.F90 b/geom_mgr/GeomManager/add_factory.F90 similarity index 100% rename from geom_mgr/GeomManager/add_factory_GeomManager.F90 rename to geom_mgr/GeomManager/add_factory.F90 diff --git a/geom_mgr/GeomManager/add_mapl_geom_GeomManager.F90 b/geom_mgr/GeomManager/add_mapl_geom.F90 similarity index 100% rename from geom_mgr/GeomManager/add_mapl_geom_GeomManager.F90 rename to geom_mgr/GeomManager/add_mapl_geom.F90 diff --git a/geom_mgr/GeomManager/delete_mapl_geom_GeomManager.F90 b/geom_mgr/GeomManager/delete_mapl_geom.F90 similarity index 100% rename from geom_mgr/GeomManager/delete_mapl_geom_GeomManager.F90 rename to geom_mgr/GeomManager/delete_mapl_geom.F90 diff --git a/geom_mgr/GeomManager/get_geom_from_id_GeomManager.F90 b/geom_mgr/GeomManager/get_geom_from_id.F90 similarity index 100% rename from geom_mgr/GeomManager/get_geom_from_id_GeomManager.F90 rename to geom_mgr/GeomManager/get_geom_from_id.F90 diff --git a/geom_mgr/GeomManager/get_geom_manager.F90 b/geom_mgr/GeomManager/get_geom_manager.F90 new file mode 100644 index 000000000000..426bae4f1929 --- /dev/null +++ b/geom_mgr/GeomManager/get_geom_manager.F90 @@ -0,0 +1,19 @@ +#include "MAPL_Generic.h" + +submodule (mapl3g_GeomManager) get_geom_manager_smod + +contains + + module function get_geom_manager() result(geom_mgr) + type(GeomManager), pointer :: geom_mgr + logical :: init = .false. + + if (.not. init) then + call geom_manager%initialize() + init = .true. + end if + + geom_mgr => geom_manager + end function get_geom_manager + +end submodule get_geom_manager_smod diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_hconfig_GeomManager.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_hconfig.F90 similarity index 100% rename from geom_mgr/GeomManager/get_mapl_geom_from_hconfig_GeomManager.F90 rename to geom_mgr/GeomManager/get_mapl_geom_from_hconfig.F90 diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_id_GeomManager.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_id.F90 similarity index 100% rename from geom_mgr/GeomManager/get_mapl_geom_from_id_GeomManager.F90 rename to geom_mgr/GeomManager/get_mapl_geom_from_id.F90 diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_metadata_GeomManager.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_metadata.F90 similarity index 100% rename from geom_mgr/GeomManager/get_mapl_geom_from_metadata_GeomManager.F90 rename to geom_mgr/GeomManager/get_mapl_geom_from_metadata.F90 diff --git a/geom_mgr/GeomManager/get_mapl_geom_from_spec_GeomManager.F90 b/geom_mgr/GeomManager/get_mapl_geom_from_spec.F90 similarity index 100% rename from geom_mgr/GeomManager/get_mapl_geom_from_spec_GeomManager.F90 rename to geom_mgr/GeomManager/get_mapl_geom_from_spec.F90 diff --git a/geom_mgr/GeomManager/initialize_GeomManager.F90 b/geom_mgr/GeomManager/initialize.F90 similarity index 100% rename from geom_mgr/GeomManager/initialize_GeomManager.F90 rename to geom_mgr/GeomManager/initialize.F90 diff --git a/geom_mgr/GeomManager/make_geom_spec_from_hconfig_GeomManager.F90 b/geom_mgr/GeomManager/make_geom_spec_from_hconfig.F90 similarity index 100% rename from geom_mgr/GeomManager/make_geom_spec_from_hconfig_GeomManager.F90 rename to geom_mgr/GeomManager/make_geom_spec_from_hconfig.F90 diff --git a/geom_mgr/GeomManager/make_geom_spec_from_metadata_GeomManager.F90 b/geom_mgr/GeomManager/make_geom_spec_from_metadata.F90 similarity index 100% rename from geom_mgr/GeomManager/make_geom_spec_from_metadata_GeomManager.F90 rename to geom_mgr/GeomManager/make_geom_spec_from_metadata.F90 diff --git a/geom_mgr/GeomManager/make_mapl_geom_from_spec_GeomManager.F90 b/geom_mgr/GeomManager/make_mapl_geom_from_spec.F90 similarity index 100% rename from geom_mgr/GeomManager/make_mapl_geom_from_spec_GeomManager.F90 rename to geom_mgr/GeomManager/make_mapl_geom_from_spec.F90 diff --git a/geom_mgr/GeomManager/new_GeomManager_GeomManager.F90 b/geom_mgr/GeomManager/new_GeomManager.F90 similarity index 100% rename from geom_mgr/GeomManager/new_GeomManager_GeomManager.F90 rename to geom_mgr/GeomManager/new_GeomManager.F90 diff --git a/geom_mgr/MaplGeom/CMakeLists.txt b/geom_mgr/MaplGeom/CMakeLists.txt index 7cc96acd7c91..405f05e18f35 100644 --- a/geom_mgr/MaplGeom/CMakeLists.txt +++ b/geom_mgr/MaplGeom/CMakeLists.txt @@ -1,11 +1,11 @@ target_sources(MAPL.geom_mgr PRIVATE - new_MaplGeom_MaplGeom.F90 - set_id_MaplGeom.F90 - get_spec_MaplGeom.F90 - get_geom_MaplGeom.F90 - get_factory_MaplGeom.F90 - get_file_metadata_MaplGeom.F90 - get_gridded_dims_MaplGeom.F90 - get_basis_MaplGeom.F90 + new_MaplGeom.F90 + set_id.F90 + get_spec.F90 + get_geom.F90 + get_factory.F90 + get_file_metadata.F90 + get_gridded_dims.F90 + get_basis.F90 ) diff --git a/geom_mgr/MaplGeom/get_basis_MaplGeom.F90 b/geom_mgr/MaplGeom/get_basis.F90 similarity index 100% rename from geom_mgr/MaplGeom/get_basis_MaplGeom.F90 rename to geom_mgr/MaplGeom/get_basis.F90 diff --git a/geom_mgr/MaplGeom/get_factory_MaplGeom.F90 b/geom_mgr/MaplGeom/get_factory.F90 similarity index 100% rename from geom_mgr/MaplGeom/get_factory_MaplGeom.F90 rename to geom_mgr/MaplGeom/get_factory.F90 diff --git a/geom_mgr/MaplGeom/get_file_metadata_MaplGeom.F90 b/geom_mgr/MaplGeom/get_file_metadata.F90 similarity index 100% rename from geom_mgr/MaplGeom/get_file_metadata_MaplGeom.F90 rename to geom_mgr/MaplGeom/get_file_metadata.F90 diff --git a/geom_mgr/MaplGeom/get_geom_MaplGeom.F90 b/geom_mgr/MaplGeom/get_geom.F90 similarity index 100% rename from geom_mgr/MaplGeom/get_geom_MaplGeom.F90 rename to geom_mgr/MaplGeom/get_geom.F90 diff --git a/geom_mgr/MaplGeom/get_gridded_dims_MaplGeom.F90 b/geom_mgr/MaplGeom/get_gridded_dims.F90 similarity index 100% rename from geom_mgr/MaplGeom/get_gridded_dims_MaplGeom.F90 rename to geom_mgr/MaplGeom/get_gridded_dims.F90 diff --git a/geom_mgr/MaplGeom/get_spec_MaplGeom.F90 b/geom_mgr/MaplGeom/get_spec.F90 similarity index 100% rename from geom_mgr/MaplGeom/get_spec_MaplGeom.F90 rename to geom_mgr/MaplGeom/get_spec.F90 diff --git a/geom_mgr/MaplGeom/new_MaplGeom_MaplGeom.F90 b/geom_mgr/MaplGeom/new_MaplGeom.F90 similarity index 100% rename from geom_mgr/MaplGeom/new_MaplGeom_MaplGeom.F90 rename to geom_mgr/MaplGeom/new_MaplGeom.F90 diff --git a/geom_mgr/MaplGeom/set_id_MaplGeom.F90 b/geom_mgr/MaplGeom/set_id.F90 similarity index 100% rename from geom_mgr/MaplGeom/set_id_MaplGeom.F90 rename to geom_mgr/MaplGeom/set_id.F90 diff --git a/geom_mgr/VectorBasis/CMakeLists.txt b/geom_mgr/VectorBasis/CMakeLists.txt index 23a2e686a3d9..e3caa5f614ae 100644 --- a/geom_mgr/VectorBasis/CMakeLists.txt +++ b/geom_mgr/VectorBasis/CMakeLists.txt @@ -1,16 +1,16 @@ target_sources(MAPL.geom_mgr PRIVATE - create_fields_VectorBasis.F90 - destroy_fields_VectorBasis.F90 - get_unit_vector_VectorBasis.F90 - grid_get_centers_VectorBasis.F90 - grid_get_coords_1d_VectorBasis.F90 - grid_get_coords_2d_VectorBasis.F90 - grid_get_corners_VectorBasis.F90 - latlon2xyz_VectorBasis.F90 - MAPL_GeomGetCoords_VectorBasis.F90 - mid_pt_sphere_VectorBasis.F90 - new_GridVectorBasis_VectorBasis.F90 - new_NS_Basis_VectorBasis.F90 - xyz2latlon_VectorBasis.F90 + create_fields.F90 + destroy_fields.F90 + get_unit_vector.F90 + grid_get_centers.F90 + grid_get_coords_1d.F90 + grid_get_coords_2d.F90 + grid_get_corners.F90 + latlon2xyz.F90 + MAPL_GeomGetCoords.F90 + mid_pt_sphere.F90 + new_GridVectorBasis.F90 + new_NS_Basis.F90 + xyz2latlon.F90 ) diff --git a/geom_mgr/VectorBasis/MAPL_GeomGetCoords_VectorBasis.F90 b/geom_mgr/VectorBasis/MAPL_GeomGetCoords.F90 similarity index 100% rename from geom_mgr/VectorBasis/MAPL_GeomGetCoords_VectorBasis.F90 rename to geom_mgr/VectorBasis/MAPL_GeomGetCoords.F90 diff --git a/geom_mgr/VectorBasis/create_fields_VectorBasis.F90 b/geom_mgr/VectorBasis/create_fields.F90 similarity index 100% rename from geom_mgr/VectorBasis/create_fields_VectorBasis.F90 rename to geom_mgr/VectorBasis/create_fields.F90 diff --git a/geom_mgr/VectorBasis/destroy_fields_VectorBasis.F90 b/geom_mgr/VectorBasis/destroy_fields.F90 similarity index 100% rename from geom_mgr/VectorBasis/destroy_fields_VectorBasis.F90 rename to geom_mgr/VectorBasis/destroy_fields.F90 diff --git a/geom_mgr/VectorBasis/get_unit_vector_VectorBasis.F90 b/geom_mgr/VectorBasis/get_unit_vector.F90 similarity index 100% rename from geom_mgr/VectorBasis/get_unit_vector_VectorBasis.F90 rename to geom_mgr/VectorBasis/get_unit_vector.F90 diff --git a/geom_mgr/VectorBasis/grid_get_centers_VectorBasis.F90 b/geom_mgr/VectorBasis/grid_get_centers.F90 similarity index 100% rename from geom_mgr/VectorBasis/grid_get_centers_VectorBasis.F90 rename to geom_mgr/VectorBasis/grid_get_centers.F90 diff --git a/geom_mgr/VectorBasis/grid_get_coords_1d_VectorBasis.F90 b/geom_mgr/VectorBasis/grid_get_coords_1d.F90 similarity index 100% rename from geom_mgr/VectorBasis/grid_get_coords_1d_VectorBasis.F90 rename to geom_mgr/VectorBasis/grid_get_coords_1d.F90 diff --git a/geom_mgr/VectorBasis/grid_get_coords_2d_VectorBasis.F90 b/geom_mgr/VectorBasis/grid_get_coords_2d.F90 similarity index 100% rename from geom_mgr/VectorBasis/grid_get_coords_2d_VectorBasis.F90 rename to geom_mgr/VectorBasis/grid_get_coords_2d.F90 diff --git a/geom_mgr/VectorBasis/grid_get_corners_VectorBasis.F90 b/geom_mgr/VectorBasis/grid_get_corners.F90 similarity index 100% rename from geom_mgr/VectorBasis/grid_get_corners_VectorBasis.F90 rename to geom_mgr/VectorBasis/grid_get_corners.F90 diff --git a/geom_mgr/VectorBasis/latlon2xyz_VectorBasis.F90 b/geom_mgr/VectorBasis/latlon2xyz.F90 similarity index 100% rename from geom_mgr/VectorBasis/latlon2xyz_VectorBasis.F90 rename to geom_mgr/VectorBasis/latlon2xyz.F90 diff --git a/geom_mgr/VectorBasis/mid_pt_sphere_VectorBasis.F90 b/geom_mgr/VectorBasis/mid_pt_sphere.F90 similarity index 100% rename from geom_mgr/VectorBasis/mid_pt_sphere_VectorBasis.F90 rename to geom_mgr/VectorBasis/mid_pt_sphere.F90 diff --git a/geom_mgr/VectorBasis/new_GridVectorBasis_VectorBasis.F90 b/geom_mgr/VectorBasis/new_GridVectorBasis.F90 similarity index 100% rename from geom_mgr/VectorBasis/new_GridVectorBasis_VectorBasis.F90 rename to geom_mgr/VectorBasis/new_GridVectorBasis.F90 diff --git a/geom_mgr/VectorBasis/new_NS_Basis_VectorBasis.F90 b/geom_mgr/VectorBasis/new_NS_Basis.F90 similarity index 100% rename from geom_mgr/VectorBasis/new_NS_Basis_VectorBasis.F90 rename to geom_mgr/VectorBasis/new_NS_Basis.F90 diff --git a/geom_mgr/VectorBasis/xyz2latlon_VectorBasis.F90 b/geom_mgr/VectorBasis/xyz2latlon.F90 similarity index 100% rename from geom_mgr/VectorBasis/xyz2latlon_VectorBasis.F90 rename to geom_mgr/VectorBasis/xyz2latlon.F90 diff --git a/shared/MAPL_Throw.F90 b/shared/MAPL_Throw.F90 index f59bbf594e96..e9a51bfcb7f5 100644 --- a/shared/MAPL_Throw.F90 +++ b/shared/MAPL_Throw.F90 @@ -120,14 +120,30 @@ function get_base_name(filename) result(base_name) character(:), allocatable :: base_name character(*), intent(in) :: filename - integer :: idx + integer :: idx, idx2 idx = scan(filename, '/', back=.true.) + if (idx /= 0) then + idx2 = scan(filename(:idx-1), '/', back=.true.) + else + idx2 = idx + end if - base_name = filename(idx+1:) + base_name = filename(idx2+1:) end function get_base_name +! function get_base_name(filename) result(base_name) +! character(:), allocatable :: base_name +! character(*), intent(in) :: filename +! +! integer :: idx +! +! idx = scan(filename, '/', back=.true.) +! +! base_name = filename(idx+1:) +! +! end function get_base_name end module MAPL_ThrowMod