From 318308ea4e96474b64307eaf5c351b4e1a2b2cbc Mon Sep 17 00:00:00 2001 From: Ricky Wong <141156427+mo-rickywong@users.noreply.github.com> Date: Tue, 1 Sep 2026 13:23:22 +0100 Subject: [PATCH 1/6] Remove much of direct dependency on base_mesh_config_mod --- .../source/driver/io_demo_checkpoint_mod.f90 | 19 +---- .../source/kernel/set_lbc_int_kernel_mod.F90 | 2 +- .../source/kernel/set_lbc_real_kernel_mod.F90 | 2 +- .../driver/source/driver_coordinates_mod.F90 | 24 ++---- components/driver/source/driver_fem_mod.f90 | 20 ++--- components/driver/source/driver_mesh_mod.f90 | 2 +- .../assign_coordinate_xyz_mod_test.pf | 2 +- .../algorithm/sci_fem_constants_mod.x90 | 16 +++- .../algorithm/sci_geometric_constants_mod.x90 | 41 +++------ .../algorithm/sci_mapping_constants_mod.x90 | 81 ++---------------- .../kernel/geometry/sci_chi_transform_mod.F90 | 6 +- .../geometry/sci_coordinate_jacobian_mod.F90 | 4 +- .../sci_height_continuous_kernel_mod.F90 | 2 +- .../sci_height_discontinuous_kernel_mod.F90 | 2 +- .../geometry/sci_native_jacobian_mod.F90 | 2 +- ...sci_compute_map_u_operators_kernel_mod.F90 | 2 +- .../sci_compute_sample_u_ops_kernel_mod.F90 | 2 +- .../sci_convert_phys_to_hdiv_kernel_mod.F90 | 2 +- ...i_project_ws_to_w1_operator_kernel_mod.F90 | 2 +- .../source/utilities/sci_mesh_enums_mod.f90 | 85 +++++++++++++++++++ .../fem/gp_vector_rhs_kernel_mod_test.pf | 5 +- .../kernel/geometry/chi_transform_mod_test.pf | 7 +- ...coordinate_jacobian_alphabetaz_mod_test.pf | 2 +- .../coordinate_jacobian_lonlatz_mod_test.pf | 2 +- .../coordinate_jacobian_stretched_mod_test.pf | 2 +- .../coordinate_jacobian_xyz_mod_test.pf | 2 +- .../geometry/get_dz_w3_kernel_mod_test.pf | 2 +- .../height_continuous_kernel_mod_test.pf | 2 +- .../height_discontinuous_kernel_mod_test.pf | 2 +- .../native_jacobian_alphabetaz_mod_test.pf | 2 +- .../native_jacobian_lonlatz_mod_test.pf | 2 +- .../native_jacobian_stretched_mod_test.pf | 2 +- ...compute_map_u_operators_kernel_mod_test.pf | 2 +- .../compute_sample_u_ops_kernel_mod_test.pf | 4 +- .../convert_phys_to_hdiv_kernel_mod_test.pf | 2 +- ...oject_ws_to_w1_operator_kernel_mod_test.pf | 2 +- .../sample_w3_to_wtheta_kernel_mod_test.pf | 2 +- .../sample_wtheta_to_w3_kernel_mod_test.pf | 2 +- .../w3_to_w2_displacement_kernel_mod_test.pf | 2 +- .../inject_sh_w3_to_wt_kernel_mod_test.pf | 2 +- .../inject_wt_to_sh_w3_kernel_mod_test.pf | 2 +- 41 files changed, 172 insertions(+), 198 deletions(-) create mode 100644 components/science/source/utilities/sci_mesh_enums_mod.f90 diff --git a/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 b/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 index 0fa29fcb9b..ba1e066c12 100644 --- a/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 +++ b/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 @@ -25,10 +25,7 @@ module io_demo_checkpoint_mod LOG_LEVEL_DEBUG, LOG_LEVEL_ERROR use mesh_mod, only: mesh_type - use base_mesh_config_mod, only: geometry_spherical, & - geometry_planar, & - topology_fully_periodic, & - topology_non_periodic + use sci_mesh_enums_mod, only: get_mesh_enums implicit none @@ -71,20 +68,8 @@ subroutine setup_checkpoint_io(modeldb, chi, panel_id) call log_event( 'io_demo: Setting up checkpoint I/O', LOG_LEVEL_DEBUG ) mesh => chi(1)%get_mesh() - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else if (mesh%is_topology_non_periodic()) then - topology = topology_non_periodic - else - call log_event( 'Unsupported mesh topology', & - log_level_error ) - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = modeldb%config%finite_element%coord_system() scaled_radius = modeldb%config%planet%scaled_radius() diff --git a/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 b/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 index 0a7c37ca7f..a8bdd9f156 100644 --- a/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 +++ b/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 @@ -14,7 +14,7 @@ module set_lbc_int_kernel_mod use constants_mod, only: r_def, i_def, l_def, radians_to_degrees use kernel_mod, only: kernel_type - use base_mesh_config_mod, only: geometry_spherical + use sci_mesh_enums_mod, only: geometry_spherical implicit none diff --git a/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 b/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 index 02d8d983e5..5127d4119c 100644 --- a/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 +++ b/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 @@ -14,7 +14,7 @@ module set_lbc_real_kernel_mod use constants_mod, only: r_def, i_def, l_def, radians_to_degrees use kernel_mod, only: kernel_type - use base_mesh_config_mod, only: geometry_spherical + use sci_mesh_enums_mod, only: geometry_spherical implicit none diff --git a/components/driver/source/driver_coordinates_mod.F90 b/components/driver/source/driver_coordinates_mod.F90 index d5c5d98a48..aaddb82e96 100644 --- a/components/driver/source/driver_coordinates_mod.F90 +++ b/components/driver/source/driver_coordinates_mod.F90 @@ -18,11 +18,13 @@ module driver_coordinates_mod schmidt_transform_xyz, & inverse_schmidt_transform_xyz + use sci_mesh_enums_mod, only: get_mesh_enums, & + geometry_planar, & + geometry_spherical, & + topology_fully_periodic, & + topology_non_periodic + ! Configuration modules - use base_mesh_config_mod, only: geometry_planar, & - geometry_spherical, & - topology_fully_periodic, & - topology_non_periodic use finite_element_config_mod, only: coord_system_xyz implicit none @@ -64,7 +66,7 @@ subroutine assign_coordinate_field(config, mesh, chi, panel_id) implicit none type(config_type), intent(in) :: config - type(mesh_type), intent(in), pointer :: mesh + type(mesh_type), intent(in) :: mesh type(field_type), intent(inout) :: chi(3) type(field_type), intent(inout) :: panel_id @@ -108,17 +110,7 @@ subroutine assign_coordinate_field(config, mesh, chi, panel_id) nullify( map, map_pid, dof_coords, reference_element ) - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/driver/source/driver_fem_mod.f90 b/components/driver/source/driver_fem_mod.f90 index 8d2bfe5e43..8a3702a21f 100644 --- a/components/driver/source/driver_fem_mod.f90 +++ b/components/driver/source/driver_fem_mod.f90 @@ -26,6 +26,10 @@ module driver_fem_mod use sci_chi_transform_mod, only: init_chi_transforms, & final_chi_transforms + use sci_mesh_enums_mod, only: get_mesh_enums, & + geometry_spherical, & + geometry_planar, & + topology_non_periodic ! Object types use config_mod, only: config_type use field_mod, only: field_type @@ -33,10 +37,6 @@ module driver_fem_mod use inventory_by_mesh_mod, only: inventory_by_mesh_type ! Configuration modules - use base_mesh_config_mod, only: geometry_spherical, & - geometry_planar, & - topology_non_periodic, & - topology_fully_periodic use finite_element_config_mod, only: coord_system_xyz, & coord_space_W0, & coord_space_Wchi, & @@ -121,17 +121,7 @@ subroutine init_fem(config, chi_inventory, panel_id_inventory) mesh => mesh_collection%get_mesh(all_mesh_names(i)) mesh_name = mesh%get_mesh_name() - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) ! Initialise coordinate transformations call init_chi_transforms( geometry, topology, & diff --git a/components/driver/source/driver_mesh_mod.f90 b/components/driver/source/driver_mesh_mod.f90 index 40157459ae..7aad45f51d 100644 --- a/components/driver/source/driver_mesh_mod.f90 +++ b/components/driver/source/driver_mesh_mod.f90 @@ -54,7 +54,7 @@ module driver_mesh_mod ! Configuration modules use finite_element_config_mod, only: cellshape_quadrilateral - use base_mesh_config_mod, only: geometry_spherical, & + use sci_mesh_enums_mod, only: geometry_spherical, & topology_fully_periodic implicit none diff --git a/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf b/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf index 37eaac9efa..1ed944e46b 100644 --- a/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf +++ b/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf @@ -9,7 +9,7 @@ module assign_coordinate_xyz_mod_test use constants_mod, only : r_def, i_def - use base_mesh_config_mod, only: geometry_planar, topology_fully_periodic + use sci_mesh_enums_mod, only: geometry_planar, topology_fully_periodic use funit implicit none diff --git a/components/science/source/algorithm/sci_fem_constants_mod.x90 b/components/science/source/algorithm/sci_fem_constants_mod.x90 index 28c31d995e..4b4c3806e1 100644 --- a/components/science/source/algorithm/sci_fem_constants_mod.x90 +++ b/components/science/source/algorithm/sci_fem_constants_mod.x90 @@ -48,6 +48,8 @@ module sci_fem_constants_mod use dg_inc_matrix_vector_kernel_mod, only: dg_inc_matrix_vector_kernel_type use sci_multiplicity_kernel_mod, only: multiplicity_kernel_type + use sci_mesh_enums_mod, only: topology_fully_periodic + implicit none private @@ -210,7 +212,6 @@ contains only: compute_mass_matrix_kernel_w1_type use sci_edge_lump_w2_mass_matrix_kernel_mod, & only: edge_lump_w2_mass_matrix_kernel_type - use base_mesh_config_mod, only: topology, topology_fully_periodic implicit none @@ -230,6 +231,11 @@ contains integer(kind=i_def), parameter :: stencil_depth = 1_i_def integer(tik) :: id + integer(i_def) :: topology + + mesh => mesh_collection%get_mesh(mesh_id) + call get_mesh_enums(mesh, topology=topology) + ! If running at lowest order, use finite volume if (element_order_h == 0 .and. element_order_v == 0) then mm_op => get_mass_matrix_fv(space, mesh_id) @@ -266,7 +272,6 @@ contains call inventory%initialise(name=inventory_name) end if - mesh => mesh_collection%get_mesh(mesh_id) constant_exists = inventory%paired_object_exists(mesh_id) if (.not. constant_exists) then @@ -328,7 +333,6 @@ contains only: compute_mass_matrix_kernel_w1_type use sci_edge_lump_w2_mass_matrix_kernel_mod, & only: edge_lump_w2_mass_matrix_kernel_type - use base_mesh_config_mod, only: topology, topology_fully_periodic implicit none @@ -348,6 +352,11 @@ contains integer(kind=i_def), parameter :: stencil_depth = 1_i_def integer(tik) :: id + integer(i_def) :: topology + + mesh => mesh_collection%get_mesh(mesh_id) + call get_mesh_enums(mesh, topology=topology) + ! Point to appropriate inventory for this space select case (space) case (W1) @@ -378,7 +387,6 @@ contains call inventory%initialise(name=inventory_name) end if - mesh => mesh_collection%get_mesh(mesh_id) constant_exists = inventory%paired_object_exists(mesh_id) if (.not. constant_exists) then diff --git a/components/science/source/algorithm/sci_geometric_constants_mod.x90 b/components/science/source/algorithm/sci_geometric_constants_mod.x90 index decdc43320..40cc433ba7 100644 --- a/components/science/source/algorithm/sci_geometric_constants_mod.x90 +++ b/components/science/source/algorithm/sci_geometric_constants_mod.x90 @@ -24,6 +24,8 @@ module sci_geometric_constants_mod use timing_mod, only: start_timing, stop_timing, & tik, LPROF + use sci_mesh_enums, only: get_mesh_enums, geometry_spherical + ! Object types use config_mod, only: config_type use field_mod, only: field_type @@ -35,10 +37,6 @@ module sci_geometric_constants_mod use local_mesh_mod, only: local_mesh_type ! Configuration - use base_mesh_config_mod, only: geometry_spherical, & - geometry_planar, & - topology_fully_periodic, & - topology_non_periodic use finite_element_config_mod, only: coord_system_native implicit none @@ -190,6 +188,8 @@ contains element_order_h = config%finite_element%element_order_h() element_order_v = config%finite_element%element_order_v() + call get_mesh_enums(mesh, topology=topology) + f_lat = config%base_mesh%f_lat() f_lon = config%idealised%f_lon() @@ -214,14 +214,6 @@ contains chi => get_coordinates(mesh) panel_id => get_panel_id(mesh) - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else if (mesh%is_topology_non_periodic()) then - topology = topology_non_periodic - else - call log_event('compute_latlon: Unsupported topology selection',log_level_error) - end if - call invoke( compute_latlon_kernel_type(lat, long, chi, panel_id, & geometry_spherical, & topology, coord_system, & @@ -782,7 +774,7 @@ contains implicit none - type(config_type), intent(in) :: config + type(config_type), intent(in) :: config type(mesh_type), intent(in) :: mesh type(field_type), pointer :: dz_w3 @@ -972,8 +964,8 @@ contains implicit none - type(config_type), intent(in) :: config - type(mesh_type), intent(in), pointer :: mesh + type(config_type), intent(in) :: config + type(mesh_type), intent(in) :: mesh integer(kind=i_def) :: local_mesh_id @@ -995,11 +987,7 @@ contains call dA_msl_proj_inventory%initialise(name="dA_msl_proj") end if - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if + call get_mesh_enums(mesh, geometry) planet_radius = config%extrusion%planet_radius() domain_height = config%extrusion%domain_height() @@ -1340,11 +1328,8 @@ contains real(kind=r_def) :: scaled_radius - if (mesh%is_geometry_spherical()) then - geometry= geometry_spherical - else - geometry= geometry_planar - end if + + call get_mesh_enums(mesh, geometry) element_order_h = config%finite_element%element_order_h() element_order_v = config%finite_element%element_order_v() @@ -1470,11 +1455,7 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if + call get_mesh_enums(mesh, geometry) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/science/source/algorithm/sci_mapping_constants_mod.x90 b/components/science/source/algorithm/sci_mapping_constants_mod.x90 index e295d9b756..6d4fb064a5 100644 --- a/components/science/source/algorithm/sci_mapping_constants_mod.x90 +++ b/components/science/source/algorithm/sci_mapping_constants_mod.x90 @@ -40,16 +40,11 @@ module sci_mapping_constants_mod use timing_mod, only: start_timing, stop_timing, & tik, LPROF + use sci_mesh_enums, only: get_mesh_enums + ! Object types use config_mod, only: config_type - ! Configuration modules - use base_mesh_config_mod, only: geometry_spherical, & - geometry_planar, & - topology_fully_periodic, & - topology_non_periodic - - ! Other algorithms use sci_geometric_constants_mod, only: get_coordinates, & get_panel_id @@ -230,17 +225,7 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -309,17 +294,7 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1109,17 +1084,7 @@ contains integer(kind=i_def), parameter :: xdirection = 1_i_def integer(tik) :: id - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1191,17 +1156,7 @@ contains integer(kind=i_def), parameter :: ydirection = 2_i_def integer(tik) :: id - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1274,17 +1229,7 @@ contains integer(kind=i_def), parameter :: zdirection = 3_i_def integer(tik) :: id - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1358,17 +1303,7 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else - geometry = geometry_planar - end if - - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic - else - topology = topology_non_periodic - end if + call get_mesh_enums(mesh, geometry, topology) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 b/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 index 22e5bd04b6..b504b94978 100644 --- a/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 +++ b/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 @@ -29,11 +29,11 @@ module sci_chi_transform_mod LOG_LEVEL_DEBUG, & LOG_LEVEL_WARNING use matrix_invert_mod, only : matrix_invert_3x3 +use sci_mesh_enums_mod, only : geometry_spherical, & + geometry_planar, & + topology_fully_periodic ! Configuration modules -use base_mesh_config_mod, only: geometry_spherical, & - geometry_planar, & - topology_fully_periodic use finite_element_config_mod, only: coord_system_xyz, & coord_system_native diff --git a/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 b/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 index 852afbfa65..82e7bb6951 100644 --- a/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 +++ b/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 @@ -24,10 +24,10 @@ module sci_coordinate_jacobian_mod get_to_stretch, & get_to_rotate, & get_stretch_factor + use sci_mesh_enums_mod, only: geometry_planar, & + topology_fully_periodic ! Configuration modules - use base_mesh_config_mod, only: geometry_planar, & - topology_fully_periodic use finite_element_config_mod, only: coord_system_xyz, & coord_system_native diff --git a/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 b/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 index 4964cb6aa7..4810e290d6 100644 --- a/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 +++ b/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 @@ -15,7 +15,7 @@ module sci_height_continuous_kernel_mod GH_READ, GH_INC, & ANY_SPACE_1, ANY_SPACE_9, & CELL_COLUMN, GH_BASIS, GH_EVALUATOR - use base_mesh_config_mod, only: geometry_spherical + use sci_mesh_enums_mod, only: geometry_spherical use constants_mod, only: r_def, i_def, l_def use finite_element_config_mod, only: coord_system_xyz use kernel_mod, only: kernel_type diff --git a/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 b/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 index 101e8aa4b4..654159d2ec 100644 --- a/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 +++ b/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 @@ -16,7 +16,7 @@ module sci_height_discontinuous_kernel_mod GH_READ, GH_WRITE, & ANY_DISCONTINUOUS_SPACE_1, ANY_SPACE_9, & CELL_COLUMN, GH_BASIS, GH_EVALUATOR - use base_mesh_config_mod, only: geometry_spherical + use sci_mesh_enums_mod, only: geometry_spherical use constants_mod, only: r_def, i_def, l_def use finite_element_config_mod, only: coord_system_xyz use kernel_mod, only: kernel_type diff --git a/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 b/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 index 10116b3eec..2ac304d545 100644 --- a/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 +++ b/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 @@ -29,7 +29,7 @@ module sci_native_jacobian_mod use finite_element_config_mod, only: coord_system_xyz, & coord_system_native - use base_mesh_config_mod, only: geometry_planar, & + use sci_mesh_enums_mod, only: geometry_planar, & topology_fully_periodic implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 index f05d600f8f..ace037398d 100644 --- a/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 @@ -29,7 +29,7 @@ module sci_compute_map_u_operators_kernel_mod use kernel_mod, only : kernel_type use log_mod, only : log_event, LOG_LEVEL_ERROR, LOG_LEVEL_INFO - use base_mesh_config_mod, only: geometry_spherical, geometry_planar + use sci_mesh_enums_mod, only: geometry_spherical, geometry_planar implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 index eb8514b3ce..80c220ff1c 100644 --- a/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 @@ -34,7 +34,7 @@ module sci_compute_sample_u_ops_kernel_mod use coord_transform_mod, only : sphere2cart_vector use reference_element_mod, only : W, S, N, E, T, B - use base_mesh_config_mod, only: geometry_spherical, geometry_planar + use sci_mesh_enums_mod, only: geometry_spherical, geometry_planar implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 index 2888e35773..e324f05c8c 100644 --- a/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 @@ -22,7 +22,7 @@ module sci_convert_phys_to_hdiv_kernel_mod use fs_continuity_mod, only : W2 use kernel_mod, only : kernel_type - use base_mesh_config_mod, only: geometry_spherical + use sci_mesh_enums_mod, only: geometry_spherical implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 index d00964b450..9d7936cea2 100644 --- a/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 @@ -27,7 +27,7 @@ module sci_project_ws_to_w1_operator_kernel_mod use fs_continuity_mod, only : W1 use log_mod, only : log_event, LOG_LEVEL_ERROR -use base_mesh_config_mod, only: geometry_spherical, geometry_planar +use sci_mesh_enums_mod, only: geometry_spherical, geometry_planar implicit none diff --git a/components/science/source/utilities/sci_mesh_enums_mod.f90 b/components/science/source/utilities/sci_mesh_enums_mod.f90 new file mode 100644 index 0000000000..7e7749702a --- /dev/null +++ b/components/science/source/utilities/sci_mesh_enums_mod.f90 @@ -0,0 +1,85 @@ +!----------------------------------------------------------------------------- +! (c) Crown copyright Met Office. All rights reserved. +! The file LICENCE, distributed with this code, contains details of the terms +! under which the code may be used +!----------------------------------------------------------------------------- + +!> @brief Module to access mesh enumerations. +module sci_mesh_enums_mod + + use constants_mod, only: i_def, imdi + use log_mod, only: log_event, log_level_error + use mesh_mod, only: mesh_type + + use base_mesh_config_mod, only: & + sci_geometry_spherical => geometry_spherical, & + sci_geometry_planar => geometry_planar, & + sci_topology_fully_periodic => topology_fully_periodic, & + sci_topology_non_periodic => topology_non_periodic + + implicit none + + private + + public :: geometry_spherical, geometry_planar + public :: topology_fully_periodic, topology_non_periodic + + public :: get_mesh_enums + + ! These will get switched to something hardcoded for the science components + ! at a later date to break dependence on base_mesh_config_mod + integer(i_def), parameter :: geometry_spherical = sci_geometry_spherical ! 157 + integer(i_def), parameter :: geometry_planar = sci_geometry_planar ! 358 + integer(i_def), parameter :: topology_fully_periodic = sci_topology_fully_periodic ! 492 + integer(i_def), parameter :: topology_non_periodic = sci_topology_non_periodic ! 157 + +contains + +!--------------------------------------------------------------------------- +!> @brief Returns mesh enumerations in line with science component values +!> @param[in] mesh Mesh object to query +!> @param[out] geometry [optional] Science component geometry enumeration +!> @param[out] topology [optional] Science component topology enumeration +!> +subroutine get_mesh_enums(mesh, geometry, topology) + + implicit none + + type(mesh_type), intent(in) :: mesh + + integer(i_def), optional, intent(out) :: geometry + integer(i_def), optional, intent(out) :: topology + + if (present(geometry)) then + geometry = imdi + + if (mesh%is_geometry_spherical()) then + geometry = geometry_spherical + + else if (mesh%is_geometry_planar()) then + geometry = geometry_planar + + else + call log_event('Unsupported mesh geometry', log_level_error) + + end if + end if + + if (present(topology)) then + topology = imdi + + if (mesh%is_topology_periodic()) then + topology = topology_fully_periodic + + else if (mesh%is_topology_non_periodic()) then + topology = topology_non_periodic + + else + call log_event('Unsupported mesh topology', log_level_error) + + end if + end if + +end subroutine get_mesh_enums + +end module sci_mesh_enums_mod diff --git a/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf b/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf index 88cd570cb9..19f531cbc7 100644 --- a/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf @@ -38,8 +38,9 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use base_mesh_config_mod, only : geometry_planar, & - topology_fully_periodic + use sci_mesh_enums_mod, only : geometry_planar, & + topology_fully_periodic + use sci_chi_transform_mod, only : init_chi_transforms use finite_element_config_mod, only : cellshape_quadrilateral, & coord_system_xyz, coord_space_wchi diff --git a/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf b/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf index 26f584216b..2a74cdb50c 100644 --- a/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf @@ -10,10 +10,9 @@ module chi_transform_mod_test use constants_mod, only : i_def, r_def, str_long, PI, rmdi - use base_mesh_config_mod, only: geometry_spherical, & - geometry_planar, & - topology_fully_periodic, & - topology_non_periodic + use sci_mesh_enums_mod, only: geometry_spherical, & + topology_fully_periodic, & + topology_non_periodic use finite_element_config_mod, only: coord_system_native, & coord_system_xyz diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf index ae1aa557ae..527779883f 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf @@ -10,7 +10,7 @@ module coordinate_jacobian_alphabetaz_mod_test use funit use constants_mod, only: r_def, i_def - use base_mesh_config_mod, only: geometry_spherical, & + use sci_mesh_enums_mod, only: geometry_spherical, & topology_fully_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf index e4a2c021f7..f5fdfce871 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf @@ -10,7 +10,7 @@ module coordinate_jacobian_lonlatz_mod_test use funit use constants_mod, only : r_def, i_def, PI - use base_mesh_config_mod, only: geometry_spherical, & + use sci_mesh_enums_mod, only: geometry_spherical, & topology_non_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf index abcec08a42..99178a6752 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf @@ -21,7 +21,7 @@ contains @before subroutine set_up() - use base_mesh_config_mod, only : geometry_spherical, & + use sci_mesh_enums_mod, only : geometry_spherical, & topology_non_periodic use extrusion_config_mod, only : method_uniform, & stretching_method_linear diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf index bfc90c002c..7c9c585979 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf @@ -64,7 +64,7 @@ contains pointwise_coordinate_jacobian_inverse use finite_element_config_mod, only: coord_system_xyz - use base_mesh_config_mod, only: geometry_planar, & + use sci_mesh_enums_mod, only: geometry_planar, & topology_non_periodic implicit none diff --git a/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf index f3644f6666..8fdd5d1dd6 100644 --- a/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf @@ -35,7 +35,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use base_mesh_config_mod, only : geometry_planar, & + use sci_mesh_enums_mod, only : geometry_planar, & topology_fully_periodic use finite_element_config_mod, only : cellshape_quadrilateral, & coord_system_xyz, coord_space_wchi diff --git a/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf b/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf index b3e3d31e6a..9e33c7573f 100644 --- a/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf @@ -7,7 +7,7 @@ !! This test is parametrised to test both planar and spherical geometries. module height_continuous_kernel_mod_test - use base_mesh_config_mod, only : geometry_planar, & + use sci_mesh_enums_mod, only : geometry_planar, & geometry_spherical use constants_mod, only : i_def, r_def, str_long use funit diff --git a/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf b/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf index 400f083eb5..5283335e0f 100644 --- a/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf @@ -38,7 +38,7 @@ contains @Test subroutine test_all( this ) - use base_mesh_config_mod, only : geometry_planar + use sci_mesh_enums_mod, only : geometry_planar use finite_element_config_mod, only : coord_system_xyz use sci_height_discontinuous_kernel_mod, only : height_discontinuous_code diff --git a/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf b/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf index 162bc16429..1884c58b01 100644 --- a/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf @@ -9,7 +9,7 @@ module native_jacobian_alphabetaz_mod_test use funit use constants_mod, only: r_def, i_def - use base_mesh_config_mod, only: geometry_spherical, & + use sci_mesh_enums_mod, only: geometry_spherical, & topology_fully_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf b/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf index 53ed27607b..7af8ea39c1 100644 --- a/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf @@ -10,7 +10,7 @@ module native_jacobian_lonlatz_mod_test use funit use constants_mod, only : r_def, i_def, PI - use base_mesh_config_mod, only: geometry_spherical, & + use sci_mesh_enums_mod, only: geometry_spherical, & topology_non_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf b/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf index f90c9b81b3..008f9d033b 100644 --- a/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf @@ -21,7 +21,7 @@ contains @before subroutine set_up() - use base_mesh_config_mod, only : geometry_spherical, & + use sci_mesh_enums_mod, only : geometry_spherical, & topology_non_periodic use extrusion_config_mod, only : method_uniform, & stretching_method_linear diff --git a/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf index 5686d794b2..889b7a80e9 100644 --- a/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf @@ -8,7 +8,7 @@ module compute_map_u_operators_kernel_mod_test use constants_mod, only : i_def, pi, r_def - use base_mesh_config_mod, only: geometry_spherical, & + use sci_mesh_enums_mod, only: geometry_spherical, & topology_non_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf index 53fe6db22f..0fb9cf4ef1 100644 --- a/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf @@ -6,13 +6,11 @@ module compute_sample_u_ops_kernel_mod_test - use base_mesh_config_mod, only : geometry_spherical, & + use sci_mesh_enums_mod, only : geometry_spherical, & topology_non_periodic use constants_mod, only : i_def, r_def use reference_element_mod, only : W, S, E, N, B, T - use base_mesh_config_mod, only: geometry_spherical, & - topology_non_periodic use finite_element_config_mod, only: coord_system_native use funit diff --git a/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf index 571181d931..bd9c5bbd59 100644 --- a/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf @@ -9,7 +9,7 @@ module convert_phys_to_hdiv_kernel_mod_test use constants_mod, only: i_def, r_def, rmdi - use base_mesh_config_mod, only: geometry_planar, & + use sci_mesh_enums_mod, only: geometry_planar, & topology_fully_periodic use finite_element_config_mod, only: coord_system_xyz diff --git a/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf index 5f1d0f2841..ea4cef727c 100644 --- a/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf @@ -23,7 +23,7 @@ module project_ws_to_w1_operator_kernel_mod_test get_w3_m3x3_dofmap use get_unit_test_3x3x3_chi_mod, only : get_w0_3x3x3_field - use base_mesh_config_mod, only: geometry_planar, & + use sci_mesh_enums_mod, only: geometry_planar, & topology_fully_periodic use finite_element_config_mod, only: coord_system_xyz diff --git a/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf index 9f87b1d068..72158713fc 100644 --- a/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf @@ -34,7 +34,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use base_mesh_config_mod, only : geometry_planar, & + use sci_mesh_enums_mod, only : geometry_planar, & topology_fully_periodic use feign_config_mod, only : feign_base_mesh_config diff --git a/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf index 1f473d77a9..bc69789cb9 100644 --- a/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf @@ -32,7 +32,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use base_mesh_config_mod, only : geometry_planar, & + use sci_mesh_enums_mod, only : geometry_planar, & topology_fully_periodic use feign_config_mod, only : feign_base_mesh_config diff --git a/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf index 6d01ea321e..ac8991d271 100644 --- a/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf @@ -10,7 +10,7 @@ module w3_to_w2_displacement_kernel_mod_test use constants_mod, only: i_def, r_def, PI, l_def use reference_element_mod, only: S, E, N, W - use base_mesh_config_mod, only: geometry_spherical, & + use sci_mesh_enums_mod, only: geometry_spherical, & topology_fully_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf index 24cad03165..41563d7937 100644 --- a/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf @@ -32,7 +32,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use base_mesh_config_mod, only : geometry_planar, & + use sci_mesh_enums_mod, only : geometry_planar, & topology_fully_periodic use feign_config_mod, only : feign_base_mesh_config diff --git a/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf index f5467afc23..54dbcd28c4 100644 --- a/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf @@ -32,7 +32,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use base_mesh_config_mod, only : geometry_planar, & + use sci_mesh_enums_mod, only : geometry_planar, & topology_fully_periodic use feign_config_mod, only : feign_base_mesh_config From f785e8364a0c9dbeb89caf4f40b9b0162350861b Mon Sep 17 00:00:00 2001 From: Ricky Wong <141156427+mo-rickywong@users.noreply.github.com> Date: Tue, 1 Sep 2026 20:10:25 +0100 Subject: [PATCH 2/6] typo fix --- .../science/source/algorithm/sci_geometric_constants_mod.x90 | 2 +- .../science/source/algorithm/sci_mapping_constants_mod.x90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/science/source/algorithm/sci_geometric_constants_mod.x90 b/components/science/source/algorithm/sci_geometric_constants_mod.x90 index 40cc433ba7..55cff373be 100644 --- a/components/science/source/algorithm/sci_geometric_constants_mod.x90 +++ b/components/science/source/algorithm/sci_geometric_constants_mod.x90 @@ -24,7 +24,7 @@ module sci_geometric_constants_mod use timing_mod, only: start_timing, stop_timing, & tik, LPROF - use sci_mesh_enums, only: get_mesh_enums, geometry_spherical + use sci_mesh_enums_mod, only: get_mesh_enums, geometry_spherical ! Object types use config_mod, only: config_type diff --git a/components/science/source/algorithm/sci_mapping_constants_mod.x90 b/components/science/source/algorithm/sci_mapping_constants_mod.x90 index 6d4fb064a5..2bccf4b4dd 100644 --- a/components/science/source/algorithm/sci_mapping_constants_mod.x90 +++ b/components/science/source/algorithm/sci_mapping_constants_mod.x90 @@ -40,7 +40,7 @@ module sci_mapping_constants_mod use timing_mod, only: start_timing, stop_timing, & tik, LPROF - use sci_mesh_enums, only: get_mesh_enums + use sci_mesh_enums_mod, only: get_mesh_enums ! Object types use config_mod, only: config_type From e95f82a918b02c063db6f0134c71ca3dbadac806 Mon Sep 17 00:00:00 2001 From: Ricky Wong <141156427+mo-rickywong@users.noreply.github.com> Date: Tue, 1 Sep 2026 20:37:25 +0100 Subject: [PATCH 3/6] typo --- components/science/source/algorithm/sci_fem_constants_mod.x90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/science/source/algorithm/sci_fem_constants_mod.x90 b/components/science/source/algorithm/sci_fem_constants_mod.x90 index 4b4c3806e1..cdc8a4bdd9 100644 --- a/components/science/source/algorithm/sci_fem_constants_mod.x90 +++ b/components/science/source/algorithm/sci_fem_constants_mod.x90 @@ -48,7 +48,8 @@ module sci_fem_constants_mod use dg_inc_matrix_vector_kernel_mod, only: dg_inc_matrix_vector_kernel_type use sci_multiplicity_kernel_mod, only: multiplicity_kernel_type - use sci_mesh_enums_mod, only: topology_fully_periodic + use sci_mesh_enums_mod, only: get_mesh_enums, & + topology_fully_periodic implicit none From ed80725207041f4d360014084ac079b8e2a67646 Mon Sep 17 00:00:00 2001 From: Ricky Wong <141156427+mo-rickywong@users.noreply.github.com> Date: Fri, 4 Sep 2026 18:02:00 +0100 Subject: [PATCH 4/6] Split subroutine into separate functions to get geometry, topology --- .../source/driver/io_demo_checkpoint_mod.f90 | 6 +- .../driver/source/driver_coordinates_mod.F90 | 23 +-- components/driver/source/driver_fem_mod.f90 | 6 +- components/driver/source/driver_mesh_mod.f90 | 4 +- .../assign_coordinate_xyz_mod_test.pf | 4 +- .../algorithm/sci_fem_constants_mod.x90 | 12 +- .../algorithm/sci_geometric_constants_mod.x90 | 13 +- .../algorithm/sci_mapping_constants_mod.x90 | 26 ++-- .../kernel/geometry/sci_chi_transform_mod.F90 | 12 +- .../geometry/sci_coordinate_jacobian_mod.F90 | 14 +- .../geometry/sci_native_jacobian_mod.F90 | 4 +- .../source/utilities/sci_mesh_enums_mod.f90 | 83 +++++------ .../fem/gp_vector_rhs_kernel_mod_test.pf | 6 +- .../kernel/geometry/chi_transform_mod_test.pf | 8 +- ...coordinate_jacobian_alphabetaz_mod_test.pf | 6 +- .../geometry/get_dz_w3_kernel_mod_test.pf | 4 +- .../native_jacobian_alphabetaz_mod_test.pf | 6 +- .../convert_phys_to_hdiv_kernel_mod_test.pf | 6 +- ...oject_ws_to_w1_operator_kernel_mod_test.pf | 6 +- .../sample_w3_to_wtheta_kernel_mod_test.pf | 4 +- .../sample_wtheta_to_w3_kernel_mod_test.pf | 4 +- .../w3_to_w2_displacement_kernel_mod_test.pf | 6 +- .../inject_sh_w3_to_wt_kernel_mod_test.pf | 4 +- .../inject_wt_to_sh_w3_kernel_mod_test.pf | 4 +- infrastructure/source/mesh/local_mesh_mod.f90 | 133 +++++++++++++----- infrastructure/source/mesh/mesh_mod.F90 | 59 +++++++- 26 files changed, 288 insertions(+), 175 deletions(-) diff --git a/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 b/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 index ba1e066c12..b293832a07 100644 --- a/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 +++ b/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 @@ -25,7 +25,7 @@ module io_demo_checkpoint_mod LOG_LEVEL_DEBUG, LOG_LEVEL_ERROR use mesh_mod, only: mesh_type - use sci_mesh_enums_mod, only: get_mesh_enums + use sci_mesh_enums_mod, only: get_mesh_geometry, get_mesh_topology implicit none @@ -69,8 +69,8 @@ subroutine setup_checkpoint_io(modeldb, chi, panel_id) mesh => chi(1)%get_mesh() - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = modeldb%config%finite_element%coord_system() scaled_radius = modeldb%config%planet%scaled_radius() diff --git a/components/driver/source/driver_coordinates_mod.F90 b/components/driver/source/driver_coordinates_mod.F90 index aaddb82e96..85cee9407b 100644 --- a/components/driver/source/driver_coordinates_mod.F90 +++ b/components/driver/source/driver_coordinates_mod.F90 @@ -18,10 +18,11 @@ module driver_coordinates_mod schmidt_transform_xyz, & inverse_schmidt_transform_xyz - use sci_mesh_enums_mod, only: get_mesh_enums, & - geometry_planar, & - geometry_spherical, & - topology_fully_periodic, & + use sci_mesh_enums_mod, only: get_mesh_geometry, & + get_mesh_topology, & + geometry_planar, & + geometry_spherical, & + topology_periodic, & topology_non_periodic ! Configuration modules @@ -110,8 +111,8 @@ subroutine assign_coordinate_field(config, mesh, chi, panel_id) nullify( map, map_pid, dof_coords, reference_element ) - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -170,7 +171,7 @@ subroutine assign_coordinate_field(config, mesh, chi, panel_id) ! Throw an error if stretching factor is not 1 and not on cubed-sphere if ( abs(stretch_factor - 1.0_r_def) > eps .and. .not. & (geometry == geometry_spherical .and. & - topology == topology_fully_periodic) ) then + topology == topology_periodic) ) then call log_event( & 'driver_coordinates: Cannot determine coordinates if Schmidt ' // & 'stretching factor is not 1 and mesh is not cubed-sphere', & @@ -220,7 +221,7 @@ subroutine assign_coordinate_field(config, mesh, chi, panel_id) end do else if ( geometry == geometry_spherical .and. & - topology /= topology_fully_periodic ) then + topology /= topology_periodic ) then do cell = 1,chi_proxy(1)%vspace%get_ncell() @@ -255,7 +256,7 @@ subroutine assign_coordinate_field(config, mesh, chi, panel_id) end do else if ( geometry == geometry_spherical .and. & - topology == topology_fully_periodic ) then + topology == topology_periodic ) then do cell = 1,chi_proxy(1)%vspace%get_ncell() @@ -344,7 +345,7 @@ subroutine calc_panel_id( nlayers, & integer(kind=i_def) :: vert, k if ( geometry == geometry_spherical .and. & - topology == topology_fully_periodic ) then + topology == topology_periodic ) then ! The following code assumes that the mesh generator has ordered the ! global cell ids panel-by-panel. If this is ever not the case, the @@ -443,7 +444,7 @@ subroutine assign_coordinate_xyz( nlayers, & end if ! Domain does not have N-S boundaries only if topology completely periodic if ( column_coords(2,SWB,k+1) > column_coords(2,NWB,k+1) .and. & - topology == topology_fully_periodic ) then + topology == topology_periodic ) then ! On y boundary vertex_local_coords(2,SWB) = domain_y vertex_local_coords(2,SEB) = domain_y diff --git a/components/driver/source/driver_fem_mod.f90 b/components/driver/source/driver_fem_mod.f90 index 8a3702a21f..a0559bf7a8 100644 --- a/components/driver/source/driver_fem_mod.f90 +++ b/components/driver/source/driver_fem_mod.f90 @@ -26,7 +26,8 @@ module driver_fem_mod use sci_chi_transform_mod, only: init_chi_transforms, & final_chi_transforms - use sci_mesh_enums_mod, only: get_mesh_enums, & + use sci_mesh_enums_mod, only: get_mesh_geometry, & + get_mesh_topology, & geometry_spherical, & geometry_planar, & topology_non_periodic @@ -121,7 +122,8 @@ subroutine init_fem(config, chi_inventory, panel_id_inventory) mesh => mesh_collection%get_mesh(all_mesh_names(i)) mesh_name = mesh%get_mesh_name() - call get_mesh_enums(mesh, geometry, topology) + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) ! Initialise coordinate transformations call init_chi_transforms( geometry, topology, & diff --git a/components/driver/source/driver_mesh_mod.f90 b/components/driver/source/driver_mesh_mod.f90 index 7aad45f51d..efedf272df 100644 --- a/components/driver/source/driver_mesh_mod.f90 +++ b/components/driver/source/driver_mesh_mod.f90 @@ -55,7 +55,7 @@ module driver_mesh_mod ! Configuration modules use finite_element_config_mod, only: cellshape_quadrilateral use sci_mesh_enums_mod, only: geometry_spherical, & - topology_fully_periodic + topology_periodic implicit none @@ -287,7 +287,7 @@ subroutine init_mesh( config, & generate_inner_halos = config%partitioning%generate_inner_halos() if ( geometry == geometry_spherical .and. & - topology == topology_fully_periodic ) then + topology == topology_periodic ) then mesh_selection = mesh_cubedsphere call log_event( "Setting up cubed-sphere partition mesh(es)", & log_level_debug ) diff --git a/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf b/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf index 1ed944e46b..4434c9128a 100644 --- a/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf +++ b/components/driver/unit-test/assign_coordinate_xyz_mod_test.pf @@ -9,7 +9,7 @@ module assign_coordinate_xyz_mod_test use constants_mod, only : r_def, i_def - use sci_mesh_enums_mod, only: geometry_planar, topology_fully_periodic + use mesh_mod, only: geometry_planar, topology_periodic use funit implicit none @@ -33,7 +33,7 @@ contains one = 1.0_r_def integer(i_def), parameter :: geometry = geometry_planar - integer(i_def), parameter :: topology = topology_fully_periodic + integer(i_def), parameter :: topology = topology_periodic real(r_def), parameter :: scaled_radius = 1.0_r_def integer(kind=i_def) :: nlayers, ndf, nverts, i, undf, ndf_pid, undf_pid diff --git a/components/science/source/algorithm/sci_fem_constants_mod.x90 b/components/science/source/algorithm/sci_fem_constants_mod.x90 index cdc8a4bdd9..0a30aaab23 100644 --- a/components/science/source/algorithm/sci_fem_constants_mod.x90 +++ b/components/science/source/algorithm/sci_fem_constants_mod.x90 @@ -48,8 +48,8 @@ module sci_fem_constants_mod use dg_inc_matrix_vector_kernel_mod, only: dg_inc_matrix_vector_kernel_type use sci_multiplicity_kernel_mod, only: multiplicity_kernel_type - use sci_mesh_enums_mod, only: get_mesh_enums, & - topology_fully_periodic + use sci_mesh_enums_mod, only: get_mesh_topology, & + topology_periodic implicit none @@ -235,7 +235,7 @@ contains integer(i_def) :: topology mesh => mesh_collection%get_mesh(mesh_id) - call get_mesh_enums(mesh, topology=topology) + topology = get_mesh_topology(mesh) ! If running at lowest order, use finite volume if (element_order_h == 0 .and. element_order_v == 0) then @@ -305,7 +305,7 @@ contains end select ! Lump W2 mass matrix along the edge of the domain to avoid boundary ! errors propagating into the domain with each iteration - if ( (space == W2 .or. space == W2h) .and. topology /= topology_fully_periodic ) then + if ( (space == W2 .or. space == W2h) .and. topology /= topology_periodic ) then call dummy_field%initialise( fs, halo_depth=2 ) call invoke( edge_lump_w2_mass_matrix_kernel_type(mm_op, & dummy_field, & @@ -356,7 +356,7 @@ contains integer(i_def) :: topology mesh => mesh_collection%get_mesh(mesh_id) - call get_mesh_enums(mesh, topology=topology) + topology = get_mesh_topology(mesh) ! Point to appropriate inventory for this space select case (space) @@ -419,7 +419,7 @@ contains end select ! Lump W2 mass matrix along the edge of the domain to avoid boundary ! errors propagating into the domain with each iteration - if ( (space == W2 .or. space == W2h) .and. topology /= topology_fully_periodic ) then + if ( (space == W2 .or. space == W2h) .and. topology /= topology_periodic ) then call dummy_field%initialise( fs, halo_depth=2 ) call invoke( edge_lump_w2_mass_matrix_kernel_type(mm_op, & dummy_field, & diff --git a/components/science/source/algorithm/sci_geometric_constants_mod.x90 b/components/science/source/algorithm/sci_geometric_constants_mod.x90 index 55cff373be..45502d665f 100644 --- a/components/science/source/algorithm/sci_geometric_constants_mod.x90 +++ b/components/science/source/algorithm/sci_geometric_constants_mod.x90 @@ -24,7 +24,9 @@ module sci_geometric_constants_mod use timing_mod, only: start_timing, stop_timing, & tik, LPROF - use sci_mesh_enums_mod, only: get_mesh_enums, geometry_spherical + use sci_mesh_enums_mod, only: get_mesh_topology, & + get_mesh_geometry, & + geometry_spherical ! Object types use config_mod, only: config_type @@ -188,7 +190,7 @@ contains element_order_h = config%finite_element%element_order_h() element_order_v = config%finite_element%element_order_v() - call get_mesh_enums(mesh, topology=topology) + topology = get_mesh_topology(mesh) f_lat = config%base_mesh%f_lat() f_lon = config%idealised%f_lon() @@ -987,7 +989,7 @@ contains call dA_msl_proj_inventory%initialise(name="dA_msl_proj") end if - call get_mesh_enums(mesh, geometry) + geometry = get_mesh_geometry(mesh) planet_radius = config%extrusion%planet_radius() domain_height = config%extrusion%domain_height() @@ -1328,8 +1330,7 @@ contains real(kind=r_def) :: scaled_radius - - call get_mesh_enums(mesh, geometry) + geometry = get_mesh_geometry(mesh) element_order_h = config%finite_element%element_order_h() element_order_v = config%finite_element%element_order_v() @@ -1455,7 +1456,7 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - call get_mesh_enums(mesh, geometry) + geometry = get_mesh_geometry(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/science/source/algorithm/sci_mapping_constants_mod.x90 b/components/science/source/algorithm/sci_mapping_constants_mod.x90 index 2bccf4b4dd..46195d0525 100644 --- a/components/science/source/algorithm/sci_mapping_constants_mod.x90 +++ b/components/science/source/algorithm/sci_mapping_constants_mod.x90 @@ -40,7 +40,7 @@ module sci_mapping_constants_mod use timing_mod, only: start_timing, stop_timing, & tik, LPROF - use sci_mesh_enums_mod, only: get_mesh_enums + use sci_mesh_enums_mod, only: get_mesh_geometry, get_mesh_topology ! Object types use config_mod, only: config_type @@ -225,8 +225,8 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -294,8 +294,8 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1084,8 +1084,8 @@ contains integer(kind=i_def), parameter :: xdirection = 1_i_def integer(tik) :: id - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1156,8 +1156,8 @@ contains integer(kind=i_def), parameter :: ydirection = 2_i_def integer(tik) :: id - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1229,8 +1229,8 @@ contains integer(kind=i_def), parameter :: zdirection = 3_i_def integer(tik) :: id - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1303,8 +1303,8 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - call get_mesh_enums(mesh, geometry, topology) - + geometry = get_mesh_geometry(mesh) + topology = get_mesh_topology(mesh) coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 b/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 index b504b94978..0b14d430f4 100644 --- a/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 +++ b/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 @@ -31,7 +31,7 @@ module sci_chi_transform_mod use matrix_invert_mod, only : matrix_invert_3x3 use sci_mesh_enums_mod, only : geometry_spherical, & geometry_planar, & - topology_fully_periodic + topology_periodic ! Configuration modules use finite_element_config_mod, only: coord_system_xyz, & @@ -180,7 +180,7 @@ subroutine init_chi_transforms( geometry, topology, & ) end if if ( abs(equatorial_latitude - rmdi) < EPS .or. & - geometry == geometry_planar .or. topology /= topology_fully_periodic ) then + geometry == geometry_planar .or. topology /= topology_periodic ) then equatorial_latitude = 0.0_r_def call log_event( & 'Equatorial latitude for mesh not set, so using 0.0 as default', & @@ -278,7 +278,7 @@ subroutine chi2xyz( chi_1, chi_2, chi_3, panel_id, & y = chi_2 z = chi_3 - else if (topology /= topology_fully_periodic) then + else if (topology /= topology_periodic) then ! domain is a spherical LAM, using (lon,lat,z) coordinates call llr2xyz(chi_1, chi_2, chi_3+scaled_radius, x, y, z) @@ -369,7 +369,7 @@ subroutine chir2xyz( chi_1, chi_2, chi_3, panel_id, & y = chi_2 z = chi_3 - else if (topology /= topology_fully_periodic) then + else if (topology /= topology_periodic) then ! domain is a spherical LAM, using (lon,lat,z) coordinates call llr2xyz(chi_1, chi_2, chi_3, x, y, z) @@ -457,7 +457,7 @@ subroutine chi2llr( chi_1, chi_2, chi_3, panel_id, & ! chi uses (geocentric) Cartesian coordinates call xyz2llr(chi_1, chi_2, chi_3, lon, lat, radius) - else if (topology /= topology_fully_periodic) then + else if (topology /= topology_periodic) then ! domain is a spherical LAM, already using (lon,lat,z) coordinates ! may need to rotate these to the physical (lon,lat) coordinates @@ -536,7 +536,7 @@ subroutine chi2abr( chi_1, chi_2, chi_3, panel_id, & real(kind=r_def) :: xyz(3) - if (topology /= topology_fully_periodic .or. geometry /= geometry_spherical) then + if (topology /= topology_periodic .or. geometry /= geometry_spherical) then call log_event( & 'chi2abr can only be used on cubed-sphere meshes', LOG_LEVEL_ERROR & ) diff --git a/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 b/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 index 82e7bb6951..9b073a4738 100644 --- a/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 +++ b/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 @@ -25,7 +25,7 @@ module sci_coordinate_jacobian_mod get_to_rotate, & get_stretch_factor use sci_mesh_enums_mod, only: geometry_planar, & - topology_fully_periodic + topology_periodic ! Configuration modules use finite_element_config_mod, only: coord_system_xyz, & @@ -209,7 +209,7 @@ subroutine coordinate_jacobian_quadrature_real32( & ! Using (X,Y,Z) coordinates or on a plane jac = jac_ref2sph - else if (topology == topology_fully_periodic) then + else if (topology == topology_periodic) then ! Native coordinates for a cubed-sphere mesh to_rotate = get_to_rotate() to_stretch = get_to_stretch() @@ -372,7 +372,7 @@ subroutine coordinate_jacobian_quadrature_real64( & ! Using (X,Y,Z) coordinates or on a plane jac = jac_ref2sph - else if (topology == topology_fully_periodic) then + else if (topology == topology_periodic) then ! Native coordinates for a cubed-sphere mesh to_rotate = get_to_rotate() to_stretch = get_to_stretch() @@ -549,7 +549,7 @@ subroutine coordinate_jacobian_evaluator_real32( & ! Using (X,Y,Z) coordinates or on a plane jac = jac_ref2sph - else if (topology == topology_fully_periodic) then + else if (topology == topology_periodic) then ! Native coordinates for a cubed-sphere mesh to_rotate = get_to_rotate() to_stretch = get_to_stretch() @@ -690,7 +690,7 @@ subroutine coordinate_jacobian_evaluator_real64( & ! Using (X,Y,Z) coordinates or on a plane jac = jac_ref2sph - else if (topology == topology_fully_periodic) then + else if (topology == topology_periodic) then ! Native coordinates for a cubed-sphere mesh to_rotate = get_to_rotate() to_stretch = get_to_stretch() @@ -981,7 +981,7 @@ subroutine pointwise_coordinate_jacobian_real32( & ! Using (X,Y,Z) coordinates or on a plane jac = jac_ref2sph - else if (topology == topology_fully_periodic) then + else if (topology == topology_periodic) then ! Native coordinates for a cubed-sphere mesh alpha = 0.0_real32 beta = 0.0_real32 @@ -1100,7 +1100,7 @@ subroutine pointwise_coordinate_jacobian_real64( & ! Using (X,Y,Z) coordinates or on a plane jac = jac_ref2sph - else if (topology == topology_fully_periodic) then + else if (topology == topology_periodic) then ! Native coordinates for a cubed-sphere mesh alpha = 0.0_real64 beta = 0.0_real64 diff --git a/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 b/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 index 2ac304d545..1895506c3d 100644 --- a/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 +++ b/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 @@ -30,7 +30,7 @@ module sci_native_jacobian_mod use finite_element_config_mod, only: coord_system_xyz, & coord_system_native use sci_mesh_enums_mod, only: geometry_planar, & - topology_fully_periodic + topology_periodic implicit none @@ -131,7 +131,7 @@ subroutine native_jacobian(coord_system, geometry, topology, scaled_radius, & ! Using (X,Y,Z) coordinates or on a plane jac = jac_ref2sph - else if (topology == topology_fully_periodic) then + else if (topology == topology_periodic) then radius = real(scaled_radius, kind=r_def) jac_sph2XYZ = jacobian_abr2XYZ(nlayers, chi_1_df, chi_2_df, chi_3_df+radius, panel_id) diff --git a/components/science/source/utilities/sci_mesh_enums_mod.f90 b/components/science/source/utilities/sci_mesh_enums_mod.f90 index 7e7749702a..6691fe0d20 100644 --- a/components/science/source/utilities/sci_mesh_enums_mod.f90 +++ b/components/science/source/utilities/sci_mesh_enums_mod.f90 @@ -7,79 +7,80 @@ !> @brief Module to access mesh enumerations. module sci_mesh_enums_mod - use constants_mod, only: i_def, imdi + use constants_mod, only: i_def use log_mod, only: log_event, log_level_error use mesh_mod, only: mesh_type - use base_mesh_config_mod, only: & - sci_geometry_spherical => geometry_spherical, & - sci_geometry_planar => geometry_planar, & - sci_topology_fully_periodic => topology_fully_periodic, & - sci_topology_non_periodic => topology_non_periodic + use base_mesh_config_mod, only: & + config_geometry_spherical => geometry_spherical, & + config_geometry_planar => geometry_planar, & + config_topology_periodic => topology_fully_periodic, & + config_topology_non_periodic => topology_non_periodic implicit none private public :: geometry_spherical, geometry_planar - public :: topology_fully_periodic, topology_non_periodic + public :: topology_periodic, topology_non_periodic - public :: get_mesh_enums + public :: get_mesh_geometry, get_mesh_topology ! These will get switched to something hardcoded for the science components ! at a later date to break dependence on base_mesh_config_mod - integer(i_def), parameter :: geometry_spherical = sci_geometry_spherical ! 157 - integer(i_def), parameter :: geometry_planar = sci_geometry_planar ! 358 - integer(i_def), parameter :: topology_fully_periodic = sci_topology_fully_periodic ! 492 - integer(i_def), parameter :: topology_non_periodic = sci_topology_non_periodic ! 157 + integer(i_def), parameter :: geometry_spherical = config_geometry_spherical ! 157 + integer(i_def), parameter :: geometry_planar = config_geometry_planar ! 358 + integer(i_def), parameter :: topology_periodic = config_topology_periodic ! 492 + integer(i_def), parameter :: topology_non_periodic = config_topology_non_periodic ! 157 contains !--------------------------------------------------------------------------- -!> @brief Returns mesh enumerations in line with science component values -!> @param[in] mesh Mesh object to query -!> @param[out] geometry [optional] Science component geometry enumeration -!> @param[out] topology [optional] Science component topology enumeration +!> @brief Returns mesh geometry enumeration +!> @param[in] mesh Mesh object to query +!> @return geometry Geometry enumeration !> -subroutine get_mesh_enums(mesh, geometry, topology) +function get_mesh_geometry(mesh) result(geometry) implicit none type(mesh_type), intent(in) :: mesh - integer(i_def), optional, intent(out) :: geometry - integer(i_def), optional, intent(out) :: topology + integer(i_def) :: geometry - if (present(geometry)) then - geometry = imdi + if (mesh%is_geometry_spherical()) then + geometry = geometry_spherical + else if (mesh%is_geometry_planar()) then + geometry = geometry_planar + else + call log_event('Unsupported mesh geometry', log_level_error) + end if - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical + end function get_mesh_geometry - else if (mesh%is_geometry_planar()) then - geometry = geometry_planar - else - call log_event('Unsupported mesh geometry', log_level_error) - end if - end if - - if (present(topology)) then - topology = imdi +!--------------------------------------------------------------------------- +!> @brief Returns mesh topology enumeration +!> @param[in] mesh Mesh object to query +!> @return topology Topology enumeration +!> +function get_mesh_topology(mesh) result(topology) - if (mesh%is_topology_periodic()) then - topology = topology_fully_periodic + implicit none - else if (mesh%is_topology_non_periodic()) then - topology = topology_non_periodic + type(mesh_type), intent(in) :: mesh - else - call log_event('Unsupported mesh topology', log_level_error) + integer(i_def) :: topology - end if - end if + if (mesh%is_topology_periodic()) then + topology = topology_periodic + else if (mesh%is_topology_non_periodic()) then + topology = topology_non_periodic + else + call log_event('Unsupported mesh topology', log_level_error) + end if -end subroutine get_mesh_enums + end function get_mesh_topology end module sci_mesh_enums_mod diff --git a/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf b/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf index 19f531cbc7..f2d2c25b55 100644 --- a/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf @@ -39,7 +39,7 @@ contains subroutine setUp( this ) use sci_mesh_enums_mod, only : geometry_planar, & - topology_fully_periodic + topology_periodic use sci_chi_transform_mod, only : init_chi_transforms use finite_element_config_mod, only : cellshape_quadrilateral, & @@ -61,7 +61,7 @@ contains prime_mesh_name='unit_test', & geometry=geometry_planar, & prepartitioned=.false., & - topology=topology_fully_periodic, & + topology=topology_periodic, & fplane=.false., f_lat_deg=0.0_r_def ) call feign_finite_element_config( & @@ -74,7 +74,7 @@ contains element_order_v=0_i_def, & rehabilitate=.true. ) - call init_chi_transforms(geometry_planar, topology_fully_periodic) + call init_chi_transforms(geometry_planar, topology_periodic) qr = quadrature_xyoz_type(3, quadrature_rule) diff --git a/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf b/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf index 2a74cdb50c..526ad5bcbd 100644 --- a/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf @@ -10,8 +10,8 @@ module chi_transform_mod_test use constants_mod, only : i_def, r_def, str_long, PI, rmdi - use sci_mesh_enums_mod, only: geometry_spherical, & - topology_fully_periodic, & + use sci_mesh_enums_mod, only: geometry_spherical, & + topology_periodic, & topology_non_periodic use finite_element_config_mod, only: coord_system_native, & @@ -244,7 +244,7 @@ contains select case ( this%source_coord_system ) case ( XYZ ) this%src_coord_system = coord_system_xyz - this%topology = topology_fully_periodic + this%topology = topology_periodic case ( LLH, LLH_rot ) this%src_coord_system = coord_system_native @@ -252,7 +252,7 @@ contains case ( ABH, ABH_stretch_rot ) this%src_coord_system = coord_system_native - this%topology = topology_fully_periodic + this%topology = topology_periodic end select this%geometry = geometry_spherical diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf index 527779883f..8a91c58130 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf @@ -11,7 +11,7 @@ module coordinate_jacobian_alphabetaz_mod_test use constants_mod, only: r_def, i_def use sci_mesh_enums_mod, only: geometry_spherical, & - topology_fully_periodic + topology_periodic use finite_element_config_mod, only: coord_system_native implicit none @@ -30,7 +30,7 @@ contains implicit none - call init_chi_transforms(geometry_spherical, topology_fully_periodic) + call init_chi_transforms(geometry_spherical, topology_periodic) end subroutine set_up @@ -78,7 +78,7 @@ contains integer(i_def), parameter :: coord_system = coord_system_native integer(i_def), parameter :: geometry = geometry_spherical - integer(i_def), parameter :: topology = topology_fully_periodic + integer(i_def), parameter :: topology = topology_periodic real(r_def), parameter :: scaled_radius = 1000.0_r_def ! We choose a box centred on alpha = 0, beta = 0 diff --git a/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf index 8fdd5d1dd6..8316a06e18 100644 --- a/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf @@ -36,7 +36,7 @@ contains subroutine setUp( this ) use sci_mesh_enums_mod, only : geometry_planar, & - topology_fully_periodic + topology_periodic use finite_element_config_mod, only : cellshape_quadrilateral, & coord_system_xyz, coord_space_wchi use feign_config_mod, only : feign_finite_element_config, & @@ -50,7 +50,7 @@ contains prime_mesh_name='unit_test', & geometry=geometry_planar, & prepartitioned=.false., & - topology=topology_fully_periodic, & + topology=topology_periodic, & fplane=.false., f_lat_deg=45.0_r_def ) call feign_finite_element_config( & diff --git a/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf b/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf index 1884c58b01..79647fde8c 100644 --- a/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf @@ -10,7 +10,7 @@ module native_jacobian_alphabetaz_mod_test use funit use constants_mod, only: r_def, i_def use sci_mesh_enums_mod, only: geometry_spherical, & - topology_fully_periodic + topology_periodic use finite_element_config_mod, only: coord_system_native implicit none @@ -29,7 +29,7 @@ contains implicit none - call init_chi_transforms(geometry_spherical, topology_fully_periodic) + call init_chi_transforms(geometry_spherical, topology_periodic) end subroutine set_up @@ -73,7 +73,7 @@ contains integer(i_def), parameter :: coord_system = coord_system_native integer(i_def), parameter :: geometry = geometry_spherical - integer(i_def), parameter :: topology = topology_fully_periodic + integer(i_def), parameter :: topology = topology_periodic real(r_def), parameter :: scaled_radius = 1000.0_r_def ! We choose a box centred on alpha = 0, beta = 0 diff --git a/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf index bd9c5bbd59..357283fb1c 100644 --- a/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf @@ -10,7 +10,7 @@ module convert_phys_to_hdiv_kernel_mod_test use constants_mod, only: i_def, r_def, rmdi use sci_mesh_enums_mod, only: geometry_planar, & - topology_fully_periodic + topology_periodic use finite_element_config_mod, only: coord_system_xyz use funit @@ -30,7 +30,7 @@ contains implicit none - call init_chi_transforms(geometry_planar, topology_fully_periodic) + call init_chi_transforms(geometry_planar, topology_periodic) end subroutine set_up @@ -77,7 +77,7 @@ contains real(r_def), parameter :: u_radial = 0.4_r_def integer(i_def), parameter :: geometry = geometry_planar - integer(i_def), parameter :: topology = topology_fully_periodic + integer(i_def), parameter :: topology = topology_periodic integer(i_def), parameter :: coord_system = coord_system_xyz real(r_def), parameter :: scaled_radius = rmdi diff --git a/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf index ea4cef727c..ffea70927b 100644 --- a/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf @@ -24,7 +24,7 @@ module project_ws_to_w1_operator_kernel_mod_test use get_unit_test_3x3x3_chi_mod, only : get_w0_3x3x3_field use sci_mesh_enums_mod, only: geometry_planar, & - topology_fully_periodic + topology_periodic use finite_element_config_mod, only: coord_system_xyz implicit none @@ -42,7 +42,7 @@ contains implicit none - call init_chi_transforms(geometry_planar,topology_fully_periodic) + call init_chi_transforms(geometry_planar,topology_periodic) end subroutine set_up @@ -69,7 +69,7 @@ contains real(kind=r_def), parameter :: tol = 1.0e-6_r_def integer(i_def), parameter :: geometry = geometry_planar - integer(i_def), parameter :: topology = topology_fully_periodic + integer(i_def), parameter :: topology = topology_periodic integer(i_def), parameter :: coord_system = coord_system_xyz real(r_def), parameter :: scaled_radius = rmdi diff --git a/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf index 72158713fc..3f5f3c10c7 100644 --- a/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf @@ -35,7 +35,7 @@ contains subroutine setUp( this ) use sci_mesh_enums_mod, only : geometry_planar, & - topology_fully_periodic + topology_periodic use feign_config_mod, only : feign_base_mesh_config implicit none @@ -46,7 +46,7 @@ contains prime_mesh_name='unit_test', & geometry=geometry_planar, & prepartitioned=.false., & - topology=topology_fully_periodic, & + topology=topology_periodic, & fplane=.false., f_lat_deg=0.0_r_def ) end subroutine setUp diff --git a/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf index bc69789cb9..520ef6b51d 100644 --- a/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf @@ -33,7 +33,7 @@ contains subroutine setUp( this ) use sci_mesh_enums_mod, only : geometry_planar, & - topology_fully_periodic + topology_periodic use feign_config_mod, only : feign_base_mesh_config implicit none @@ -44,7 +44,7 @@ contains prime_mesh_name='unit_test', & geometry=geometry_planar, & prepartitioned=.false., & - topology=topology_fully_periodic, & + topology=topology_periodic, & fplane=.false., f_lat_deg=0.0_r_def ) end subroutine setUp diff --git a/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf index ac8991d271..ba593bc31b 100644 --- a/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf @@ -11,7 +11,7 @@ module w3_to_w2_displacement_kernel_mod_test use reference_element_mod, only: S, E, N, W use sci_mesh_enums_mod, only: geometry_spherical, & - topology_fully_periodic + topology_periodic use finite_element_config_mod, only: coord_system_native use funit @@ -32,7 +32,7 @@ contains implicit none - call init_chi_transforms(geometry_spherical, topology_fully_periodic) + call init_chi_transforms(geometry_spherical, topology_periodic) end subroutine set_up @@ -66,7 +66,7 @@ contains real(r_def), parameter :: dz = 2.0_r_def integer(i_def), parameter :: geometry = geometry_spherical - integer(i_def), parameter :: topology = topology_fully_periodic + integer(i_def), parameter :: topology = topology_periodic integer(i_def), parameter :: coord_system = coord_system_native real(r_def), parameter :: scaled_radius = 1900000.0_r_def diff --git a/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf index 41563d7937..ad1ead4280 100644 --- a/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf @@ -33,7 +33,7 @@ contains subroutine setUp( this ) use sci_mesh_enums_mod, only : geometry_planar, & - topology_fully_periodic + topology_periodic use feign_config_mod, only : feign_base_mesh_config implicit none @@ -44,7 +44,7 @@ contains prime_mesh_name='unit_test', & geometry=geometry_planar, & prepartitioned=.false., & - topology=topology_fully_periodic, & + topology=topology_periodic, & fplane=.false., f_lat_deg=0.0_r_def ) end subroutine setUp diff --git a/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf index 54dbcd28c4..c9c6a4e72d 100644 --- a/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf @@ -33,7 +33,7 @@ contains subroutine setUp( this ) use sci_mesh_enums_mod, only : geometry_planar, & - topology_fully_periodic + topology_periodic use feign_config_mod, only : feign_base_mesh_config implicit none @@ -44,7 +44,7 @@ contains prime_mesh_name='unit_test', & geometry=geometry_planar, & prepartitioned=.false., & - topology=topology_fully_periodic, & + topology=topology_periodic, & fplane=.false., f_lat_deg=0.0_r_def ) end subroutine setUp diff --git a/infrastructure/source/mesh/local_mesh_mod.f90 b/infrastructure/source/mesh/local_mesh_mod.f90 index 481d8ef3f5..079b17391d 100644 --- a/infrastructure/source/mesh/local_mesh_mod.f90 +++ b/infrastructure/source/mesh/local_mesh_mod.f90 @@ -30,19 +30,45 @@ module local_mesh_mod LOG_LEVEL_INFO, LOG_LEVEL_DEBUG use partition_mod, only: partition_type +!!$ use base_mesh_config_mod, only: & +!!$ config_geometry_spherical => geometry_spherical, & +!!$ config_geometry_planar => geometry_planar, & +!!$ config_topology_periodic => topology_fully_periodic, & +!!$ config_topology_non_periodic => topology_non_periodic +!!$ +!!$ implicit none +!!$ +!!$ private +!!$ +!!$ integer(i_def), parameter, public :: geometry_spherical = config_geometry_spherical ! 101 +!!$ integer(i_def), parameter, public :: geometry_planar = config_geometry_planar ! 202 +!!$ +!!$ integer(i_def), parameter, public :: topology_non_periodic = config_topology_non_periodic ! 301 +!!$ integer(i_def), parameter, public :: topology_periodic = config_topology_periodic ! 503 +!!$ integer(i_def), parameter, public :: topology_channel = 402 +!!$ +!!$ integer(i_def), parameter, public :: coord_sys_ll = 601 +!!$ integer(i_def), parameter, public :: coord_sys_xyz = 702 + + implicit none private - integer(i_def), parameter :: spherical_domain = 601 - integer(i_def), parameter :: planar_domain = 602 + integer(i_def), parameter, public :: geometry_spherical = 101 + integer(i_def), parameter, public :: geometry_planar = 202 + + integer(i_def), parameter, public :: topology_non_periodic = 301 + integer(i_def), parameter, public :: topology_periodic = 503 + integer(i_def), parameter, public :: topology_channel = 402 + + integer(i_def), parameter, public :: coord_sys_ll = 601 + integer(i_def), parameter, public :: coord_sys_xyz = 702 + + + - integer(i_def), parameter :: non_periodic_domain = 701 - integer(i_def), parameter :: channel_domain = 702 - integer(i_def), parameter :: periodic_domain = 703 - integer(i_def), parameter :: lon_lat_coords = 801 - integer(i_def), parameter :: xyz_coords = 802 type, extends(linked_list_data_type), public :: local_mesh_type @@ -53,11 +79,11 @@ module local_mesh_mod ! Tag name of mesh. character(str_def) :: mesh_name ! Domain surface geometry. - integer(i_def) :: geometry = emdi + integer(i_def) :: mesh_geometry = emdi ! Domain boundaries topology. - integer(i_def) :: topology = emdi + integer(i_def) :: mesh_topology = emdi ! Co-ordinate system used to specify node locations. - integer(i_def) :: coord_sys = emdi + integer(i_def) :: mesh_coord_sys = emdi ! Co-ordinate units along xy-axes. character(str_def) :: coord_units_xy(2) = cmdi ! Marker id for cells that do not exist for mesh. @@ -226,7 +252,8 @@ module local_mesh_mod procedure, public :: get_north_pole procedure, public :: get_null_island procedure, public :: get_equatorial_latitude - + procedure, public :: geometry + procedure, public :: topology procedure, public :: get_global_domain_extents procedure, public :: is_geometry_spherical @@ -299,23 +326,23 @@ subroutine initialise_full ( self, & ! Inherit mesh properties from the parent global mesh. if (global_mesh%is_geometry_spherical()) then - self%geometry = spherical_domain + self%mesh_geometry = geometry_spherical else if (global_mesh%is_geometry_planar()) then - self%geometry = planar_domain + self%mesh_geometry = geometry_planar end if if (global_mesh%is_topology_non_periodic()) then - self%topology = non_periodic_domain + self%mesh_topology = topology_non_periodic else if (global_mesh%is_topology_channel()) then - self%topology = channel_domain + self%mesh_topology = topology_channel else if (global_mesh%is_topology_periodic()) then - self%topology = periodic_domain + self%mesh_topology = topology_periodic end if if (global_mesh%is_coord_sys_xyz()) then - self%coord_sys = xyz_coords + self%mesh_coord_sys = coord_sys_xyz else if (global_mesh%is_coord_sys_ll()) then - self%coord_sys = lon_lat_coords + self%mesh_coord_sys = coord_sys_ll end if self%domain_extents = global_mesh%get_domain_extents() @@ -705,9 +732,9 @@ subroutine initialise_lbc ( self, & self%nverts_per_cell = local_lam_mesh%get_nverts_per_cell() self%nverts_per_edge = local_lam_mesh%get_nverts_per_edge() - self%geometry = local_lam_mesh%geometry - self%coord_sys = local_lam_mesh%coord_sys - self%topology = non_periodic_domain + self%mesh_geometry = local_lam_mesh%geometry() + self%mesh_coord_sys = local_lam_mesh%mesh_coord_sys + self%mesh_topology = topology_non_periodic self%npanels = 1_i_def self%max_stencil_depth = 0_i_def @@ -1195,14 +1222,14 @@ subroutine initialise_from_ugrid_data(self, ugrid_mesh_data) select case (trim(geometry_str)) case ('spherical') - self%geometry = spherical_domain + self%mesh_geometry = geometry_spherical case ('planar') - self%geometry = planar_domain + self%mesh_geometry = geometry_planar end select select case (trim(coord_sys_str)) case ('ll') - self%coord_sys=lon_lat_coords + self%mesh_coord_sys = coord_sys_ll ! Ensure units are in radians if ( (trim(self%coord_units_xy(1)) == 'degrees_east') .and. & @@ -1219,16 +1246,16 @@ subroutine initialise_from_ugrid_data(self, ugrid_mesh_data) end if case ('xyz') - self%coord_sys = xyz_coords + self%mesh_coord_sys = coord_sys_xyz end select select case (trim(topology_str)) case ('channel') - self%topology = channel_domain + self%mesh_topology = topology_channel case ('non_periodic') - self%topology = non_periodic_domain + self%mesh_topology = topology_non_periodic case ('periodic') - self%topology = periodic_domain + self%mesh_topology = topology_periodic end select @@ -1295,9 +1322,9 @@ subroutine initialise_unit_test ( self ) self%mesh_name = 'unit_test' - self%geometry = planar_domain - self%topology = periodic_domain - self%coord_sys = xyz_coords + self%mesh_geometry = geometry_planar + self%mesh_topology = topology_periodic + self%mesh_coord_sys = coord_sys_xyz self%void_cell = -9999_i_def local_mesh_id_counter = local_mesh_id_counter + 1 @@ -1632,7 +1659,7 @@ function is_geometry_spherical( self ) result ( answer ) logical (l_def) :: answer - answer = ( self%geometry == spherical_domain ) + answer = ( self%mesh_geometry == geometry_spherical ) end function is_geometry_spherical @@ -1650,7 +1677,7 @@ function is_geometry_planar( self ) result ( answer ) logical (l_def) :: answer - answer = ( self%geometry == planar_domain ) + answer = ( self%mesh_geometry == geometry_planar ) end function is_geometry_planar @@ -1669,7 +1696,7 @@ function is_topology_non_periodic( self ) result ( answer ) logical (l_def) :: answer - answer = ( self%topology == non_periodic_domain ) + answer = ( self%mesh_topology == topology_non_periodic ) end function is_topology_non_periodic @@ -1688,7 +1715,7 @@ function is_topology_channel( self ) result ( answer ) logical (l_def) :: answer - answer = ( self%topology == channel_domain ) + answer = ( self%mesh_topology == topology_channel ) end function is_topology_channel @@ -1707,7 +1734,7 @@ function is_topology_periodic( self ) result ( answer ) logical (l_def) :: answer - answer = ( self%topology == periodic_domain ) + answer = ( self%mesh_topology == topology_periodic ) end function is_topology_periodic @@ -1726,7 +1753,7 @@ function is_coord_sys_xyz( self ) result ( answer ) logical (l_def) :: answer - answer = ( self%coord_sys == xyz_coords ) + answer = ( self%mesh_coord_sys == coord_sys_xyz ) end function is_coord_sys_xyz @@ -1745,7 +1772,7 @@ function is_coord_sys_ll( self ) result ( answer ) logical (l_def) :: answer - answer = ( self%coord_sys == lon_lat_coords ) + answer = ( self%mesh_coord_sys == coord_sys_ll ) end function is_coord_sys_ll @@ -2505,7 +2532,37 @@ function get_mesh_maps( self ) result( local_mesh_maps ) end function get_mesh_maps + !============================================================================== + !> @brief Returns mesh geometry enumeration + !> @return geometry_enumeration Integer enumeration identifying the mesh + !> surface geometry type + !> + function geometry( self ) result( geometry_enumeration ) + + implicit none + + class(local_mesh_type), intent(in) :: self + integer(i_def) :: geometry_enumeration + + geometry_enumeration = self%mesh_geometry + + end function geometry + + !============================================================================== + !> @brief Returns mesh topology enumeration + !> @return topology_enumeration Integer enumeration identifying the mesh + !> domain boundary connectivity type + !> + function topology( self ) result( topology_enumeration ) + + implicit none + + class(local_mesh_type), intent(in) :: self + integer(i_def) :: topology_enumeration + + topology_enumeration = self%mesh_topology + end function topology !============================================================================== !> @brief Populates a object with this local mesh object's diff --git a/infrastructure/source/mesh/mesh_mod.F90 b/infrastructure/source/mesh/mesh_mod.F90 index 58aecbdf81..b08b1f0956 100644 --- a/infrastructure/source/mesh/mesh_mod.F90 +++ b/infrastructure/source/mesh/mesh_mod.F90 @@ -23,7 +23,14 @@ module mesh_mod linked_list_item_type use linked_list_data_mod, only : linked_list_data_type use local_mesh_map_mod, only : local_mesh_map_type - use local_mesh_mod, only : local_mesh_type + use local_mesh_mod, only : local_mesh_type, & + geometry_spherical, & + geometry_planar, & + topology_non_periodic, & + topology_channel, & + topology_periodic, & + coord_sys_ll, & + coord_sys_xyz use log_mod, only : log_event, log_scratch_space, & LOG_LEVEL_ERROR, LOG_LEVEL_TRACE, & LOG_LEVEL_INFO, LOG_LEVEL_DEBUG @@ -44,6 +51,10 @@ module mesh_mod private + public :: geometry_spherical, geometry_planar + public :: topology_non_periodic, topology_channel, topology_periodic + public :: coord_sys_ll, coord_sys_xyz + !============================================================================ ! Declare type definitions in this module !============================================================================ @@ -174,9 +185,9 @@ module mesh_mod integer(i_def), allocatable, private :: cells_in_colour(:,:) !> integer 2-d array, how many of the first so many cells belong to each colour integer(i_def), allocatable, private :: ncells_per_colour_subset(:,:) - integer(i_def),allocatable :: last_inner_cell_per_colour(:,:) - integer(i_def),allocatable :: last_halo_cell_per_colour(:,:) - integer(i_def),allocatable :: last_edge_cell_per_colour(:) + integer(i_def), allocatable :: last_inner_cell_per_colour(:,:) + integer(i_def), allocatable :: last_halo_cell_per_colour(:,:) + integer(i_def), allocatable :: last_edge_cell_per_colour(:) !========================================================================== ! Maps that this mesh connects to ! @@ -233,6 +244,9 @@ module mesh_mod procedure, public :: get_domain procedure, public :: get_domain_top procedure, public :: get_extrusion_id + procedure, public :: geometry + procedure, public :: topology + procedure, public :: get_dz procedure, public :: get_eta procedure, public :: get_vertex_cell_owner @@ -1215,6 +1229,43 @@ function get_extrusion_id(self) result (extrusion_id) end function get_extrusion_id + + + + !============================================================================== + !> @brief Returns mesh geometry enumeration + !> @return geometry_enumeration Integer enumeration identifying the mesh + !> surface geometry type + !> + function geometry( self ) result( geometry_enumeration ) + + implicit none + + class(mesh_type), intent(in) :: self + integer(i_def) :: geometry_enumeration + + geometry_enumeration = self%local_mesh%geometry() + + end function geometry + + + !============================================================================== + !> @brief Returns mesh topology enumeration + !> @return topology_enumeration Integer enumeration identifying the mesh + !> domain boundary connectivity type + !> + function topology( self ) result( topology_enumeration ) + + implicit none + + class(mesh_type), intent(in) :: self + integer(i_def) :: topology_enumeration + + topology_enumeration = self%local_mesh%topology() + + end function topology + + !> @details This functions returns an array of 3d-layer thicknesses in !> metres !> @param[out] dz Vertical thickness of layers in [m], array of From 42daa40b00e0b7511d71ed5c5190295e672d70c3 Mon Sep 17 00:00:00 2001 From: Ricky Wong <141156427+mo-rickywong@users.noreply.github.com> Date: Mon, 7 Sep 2026 13:26:27 +0100 Subject: [PATCH 5/6] Remove sci_mesh_enums and move functions to mesh object --- .../source/driver/io_demo_checkpoint_mod.f90 | 6 +- .../source/kernel/set_lbc_int_kernel_mod.F90 | 2 +- .../source/kernel/set_lbc_real_kernel_mod.F90 | 2 +- .../driver/source/driver_coordinates_mod.F90 | 14 ++- components/driver/source/driver_fem_mod.f90 | 13 ++- components/driver/source/driver_mesh_mod.f90 | 4 +- .../algorithm/sci_fem_constants_mod.x90 | 9 +- .../algorithm/sci_geometric_constants_mod.x90 | 13 ++- .../algorithm/sci_mapping_constants_mod.x90 | 26 +++--- .../kernel/geometry/sci_chi_transform_mod.F90 | 2 +- .../geometry/sci_coordinate_jacobian_mod.F90 | 5 +- .../sci_height_continuous_kernel_mod.F90 | 2 +- .../sci_height_discontinuous_kernel_mod.F90 | 2 +- .../geometry/sci_native_jacobian_mod.F90 | 4 +- ...sci_compute_map_u_operators_kernel_mod.F90 | 3 +- .../sci_compute_sample_u_ops_kernel_mod.F90 | 3 +- .../sci_convert_phys_to_hdiv_kernel_mod.F90 | 3 +- ...i_project_ws_to_w1_operator_kernel_mod.F90 | 3 +- .../source/utilities/sci_mesh_enums_mod.f90 | 86 ------------------- .../fem/gp_vector_rhs_kernel_mod_test.pf | 5 +- .../kernel/geometry/chi_transform_mod_test.pf | 6 +- ...coordinate_jacobian_alphabetaz_mod_test.pf | 3 +- .../coordinate_jacobian_lonlatz_mod_test.pf | 5 +- .../coordinate_jacobian_stretched_mod_test.pf | 2 +- .../coordinate_jacobian_xyz_mod_test.pf | 4 +- .../geometry/get_dz_w3_kernel_mod_test.pf | 2 +- .../height_continuous_kernel_mod_test.pf | 2 +- .../height_discontinuous_kernel_mod_test.pf | 14 +-- .../native_jacobian_alphabetaz_mod_test.pf | 2 +- .../native_jacobian_lonlatz_mod_test.pf | 2 +- .../native_jacobian_stretched_mod_test.pf | 2 +- ...compute_map_u_operators_kernel_mod_test.pf | 2 +- .../compute_sample_u_ops_kernel_mod_test.pf | 2 +- .../convert_phys_to_hdiv_kernel_mod_test.pf | 2 +- ...oject_ws_to_w1_operator_kernel_mod_test.pf | 4 +- .../sample_w3_to_wtheta_kernel_mod_test.pf | 2 +- .../sample_wtheta_to_w3_kernel_mod_test.pf | 2 +- .../w3_to_w2_displacement_kernel_mod_test.pf | 2 +- .../inject_sh_w3_to_wt_kernel_mod_test.pf | 2 +- .../inject_wt_to_sh_w3_kernel_mod_test.pf | 2 +- infrastructure/Makefile | 1 + .../uml/mesh/local_mesh_mod.iuml | 10 ++- .../documentation/uml/mesh/mesh_mod.iuml | 4 + ...{local_mesh_mod.f90 => local_mesh_mod.F90} | 84 ++++++++++-------- infrastructure/source/mesh/mesh_mod.F90 | 20 ++++- .../source/mesh/panel_decomposition_mod.f90 | 14 +-- infrastructure/source/mesh/partition_mod.F90 | 3 +- mesh_tools/Makefile | 2 + .../check_global_variables/file/dirtylist.txt | 2 +- 49 files changed, 165 insertions(+), 246 deletions(-) delete mode 100644 components/science/source/utilities/sci_mesh_enums_mod.f90 rename infrastructure/source/mesh/{local_mesh_mod.f90 => local_mesh_mod.F90} (98%) diff --git a/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 b/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 index b293832a07..bc6fabcee6 100644 --- a/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 +++ b/applications/io_demo/source/driver/io_demo_checkpoint_mod.f90 @@ -25,8 +25,6 @@ module io_demo_checkpoint_mod LOG_LEVEL_DEBUG, LOG_LEVEL_ERROR use mesh_mod, only: mesh_type - use sci_mesh_enums_mod, only: get_mesh_geometry, get_mesh_topology - implicit none private @@ -69,8 +67,8 @@ subroutine setup_checkpoint_io(modeldb, chi, panel_id) mesh => chi(1)%get_mesh() - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = modeldb%config%finite_element%coord_system() scaled_radius = modeldb%config%planet%scaled_radius() diff --git a/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 b/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 index a8bdd9f156..4cb31acf2a 100644 --- a/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 +++ b/applications/lbc_demo/source/kernel/set_lbc_int_kernel_mod.F90 @@ -14,7 +14,7 @@ module set_lbc_int_kernel_mod use constants_mod, only: r_def, i_def, l_def, radians_to_degrees use kernel_mod, only: kernel_type - use sci_mesh_enums_mod, only: geometry_spherical + use mesh_mod, only: geometry_spherical implicit none diff --git a/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 b/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 index 5127d4119c..3c0765829d 100644 --- a/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 +++ b/applications/lbc_demo/source/kernel/set_lbc_real_kernel_mod.F90 @@ -14,7 +14,7 @@ module set_lbc_real_kernel_mod use constants_mod, only: r_def, i_def, l_def, radians_to_degrees use kernel_mod, only: kernel_type - use sci_mesh_enums_mod, only: geometry_spherical + use mesh_mod, only: geometry_spherical implicit none diff --git a/components/driver/source/driver_coordinates_mod.F90 b/components/driver/source/driver_coordinates_mod.F90 index 85cee9407b..b6595073bd 100644 --- a/components/driver/source/driver_coordinates_mod.F90 +++ b/components/driver/source/driver_coordinates_mod.F90 @@ -18,12 +18,10 @@ module driver_coordinates_mod schmidt_transform_xyz, & inverse_schmidt_transform_xyz - use sci_mesh_enums_mod, only: get_mesh_geometry, & - get_mesh_topology, & - geometry_planar, & - geometry_spherical, & - topology_periodic, & - topology_non_periodic + use mesh_mod, only: geometry_planar, & + geometry_spherical, & + topology_periodic, & + topology_non_periodic ! Configuration modules use finite_element_config_mod, only: coord_system_xyz @@ -111,8 +109,8 @@ subroutine assign_coordinate_field(config, mesh, chi, panel_id) nullify( map, map_pid, dof_coords, reference_element ) - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/driver/source/driver_fem_mod.f90 b/components/driver/source/driver_fem_mod.f90 index a0559bf7a8..88f9803ea9 100644 --- a/components/driver/source/driver_fem_mod.f90 +++ b/components/driver/source/driver_fem_mod.f90 @@ -26,11 +26,10 @@ module driver_fem_mod use sci_chi_transform_mod, only: init_chi_transforms, & final_chi_transforms - use sci_mesh_enums_mod, only: get_mesh_geometry, & - get_mesh_topology, & - geometry_spherical, & - geometry_planar, & - topology_non_periodic + use mesh_mod, only: geometry_spherical, & + geometry_planar, & + topology_non_periodic + ! Object types use config_mod, only: config_type use field_mod, only: field_type @@ -122,8 +121,8 @@ subroutine init_fem(config, chi_inventory, panel_id_inventory) mesh => mesh_collection%get_mesh(all_mesh_names(i)) mesh_name = mesh%get_mesh_name() - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() ! Initialise coordinate transformations call init_chi_transforms( geometry, topology, & diff --git a/components/driver/source/driver_mesh_mod.f90 b/components/driver/source/driver_mesh_mod.f90 index efedf272df..1d287799fd 100644 --- a/components/driver/source/driver_mesh_mod.f90 +++ b/components/driver/source/driver_mesh_mod.f90 @@ -51,11 +51,11 @@ module driver_mesh_mod use global_mesh_collection_mod, only: global_mesh_collection use local_mesh_collection_mod, only: local_mesh_collection + use mesh_mod , only: geometry_spherical, & + topology_periodic ! Configuration modules use finite_element_config_mod, only: cellshape_quadrilateral - use sci_mesh_enums_mod, only: geometry_spherical, & - topology_periodic implicit none diff --git a/components/science/source/algorithm/sci_fem_constants_mod.x90 b/components/science/source/algorithm/sci_fem_constants_mod.x90 index 0a30aaab23..dc8a51c511 100644 --- a/components/science/source/algorithm/sci_fem_constants_mod.x90 +++ b/components/science/source/algorithm/sci_fem_constants_mod.x90 @@ -25,7 +25,7 @@ module sci_fem_constants_mod use inventory_by_mesh_mod, only: inventory_by_mesh_type use log_mod, only: log_event, LOG_LEVEL_ERROR use mesh_collection_mod, only: mesh_collection - use mesh_mod, only: mesh_type + use mesh_mod, only: mesh_type, topology_periodic use operator_mod, only: operator_type use quadrature_xyoz_mod, only: quadrature_xyoz_type use quadrature_rule_gaussian_mod, only: quadrature_rule_gaussian_type @@ -48,9 +48,6 @@ module sci_fem_constants_mod use dg_inc_matrix_vector_kernel_mod, only: dg_inc_matrix_vector_kernel_type use sci_multiplicity_kernel_mod, only: multiplicity_kernel_type - use sci_mesh_enums_mod, only: get_mesh_topology, & - topology_periodic - implicit none private @@ -235,7 +232,7 @@ contains integer(i_def) :: topology mesh => mesh_collection%get_mesh(mesh_id) - topology = get_mesh_topology(mesh) + topology = mesh%topology() ! If running at lowest order, use finite volume if (element_order_h == 0 .and. element_order_v == 0) then @@ -356,7 +353,7 @@ contains integer(i_def) :: topology mesh => mesh_collection%get_mesh(mesh_id) - topology = get_mesh_topology(mesh) + topology = mesh%topology() ! Point to appropriate inventory for this space select case (space) diff --git a/components/science/source/algorithm/sci_geometric_constants_mod.x90 b/components/science/source/algorithm/sci_geometric_constants_mod.x90 index 45502d665f..9059bf3baf 100644 --- a/components/science/source/algorithm/sci_geometric_constants_mod.x90 +++ b/components/science/source/algorithm/sci_geometric_constants_mod.x90 @@ -21,13 +21,10 @@ module sci_geometric_constants_mod use function_space_collection_mod, only: function_space_collection use log_mod, only: log_event, LOG_LEVEL_ERROR use mesh_collection_mod, only: mesh_collection + use mesh_mod, only: geometry_spherical use timing_mod, only: start_timing, stop_timing, & tik, LPROF - use sci_mesh_enums_mod, only: get_mesh_topology, & - get_mesh_geometry, & - geometry_spherical - ! Object types use config_mod, only: config_type use field_mod, only: field_type @@ -190,7 +187,7 @@ contains element_order_h = config%finite_element%element_order_h() element_order_v = config%finite_element%element_order_v() - topology = get_mesh_topology(mesh) + topology = mesh%topology() f_lat = config%base_mesh%f_lat() f_lon = config%idealised%f_lon() @@ -989,7 +986,7 @@ contains call dA_msl_proj_inventory%initialise(name="dA_msl_proj") end if - geometry = get_mesh_geometry(mesh) + geometry = mesh%geometry() planet_radius = config%extrusion%planet_radius() domain_height = config%extrusion%domain_height() @@ -1330,7 +1327,7 @@ contains real(kind=r_def) :: scaled_radius - geometry = get_mesh_geometry(mesh) + geometry = mesh%geometry() element_order_h = config%finite_element%element_order_h() element_order_v = config%finite_element%element_order_v() @@ -1456,7 +1453,7 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - geometry = get_mesh_geometry(mesh) + geometry = mesh%geometry() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/science/source/algorithm/sci_mapping_constants_mod.x90 b/components/science/source/algorithm/sci_mapping_constants_mod.x90 index 46195d0525..d3f3307c37 100644 --- a/components/science/source/algorithm/sci_mapping_constants_mod.x90 +++ b/components/science/source/algorithm/sci_mapping_constants_mod.x90 @@ -40,8 +40,6 @@ module sci_mapping_constants_mod use timing_mod, only: start_timing, stop_timing, & tik, LPROF - use sci_mesh_enums_mod, only: get_mesh_geometry, get_mesh_topology - ! Object types use config_mod, only: config_type @@ -225,8 +223,8 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -294,8 +292,8 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1084,8 +1082,8 @@ contains integer(kind=i_def), parameter :: xdirection = 1_i_def integer(tik) :: id - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1156,8 +1154,8 @@ contains integer(kind=i_def), parameter :: ydirection = 2_i_def integer(tik) :: id - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1229,8 +1227,8 @@ contains integer(kind=i_def), parameter :: zdirection = 3_i_def integer(tik) :: id - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() @@ -1303,8 +1301,8 @@ contains integer(kind=i_def) :: coord_system real(kind=r_def) :: scaled_radius - geometry = get_mesh_geometry(mesh) - topology = get_mesh_topology(mesh) + geometry = mesh%geometry() + topology = mesh%topology() coord_system = config%finite_element%coord_system() scaled_radius = config%planet%scaled_radius() diff --git a/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 b/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 index 0b14d430f4..0523f7556a 100644 --- a/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 +++ b/components/science/source/kernel/geometry/sci_chi_transform_mod.F90 @@ -29,7 +29,7 @@ module sci_chi_transform_mod LOG_LEVEL_DEBUG, & LOG_LEVEL_WARNING use matrix_invert_mod, only : matrix_invert_3x3 -use sci_mesh_enums_mod, only : geometry_spherical, & +use mesh_mod, only : geometry_spherical, & geometry_planar, & topology_periodic diff --git a/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 b/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 index 9b073a4738..d1207e33ef 100644 --- a/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 +++ b/components/science/source/kernel/geometry/sci_coordinate_jacobian_mod.F90 @@ -19,13 +19,12 @@ module sci_coordinate_jacobian_mod xyz2ll, & llr2xyz, & schmidt_transform_lat - + use mesh_mod, only: geometry_planar, & + topology_periodic use sci_chi_transform_mod, only: get_mesh_rotation_matrix, & get_to_stretch, & get_to_rotate, & get_stretch_factor - use sci_mesh_enums_mod, only: geometry_planar, & - topology_periodic ! Configuration modules use finite_element_config_mod, only: coord_system_xyz, & diff --git a/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 b/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 index 4810e290d6..326cf565c1 100644 --- a/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 +++ b/components/science/source/kernel/geometry/sci_height_continuous_kernel_mod.F90 @@ -15,10 +15,10 @@ module sci_height_continuous_kernel_mod GH_READ, GH_INC, & ANY_SPACE_1, ANY_SPACE_9, & CELL_COLUMN, GH_BASIS, GH_EVALUATOR - use sci_mesh_enums_mod, only: geometry_spherical use constants_mod, only: r_def, i_def, l_def use finite_element_config_mod, only: coord_system_xyz use kernel_mod, only: kernel_type + use mesh_mod, only: geometry_spherical implicit none private diff --git a/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 b/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 index 654159d2ec..af7f9d1b21 100644 --- a/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 +++ b/components/science/source/kernel/geometry/sci_height_discontinuous_kernel_mod.F90 @@ -16,10 +16,10 @@ module sci_height_discontinuous_kernel_mod GH_READ, GH_WRITE, & ANY_DISCONTINUOUS_SPACE_1, ANY_SPACE_9, & CELL_COLUMN, GH_BASIS, GH_EVALUATOR - use sci_mesh_enums_mod, only: geometry_spherical use constants_mod, only: r_def, i_def, l_def use finite_element_config_mod, only: coord_system_xyz use kernel_mod, only: kernel_type + use mesh_mod, only: geometry_spherical implicit none private diff --git a/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 b/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 index 1895506c3d..866bea469c 100644 --- a/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 +++ b/components/science/source/kernel/geometry/sci_native_jacobian_mod.F90 @@ -26,11 +26,11 @@ module sci_native_jacobian_mod get_to_stretch, & get_to_rotate, & get_stretch_factor + use mesh_mod, only: geometry_planar, & + topology_periodic use finite_element_config_mod, only: coord_system_xyz, & coord_system_native - use sci_mesh_enums_mod, only: geometry_planar, & - topology_periodic implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 index ace037398d..f8c44e2031 100644 --- a/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_compute_map_u_operators_kernel_mod.F90 @@ -28,8 +28,7 @@ module sci_compute_map_u_operators_kernel_mod use fs_continuity_mod, only : W2, W3, Wtheta use kernel_mod, only : kernel_type use log_mod, only : log_event, LOG_LEVEL_ERROR, LOG_LEVEL_INFO - - use sci_mesh_enums_mod, only: geometry_spherical, geometry_planar + use mesh_mod, only : geometry_spherical, geometry_planar implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 index 80c220ff1c..30549f3379 100644 --- a/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_compute_sample_u_ops_kernel_mod.F90 @@ -33,8 +33,7 @@ module sci_compute_sample_u_ops_kernel_mod coordinate_jacobian_inverse use coord_transform_mod, only : sphere2cart_vector use reference_element_mod, only : W, S, N, E, T, B - - use sci_mesh_enums_mod, only: geometry_spherical, geometry_planar + use mesh_mod, only : geometry_spherical, geometry_planar implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 index e324f05c8c..9afedf8bc0 100644 --- a/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_convert_phys_to_hdiv_kernel_mod.F90 @@ -21,8 +21,7 @@ module sci_convert_phys_to_hdiv_kernel_mod use constants_mod, only : r_def, i_def use fs_continuity_mod, only : W2 use kernel_mod, only : kernel_type - - use sci_mesh_enums_mod, only: geometry_spherical + use mesh_mod, only : geometry_spherical implicit none diff --git a/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 b/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 index 9d7936cea2..51cf41bb00 100644 --- a/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 +++ b/components/science/source/kernel/inter_function_space/sci_project_ws_to_w1_operator_kernel_mod.F90 @@ -26,8 +26,7 @@ module sci_project_ws_to_w1_operator_kernel_mod use constants_mod, only : r_def, i_def use fs_continuity_mod, only : W1 use log_mod, only : log_event, LOG_LEVEL_ERROR - -use sci_mesh_enums_mod, only: geometry_spherical, geometry_planar +use mesh_mod, only : geometry_spherical, geometry_planar implicit none diff --git a/components/science/source/utilities/sci_mesh_enums_mod.f90 b/components/science/source/utilities/sci_mesh_enums_mod.f90 deleted file mode 100644 index 6691fe0d20..0000000000 --- a/components/science/source/utilities/sci_mesh_enums_mod.f90 +++ /dev/null @@ -1,86 +0,0 @@ -!----------------------------------------------------------------------------- -! (c) Crown copyright Met Office. All rights reserved. -! The file LICENCE, distributed with this code, contains details of the terms -! under which the code may be used -!----------------------------------------------------------------------------- - -!> @brief Module to access mesh enumerations. -module sci_mesh_enums_mod - - use constants_mod, only: i_def - use log_mod, only: log_event, log_level_error - use mesh_mod, only: mesh_type - - use base_mesh_config_mod, only: & - config_geometry_spherical => geometry_spherical, & - config_geometry_planar => geometry_planar, & - config_topology_periodic => topology_fully_periodic, & - config_topology_non_periodic => topology_non_periodic - - implicit none - - private - - public :: geometry_spherical, geometry_planar - public :: topology_periodic, topology_non_periodic - - public :: get_mesh_geometry, get_mesh_topology - - ! These will get switched to something hardcoded for the science components - ! at a later date to break dependence on base_mesh_config_mod - integer(i_def), parameter :: geometry_spherical = config_geometry_spherical ! 157 - integer(i_def), parameter :: geometry_planar = config_geometry_planar ! 358 - integer(i_def), parameter :: topology_periodic = config_topology_periodic ! 492 - integer(i_def), parameter :: topology_non_periodic = config_topology_non_periodic ! 157 - -contains - -!--------------------------------------------------------------------------- -!> @brief Returns mesh geometry enumeration -!> @param[in] mesh Mesh object to query -!> @return geometry Geometry enumeration -!> -function get_mesh_geometry(mesh) result(geometry) - - implicit none - - type(mesh_type), intent(in) :: mesh - - integer(i_def) :: geometry - - if (mesh%is_geometry_spherical()) then - geometry = geometry_spherical - else if (mesh%is_geometry_planar()) then - geometry = geometry_planar - else - call log_event('Unsupported mesh geometry', log_level_error) - end if - - end function get_mesh_geometry - - - -!--------------------------------------------------------------------------- -!> @brief Returns mesh topology enumeration -!> @param[in] mesh Mesh object to query -!> @return topology Topology enumeration -!> -function get_mesh_topology(mesh) result(topology) - - implicit none - - type(mesh_type), intent(in) :: mesh - - integer(i_def) :: topology - - if (mesh%is_topology_periodic()) then - topology = topology_periodic - else if (mesh%is_topology_non_periodic()) then - topology = topology_non_periodic - else - call log_event('Unsupported mesh topology', log_level_error) - end if - - end function get_mesh_topology - -end module sci_mesh_enums_mod diff --git a/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf b/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf index f2d2c25b55..58d93a4efa 100644 --- a/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/fem/gp_vector_rhs_kernel_mod_test.pf @@ -38,9 +38,8 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use sci_mesh_enums_mod, only : geometry_planar, & - topology_periodic - + use mesh_mod, only : geometry_planar, & + topology_periodic use sci_chi_transform_mod, only : init_chi_transforms use finite_element_config_mod, only : cellshape_quadrilateral, & coord_system_xyz, coord_space_wchi diff --git a/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf b/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf index 526ad5bcbd..1bff56a9bf 100644 --- a/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/chi_transform_mod_test.pf @@ -10,9 +10,9 @@ module chi_transform_mod_test use constants_mod, only : i_def, r_def, str_long, PI, rmdi - use sci_mesh_enums_mod, only: geometry_spherical, & - topology_periodic, & - topology_non_periodic + use mesh_mod, only: geometry_spherical, & + topology_periodic, & + topology_non_periodic use finite_element_config_mod, only: coord_system_native, & coord_system_xyz diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf index 8a91c58130..ae63c7a4aa 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_alphabetaz_mod_test.pf @@ -10,8 +10,7 @@ module coordinate_jacobian_alphabetaz_mod_test use funit use constants_mod, only: r_def, i_def - use sci_mesh_enums_mod, only: geometry_spherical, & - topology_periodic + use mesh_mod, only: geometry_spherical, topology_periodic use finite_element_config_mod, only: coord_system_native implicit none diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf index f5fdfce871..137fec9ec8 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_lonlatz_mod_test.pf @@ -10,8 +10,9 @@ module coordinate_jacobian_lonlatz_mod_test use funit use constants_mod, only : r_def, i_def, PI - use sci_mesh_enums_mod, only: geometry_spherical, & - topology_non_periodic + use mesh_mod, only : geometry_spherical, & + topology_non_periodic + use finite_element_config_mod, only: coord_system_native implicit none diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf index 99178a6752..bc3ff08982 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_stretched_mod_test.pf @@ -21,7 +21,7 @@ contains @before subroutine set_up() - use sci_mesh_enums_mod, only : geometry_spherical, & + use mesh_mod, only : geometry_spherical, & topology_non_periodic use extrusion_config_mod, only : method_uniform, & stretching_method_linear diff --git a/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf b/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf index 7c9c585979..7f9611d9ab 100644 --- a/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/coordinate_jacobian_xyz_mod_test.pf @@ -64,8 +64,8 @@ contains pointwise_coordinate_jacobian_inverse use finite_element_config_mod, only: coord_system_xyz - use sci_mesh_enums_mod, only: geometry_planar, & - topology_non_periodic + + use mesh_mod, only: geometry_planar, topology_non_periodic implicit none diff --git a/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf index 8316a06e18..b1bee51707 100644 --- a/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/get_dz_w3_kernel_mod_test.pf @@ -35,7 +35,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use sci_mesh_enums_mod, only : geometry_planar, & + use mesh_mod, only : geometry_planar, & topology_periodic use finite_element_config_mod, only : cellshape_quadrilateral, & coord_system_xyz, coord_space_wchi diff --git a/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf b/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf index 9e33c7573f..9e41d3667d 100644 --- a/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/height_continuous_kernel_mod_test.pf @@ -7,7 +7,7 @@ !! This test is parametrised to test both planar and spherical geometries. module height_continuous_kernel_mod_test - use sci_mesh_enums_mod, only : geometry_planar, & + use mesh_mod, only : geometry_planar, & geometry_spherical use constants_mod, only : i_def, r_def, str_long use funit diff --git a/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf b/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf index 5283335e0f..a037734d03 100644 --- a/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/height_discontinuous_kernel_mod_test.pf @@ -20,32 +20,24 @@ module height_discontinuous_kernel_mod_test use get_unit_test_3x3x3_chi_mod, only : get_w0_3x3x3_field use get_unit_test_w3nodal_basis_mod, only : get_w0_w3nodal_basis use get_unit_test_wthetanodal_basis_mod, only : get_w0_wthetanodal_basis + use mesh_mod, only : geometry_planar + implicit none private public :: test_all - @TestCase - type, extends(TestCase), public :: height_discontinuous_kernel_test_type - private - contains - procedure test_all - end type height_discontinuous_kernel_test_type - contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @Test - subroutine test_all( this ) + subroutine test_all() - use sci_mesh_enums_mod, only : geometry_planar use finite_element_config_mod, only : coord_system_xyz use sci_height_discontinuous_kernel_mod, only : height_discontinuous_code implicit none - class(height_discontinuous_kernel_test_type), intent(inout) :: this - real(r_def), parameter :: dx = 4.0_r_def, & dy = 3.0_r_def, & dz = 2.0_r_def, & diff --git a/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf b/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf index 79647fde8c..c1d169ea58 100644 --- a/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/native_jacobian_alphabetaz_mod_test.pf @@ -9,7 +9,7 @@ module native_jacobian_alphabetaz_mod_test use funit use constants_mod, only: r_def, i_def - use sci_mesh_enums_mod, only: geometry_spherical, & + use mesh_mod, only: geometry_spherical, & topology_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf b/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf index 7af8ea39c1..4953c2cb33 100644 --- a/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/native_jacobian_lonlatz_mod_test.pf @@ -10,7 +10,7 @@ module native_jacobian_lonlatz_mod_test use funit use constants_mod, only : r_def, i_def, PI - use sci_mesh_enums_mod, only: geometry_spherical, & + use mesh_mod, only: geometry_spherical, & topology_non_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf b/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf index 008f9d033b..589b23af90 100644 --- a/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf +++ b/components/science/unit-test/kernel/geometry/native_jacobian_stretched_mod_test.pf @@ -21,7 +21,7 @@ contains @before subroutine set_up() - use sci_mesh_enums_mod, only : geometry_spherical, & + use mesh_mod, only : geometry_spherical, & topology_non_periodic use extrusion_config_mod, only : method_uniform, & stretching_method_linear diff --git a/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf index 889b7a80e9..899912fdaa 100644 --- a/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/compute_map_u_operators_kernel_mod_test.pf @@ -8,7 +8,7 @@ module compute_map_u_operators_kernel_mod_test use constants_mod, only : i_def, pi, r_def - use sci_mesh_enums_mod, only: geometry_spherical, & + use mesh_mod, only: geometry_spherical, & topology_non_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf index 0fb9cf4ef1..74968de4e3 100644 --- a/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/compute_sample_u_ops_kernel_mod_test.pf @@ -6,7 +6,7 @@ module compute_sample_u_ops_kernel_mod_test - use sci_mesh_enums_mod, only : geometry_spherical, & + use mesh_mod, only : geometry_spherical, & topology_non_periodic use constants_mod, only : i_def, r_def use reference_element_mod, only : W, S, E, N, B, T diff --git a/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf index 357283fb1c..6516ed1b7c 100644 --- a/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/convert_phys_to_hdiv_kernel_mod_test.pf @@ -9,7 +9,7 @@ module convert_phys_to_hdiv_kernel_mod_test use constants_mod, only: i_def, r_def, rmdi - use sci_mesh_enums_mod, only: geometry_planar, & + use mesh_mod, only: geometry_planar, & topology_periodic use finite_element_config_mod, only: coord_system_xyz diff --git a/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf index ffea70927b..db35d7fb64 100644 --- a/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/project_ws_to_w1_operator_kernel_mod_test.pf @@ -23,7 +23,7 @@ module project_ws_to_w1_operator_kernel_mod_test get_w3_m3x3_dofmap use get_unit_test_3x3x3_chi_mod, only : get_w0_3x3x3_field - use sci_mesh_enums_mod, only: geometry_planar, & + use mesh_mod, only: geometry_planar, & topology_periodic use finite_element_config_mod, only: coord_system_xyz @@ -42,7 +42,7 @@ contains implicit none - call init_chi_transforms(geometry_planar,topology_periodic) + call init_chi_transforms(geometry_planar, topology_periodic) end subroutine set_up diff --git a/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf index 3f5f3c10c7..5bc63d9e32 100644 --- a/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/sample_w3_to_wtheta_kernel_mod_test.pf @@ -34,7 +34,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use sci_mesh_enums_mod, only : geometry_planar, & + use mesh_mod, only : geometry_planar, & topology_periodic use feign_config_mod, only : feign_base_mesh_config diff --git a/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf index 520ef6b51d..0fe42583bd 100644 --- a/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/sample_wtheta_to_w3_kernel_mod_test.pf @@ -32,7 +32,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use sci_mesh_enums_mod, only : geometry_planar, & + use mesh_mod, only : geometry_planar, & topology_periodic use feign_config_mod, only : feign_base_mesh_config diff --git a/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf index ba593bc31b..813c487337 100644 --- a/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_function_space/w3_to_w2_displacement_kernel_mod_test.pf @@ -10,7 +10,7 @@ module w3_to_w2_displacement_kernel_mod_test use constants_mod, only: i_def, r_def, PI, l_def use reference_element_mod, only: S, E, N, W - use sci_mesh_enums_mod, only: geometry_spherical, & + use mesh_mod, only: geometry_spherical, & topology_periodic use finite_element_config_mod, only: coord_system_native diff --git a/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf index ad1ead4280..1b0875c443 100644 --- a/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_mesh/inject_sh_w3_to_wt_kernel_mod_test.pf @@ -32,7 +32,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use sci_mesh_enums_mod, only : geometry_planar, & + use mesh_mod, only : geometry_planar, & topology_periodic use feign_config_mod, only : feign_base_mesh_config diff --git a/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf b/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf index c9c6a4e72d..434c1c325b 100644 --- a/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf +++ b/components/science/unit-test/kernel/inter_mesh/inject_wt_to_sh_w3_kernel_mod_test.pf @@ -32,7 +32,7 @@ contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine setUp( this ) - use sci_mesh_enums_mod, only : geometry_planar, & + use mesh_mod, only : geometry_planar, & topology_periodic use feign_config_mod, only : feign_base_mesh_config diff --git a/infrastructure/Makefile b/infrastructure/Makefile index 34a5a9cc97..163d5b3024 100644 --- a/infrastructure/Makefile +++ b/infrastructure/Makefile @@ -92,6 +92,7 @@ document-api: api-documentation # Unit tests # unit-tests/%: export BIN_DIR ?= $(PROJECT_DIR)/test +unit-tests/%: export PRE_PROCESS_MACROS += INFRASTRUCTURE_UNIT_TEST unit-tests/%: export PRE_PROCESS_INCLUDE_DIRS = $(realpath unit-test/include) unit-tests/%: export PROGRAMS = infrastructure_unit_tests unit-tests/%: export PROJECT = infrastructure diff --git a/infrastructure/documentation/uml/mesh/local_mesh_mod.iuml b/infrastructure/documentation/uml/mesh/local_mesh_mod.iuml index d96f4c3b51..09fbca8502 100644 --- a/infrastructure/documentation/uml/mesh/local_mesh_mod.iuml +++ b/infrastructure/documentation/uml/mesh/local_mesh_mod.iuml @@ -5,9 +5,9 @@ class local_mesh_mod::local_mesh_type { -mesh_name: string - -geometry: integer - -topology: integer - -coord_sys: integer + -mesh_geometry: integer + -mesh_topology: integer + -mesh_coord_sys: integer -coord_units_xy: string[2] -north_pole: real[2] -null_island: real[2] @@ -74,6 +74,10 @@ class local_mesh_mod::local_mesh_type { +is_coord_sys_xyz(): logical +is_coord_sys_ll(): logical + +geometry(): integer + +topology(): integer + +coord_sys(): integer + +get_north_pole(): real[2] +get_null_island(): real[2] +get_equatorial_latitude(): real diff --git a/infrastructure/documentation/uml/mesh/mesh_mod.iuml b/infrastructure/documentation/uml/mesh/mesh_mod.iuml index f22601e9fb..10710f0663 100644 --- a/infrastructure/documentation/uml/mesh/mesh_mod.iuml +++ b/infrastructure/documentation/uml/mesh/mesh_mod.iuml @@ -119,6 +119,10 @@ class mesh_mod::mesh_type { +get_colours( <>ncolours: integer, <>ncells_per_colour: integer[:] <>, <>colour_map: integer[::] <> ) +get_colour_map() : integer <> +is_coloured() : logical + + +geometry(): integer + +topology(): integer + +coord_sys(): integer +is_geometry_spherical(): logical +is_geometry_planar(): logical +is_topology_non_periodic(): logical diff --git a/infrastructure/source/mesh/local_mesh_mod.f90 b/infrastructure/source/mesh/local_mesh_mod.F90 similarity index 98% rename from infrastructure/source/mesh/local_mesh_mod.f90 rename to infrastructure/source/mesh/local_mesh_mod.F90 index 079b17391d..c7c121b4ee 100644 --- a/infrastructure/source/mesh/local_mesh_mod.f90 +++ b/infrastructure/source/mesh/local_mesh_mod.F90 @@ -30,45 +30,33 @@ module local_mesh_mod LOG_LEVEL_INFO, LOG_LEVEL_DEBUG use partition_mod, only: partition_type -!!$ use base_mesh_config_mod, only: & -!!$ config_geometry_spherical => geometry_spherical, & -!!$ config_geometry_planar => geometry_planar, & -!!$ config_topology_periodic => topology_fully_periodic, & -!!$ config_topology_non_periodic => topology_non_periodic -!!$ -!!$ implicit none -!!$ -!!$ private -!!$ -!!$ integer(i_def), parameter, public :: geometry_spherical = config_geometry_spherical ! 101 -!!$ integer(i_def), parameter, public :: geometry_planar = config_geometry_planar ! 202 -!!$ -!!$ integer(i_def), parameter, public :: topology_non_periodic = config_topology_non_periodic ! 301 -!!$ integer(i_def), parameter, public :: topology_periodic = config_topology_periodic ! 503 -!!$ integer(i_def), parameter, public :: topology_channel = 402 -!!$ -!!$ integer(i_def), parameter, public :: coord_sys_ll = 601 -!!$ integer(i_def), parameter, public :: coord_sys_xyz = 702 - +#if !defined(INFRASTRUCTURE_UNIT_TEST) && !defined(MESH_TOOLS) + use base_mesh_config_mod, only: & + config_geometry_spherical => geometry_spherical, & + config_geometry_planar => geometry_planar, & + config_topology_periodic => topology_fully_periodic, & + config_topology_non_periodic => topology_non_periodic +#endif implicit none private - integer(i_def), parameter, public :: geometry_spherical = 101 - integer(i_def), parameter, public :: geometry_planar = 202 - - integer(i_def), parameter, public :: topology_non_periodic = 301 - integer(i_def), parameter, public :: topology_periodic = 503 - integer(i_def), parameter, public :: topology_channel = 402 - - integer(i_def), parameter, public :: coord_sys_ll = 601 - integer(i_def), parameter, public :: coord_sys_xyz = 702 - - - - - +#if !defined(INFRASTRUCTURE_UNIT_TEST) && !defined(MESH_TOOLS) + integer(i_def), parameter, public :: geometry_spherical = config_geometry_spherical ! 101 + integer(i_def), parameter, public :: geometry_planar = config_geometry_planar ! 202 + integer(i_def), parameter, public :: topology_non_periodic = config_topology_non_periodic ! 301 + integer(i_def), parameter, public :: topology_periodic = config_topology_periodic ! 503 +#else + integer(i_def), parameter, public :: geometry_spherical = 101_i_def + integer(i_def), parameter, public :: geometry_planar = 202_i_def + integer(i_def), parameter, public :: topology_non_periodic = 301_i_def + integer(i_def), parameter, public :: topology_periodic = 503_i_def +#endif + integer(i_def), parameter, public :: topology_channel = 402_i_def + + integer(i_def), parameter, public :: coord_sys_ll = 601_i_def + integer(i_def), parameter, public :: coord_sys_xyz = 702_i_def type, extends(linked_list_data_type), public :: local_mesh_type @@ -254,6 +242,7 @@ module local_mesh_mod procedure, public :: get_equatorial_latitude procedure, public :: geometry procedure, public :: topology + procedure, public :: coord_sys procedure, public :: get_global_domain_extents procedure, public :: is_geometry_spherical @@ -1175,17 +1164,19 @@ subroutine initialise_from_ugrid_data(self, ugrid_mesh_data) integer(i_def) :: max_face_per_node ! Only needed for global meshes that ! are to be partitioned. - logical(i_def) :: periodic_xy(2) = .false. + logical(l_def) :: periodic_xy(2) - character(str_def) :: geometry_str - character(str_def) :: topology_str - character(str_def) :: coord_sys_str + character(str_def) :: geometry_str + character(str_def) :: topology_str + character(str_def) :: coord_sys_str if (.not. ugrid_mesh_data%is_local()) then call log_event( 'Insufficient data to initialise local mesh', & LOG_LEVEL_ERROR ) end if + periodic_xy(2) = .false. + local_mesh_id_counter = local_mesh_id_counter + 1 call self%set_id( local_mesh_id_counter ) @@ -2564,6 +2555,23 @@ function topology( self ) result( topology_enumeration ) end function topology + + !============================================================================== + !> @brief Returns mesh topology enumeration + !> @return coord_sys_enumeration Integer enumeration identifying the mesh + !> coordinate system. + !> + function coord_sys( self ) result( coord_sys_enumeration ) + + implicit none + + class(local_mesh_type), intent(in) :: self + integer(i_def) :: coord_sys_enumeration + + coord_sys_enumeration = self%mesh_coord_sys + + end function coord_sys + !============================================================================== !> @brief Populates a object with this local mesh object's !> information. diff --git a/infrastructure/source/mesh/mesh_mod.F90 b/infrastructure/source/mesh/mesh_mod.F90 index b08b1f0956..492a678d50 100644 --- a/infrastructure/source/mesh/mesh_mod.F90 +++ b/infrastructure/source/mesh/mesh_mod.F90 @@ -246,7 +246,7 @@ module mesh_mod procedure, public :: get_extrusion_id procedure, public :: geometry procedure, public :: topology - + procedure, public :: coord_sys procedure, public :: get_dz procedure, public :: get_eta procedure, public :: get_vertex_cell_owner @@ -1230,8 +1230,6 @@ function get_extrusion_id(self) result (extrusion_id) end function get_extrusion_id - - !============================================================================== !> @brief Returns mesh geometry enumeration !> @return geometry_enumeration Integer enumeration identifying the mesh @@ -1266,6 +1264,22 @@ function topology( self ) result( topology_enumeration ) end function topology + !> @brief Returns mesh topology enumeration + !> @return coord_sys_enumeration Integer enumeration identifying the mesh + !> coordinate system. + !> + function coord_sys( self ) result( coord_sys_enumeration ) + + implicit none + + class(mesh_type), intent(in) :: self + integer(i_def) :: coord_sys_enumeration + + coord_sys_enumeration = self%local_mesh%coord_sys() + + end function coord_sys + + !> @details This functions returns an array of 3d-layer thicknesses in !> metres !> @param[out] dz Vertical thickness of layers in [m], array of diff --git a/infrastructure/source/mesh/panel_decomposition_mod.f90 b/infrastructure/source/mesh/panel_decomposition_mod.f90 index b6713da9c8..500d0a4163 100644 --- a/infrastructure/source/mesh/panel_decomposition_mod.f90 +++ b/infrastructure/source/mesh/panel_decomposition_mod.f90 @@ -12,7 +12,7 @@ module panel_decomposition_mod use global_mesh_collection_mod, only: global_mesh_collection_type use constants_mod, only: i_def, l_def, r_def use log_mod, only: log_event, log_scratch_space, & - LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG + LOG_LEVEL_ERROR, LOG_LEVEL_DEBUG implicit none @@ -166,7 +166,7 @@ subroutine get_custom_partition( self, & integer(i_def) :: num_xprocs, num_yprocs - call log_event("Using custom decomposition", LOG_LEVEL_INFO) + call log_event("Using custom decomposition", LOG_LEVEL_DEBUG) num_xprocs = self%num_xprocs num_yprocs = self%num_yprocs @@ -279,7 +279,7 @@ subroutine get_auto_partition( self, & integer(i_def) :: start_xprocs, start_width, i logical :: found_partition - call log_event("Using auto decomposition", LOG_LEVEL_INFO) + call log_event("Using auto decomposition", LOG_LEVEL_DEBUG) ! For automatic partitioning, try to partition into the squarest ! possible partitions. @@ -421,7 +421,7 @@ subroutine get_row_partition( self, & integer(i_def) :: num_xprocs, num_yprocs - call log_event("Using row decomposition", LOG_LEVEL_INFO) + call log_event("Using row decomposition", LOG_LEVEL_DEBUG) num_xprocs = panel_ranks num_yprocs = 1_i_def @@ -510,7 +510,7 @@ subroutine get_column_partition( self, & integer(i_def) :: num_xprocs, num_yprocs - call log_event("Using column decomposiiton", LOG_LEVEL_INFO) + call log_event("Using column decomposiiton", LOG_LEVEL_DEBUG) num_xprocs = 1_i_def num_yprocs = panel_ranks @@ -601,7 +601,7 @@ subroutine get_auto_nonuniform_partition( self, & integer(i_def) :: start_xprocs, start_width, i logical ::found_factors - call log_event("Using auto_nonuniform decomposition", LOG_LEVEL_INFO) + call log_event("Using auto_nonuniform decomposition", LOG_LEVEL_DEBUG) mp_num_cells_x = num_cells_x / mapping_factor mp_num_cells_y = num_cells_y / mapping_factor @@ -716,7 +716,7 @@ subroutine get_guided_nonuniform_partition( self, & integer(i_def) :: num_xprocs - call log_event("Using guided_nonuniform decomposition", LOG_LEVEL_INFO) + call log_event("Using guided_nonuniform decomposition", LOG_LEVEL_DEBUG) num_xprocs = self%num_xprocs diff --git a/infrastructure/source/mesh/partition_mod.F90 b/infrastructure/source/mesh/partition_mod.F90 index ba5ab1c11f..1b10832f9a 100644 --- a/infrastructure/source/mesh/partition_mod.F90 +++ b/infrastructure/source/mesh/partition_mod.F90 @@ -25,7 +25,6 @@ module partition_mod use sort_mod, only : bubble_sort use log_mod, only : log_event, & log_scratch_space, & - LOG_LEVEL_INFO, & LOG_LEVEL_ERROR, & LOG_LEVEL_DEBUG use constants_mod, only: i_def, r_def, l_def @@ -976,7 +975,7 @@ subroutine partitioner_rectangular_panels( global_mesh, & " num_y ", num_y call log_event( log_scratch_space, LOG_LEVEL_DEBUG ) write(log_scratch_space,"(a,i0,a,i0)") "Number of cells in partition ", num_x, " X ", num_y - call log_event( log_scratch_space, lOG_LEVEL_INFO ) + call log_event( log_scratch_space, lOG_LEVEL_DEBUG ) ! Create a linked list of all cells in the partition and at the same time ! create a linked-list of all edge cells known to the partition, excluding halos. diff --git a/mesh_tools/Makefile b/mesh_tools/Makefile index 6ed8916b40..2f520b0a57 100644 --- a/mesh_tools/Makefile +++ b/mesh_tools/Makefile @@ -50,6 +50,8 @@ export INTERNAL_DEPENDENCIES = $(CORE_ROOT_DIR)/infrastructure \ export SUITE_GROUP ?= developer export SUITE_GROUP_NAME ?= $(notdir $(realpath $(shell pwd)/$(CORE_ROOT_DIR)))-$(PROJECT_NAME)-.* +export PRE_PROCESS_MACROS := MESH_TOOLS + META_VN ?= HEAD META_FILE_DIR = $(PROJECT_DIR)/rose-meta/lfric-$(PROJECT_NAME)/$(META_VN) diff --git a/rose-stem/app/check_global_variables/file/dirtylist.txt b/rose-stem/app/check_global_variables/file/dirtylist.txt index 5ead624c1d..e18c6aef96 100644 --- a/rose-stem/app/check_global_variables/file/dirtylist.txt +++ b/rose-stem/app/check_global_variables/file/dirtylist.txt @@ -17,7 +17,7 @@ infrastructure/source/io/io_utility_mod.f90 infrastructure/source/mesh/global_mesh_collection_mod.F90 infrastructure/source/mesh/global_mesh_mod.F90 infrastructure/source/mesh/local_mesh_collection_mod.f90 -infrastructure/source/mesh/local_mesh_mod.f90 +infrastructure/source/mesh/local_mesh_mod.F90 infrastructure/source/mesh/mesh_collection_mod.F90 infrastructure/source/mesh/mesh_mod.F90 infrastructure/source/utilities/count_mod.f90 From 311a9ce75692c56b39d11f3558e77ba6b98f1da9 Mon Sep 17 00:00:00 2001 From: Ricky Wong <141156427+mo-rickywong@users.noreply.github.com> Date: Wed, 16 Sep 2026 15:54:50 +0100 Subject: [PATCH 6/6] Changes requested by reviewer --- components/driver/source/driver_mesh_mod.f90 | 2 +- .../source/mesh/panel_decomposition_mod.f90 | 14 +++++++------- infrastructure/source/mesh/partition_mod.F90 | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/components/driver/source/driver_mesh_mod.f90 b/components/driver/source/driver_mesh_mod.f90 index 1d287799fd..13c0823ebf 100644 --- a/components/driver/source/driver_mesh_mod.f90 +++ b/components/driver/source/driver_mesh_mod.f90 @@ -51,7 +51,7 @@ module driver_mesh_mod use global_mesh_collection_mod, only: global_mesh_collection use local_mesh_collection_mod, only: local_mesh_collection - use mesh_mod , only: geometry_spherical, & + use mesh_mod, only: geometry_spherical, & topology_periodic ! Configuration modules diff --git a/infrastructure/source/mesh/panel_decomposition_mod.f90 b/infrastructure/source/mesh/panel_decomposition_mod.f90 index 500d0a4163..b6713da9c8 100644 --- a/infrastructure/source/mesh/panel_decomposition_mod.f90 +++ b/infrastructure/source/mesh/panel_decomposition_mod.f90 @@ -12,7 +12,7 @@ module panel_decomposition_mod use global_mesh_collection_mod, only: global_mesh_collection_type use constants_mod, only: i_def, l_def, r_def use log_mod, only: log_event, log_scratch_space, & - LOG_LEVEL_ERROR, LOG_LEVEL_DEBUG + LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG implicit none @@ -166,7 +166,7 @@ subroutine get_custom_partition( self, & integer(i_def) :: num_xprocs, num_yprocs - call log_event("Using custom decomposition", LOG_LEVEL_DEBUG) + call log_event("Using custom decomposition", LOG_LEVEL_INFO) num_xprocs = self%num_xprocs num_yprocs = self%num_yprocs @@ -279,7 +279,7 @@ subroutine get_auto_partition( self, & integer(i_def) :: start_xprocs, start_width, i logical :: found_partition - call log_event("Using auto decomposition", LOG_LEVEL_DEBUG) + call log_event("Using auto decomposition", LOG_LEVEL_INFO) ! For automatic partitioning, try to partition into the squarest ! possible partitions. @@ -421,7 +421,7 @@ subroutine get_row_partition( self, & integer(i_def) :: num_xprocs, num_yprocs - call log_event("Using row decomposition", LOG_LEVEL_DEBUG) + call log_event("Using row decomposition", LOG_LEVEL_INFO) num_xprocs = panel_ranks num_yprocs = 1_i_def @@ -510,7 +510,7 @@ subroutine get_column_partition( self, & integer(i_def) :: num_xprocs, num_yprocs - call log_event("Using column decomposiiton", LOG_LEVEL_DEBUG) + call log_event("Using column decomposiiton", LOG_LEVEL_INFO) num_xprocs = 1_i_def num_yprocs = panel_ranks @@ -601,7 +601,7 @@ subroutine get_auto_nonuniform_partition( self, & integer(i_def) :: start_xprocs, start_width, i logical ::found_factors - call log_event("Using auto_nonuniform decomposition", LOG_LEVEL_DEBUG) + call log_event("Using auto_nonuniform decomposition", LOG_LEVEL_INFO) mp_num_cells_x = num_cells_x / mapping_factor mp_num_cells_y = num_cells_y / mapping_factor @@ -716,7 +716,7 @@ subroutine get_guided_nonuniform_partition( self, & integer(i_def) :: num_xprocs - call log_event("Using guided_nonuniform decomposition", LOG_LEVEL_DEBUG) + call log_event("Using guided_nonuniform decomposition", LOG_LEVEL_INFO) num_xprocs = self%num_xprocs diff --git a/infrastructure/source/mesh/partition_mod.F90 b/infrastructure/source/mesh/partition_mod.F90 index 1b10832f9a..0f4a137bb0 100644 --- a/infrastructure/source/mesh/partition_mod.F90 +++ b/infrastructure/source/mesh/partition_mod.F90 @@ -975,7 +975,7 @@ subroutine partitioner_rectangular_panels( global_mesh, & " num_y ", num_y call log_event( log_scratch_space, LOG_LEVEL_DEBUG ) write(log_scratch_space,"(a,i0,a,i0)") "Number of cells in partition ", num_x, " X ", num_y - call log_event( log_scratch_space, lOG_LEVEL_DEBUG ) + call log_event( log_scratch_space, lOG_LEVEL_INFO ) ! Create a linked list of all cells in the partition and at the same time ! create a linked-list of all edge cells known to the partition, excluding halos.