From b0bdc2b7c81a6aeecd248d5fc2ccb6989944689a Mon Sep 17 00:00:00 2001 From: Steven Brus Date: Tue, 23 May 2023 15:21:25 -0500 Subject: [PATCH 1/7] Add manufacutred solution tendencies --- components/mpas-ocean/src/Registry.xml | 22 ++ .../src/mode_forward/mpas_ocn_forward_mode.F | 3 + components/mpas-ocean/src/shared/Makefile | 7 +- .../shared/mpas_ocn_manufactured_solution.F | 245 ++++++++++++++++++ .../mpas-ocean/src/shared/mpas_ocn_tendency.F | 7 + 5 files changed, 282 insertions(+), 2 deletions(-) create mode 100644 components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F diff --git a/components/mpas-ocean/src/Registry.xml b/components/mpas-ocean/src/Registry.xml index 467d831ff299..1f5e65e47cdc 100644 --- a/components/mpas-ocean/src/Registry.xml +++ b/components/mpas-ocean/src/Registry.xml @@ -1533,6 +1533,28 @@ possible_values="Any positive non-zero integer. A value of -1 causes this to be overwritten with the configurations vertical level definition." /> + + + + + + + diff --git a/components/mpas-ocean/src/mode_forward/mpas_ocn_forward_mode.F b/components/mpas-ocean/src/mode_forward/mpas_ocn_forward_mode.F index 0e5235791f14..3fe3395d13c2 100644 --- a/components/mpas-ocean/src/mode_forward/mpas_ocn_forward_mode.F +++ b/components/mpas-ocean/src/mode_forward/mpas_ocn_forward_mode.F @@ -78,6 +78,7 @@ module ocn_forward_mode use ocn_gm use ocn_submesoscale_eddies use ocn_stokes_drift + use ocn_manufactured_solution use ocn_high_freq_thickness_hmix_del2 @@ -499,6 +500,8 @@ function ocn_forward_mode_init(domain, startTimeStamp) result(ierr)!{{{ call ocn_vertical_remap_init(err_tmp) call ocn_stokes_drift_init(err_tmp) ierr = ior(ierr,err_tmp) + call ocn_manufactured_solution_init(domain, err_tmp) + ierr = ior(ierr,err_tmp) if (ierr /= 0) then call mpas_log_write( & diff --git a/components/mpas-ocean/src/shared/Makefile b/components/mpas-ocean/src/shared/Makefile index a9100a8bf9fe..5c5bc21cff12 100644 --- a/components/mpas-ocean/src/shared/Makefile +++ b/components/mpas-ocean/src/shared/Makefile @@ -75,13 +75,14 @@ OBJS = mpas_ocn_init_routines.o \ mpas_ocn_transport_tests.o \ mpas_ocn_vel_self_attraction_loading.o \ mpas_ocn_vertical_advection.o \ - mpas_ocn_stokes_drift.o + mpas_ocn_stokes_drift.o \ + mpas_ocn_manufactured_solution.o all: $(OBJS) mpas_ocn_init_routines.o: mpas_ocn_constants.o mpas_ocn_config.o mpas_ocn_mesh.o mpas_ocn_diagnostics.o mpas_ocn_diagnostics_variables.o mpas_ocn_gm.o mpas_ocn_submesoscale_eddies.o mpas_ocn_forcing.o mpas_ocn_surface_land_ice_fluxes.o -mpas_ocn_tendency.o: mpas_ocn_high_freq_thickness_hmix_del2.o mpas_ocn_tracer_surface_restoring.o mpas_ocn_thick_surface_flux.o mpas_ocn_tracer_short_wave_absorption.o mpas_ocn_tracer_advection.o mpas_ocn_tracer_hmix.o mpas_ocn_tracer_nonlocalflux.o mpas_ocn_surface_bulk_forcing.o mpas_ocn_surface_land_ice_fluxes.o mpas_ocn_tracer_surface_flux_to_tend.o mpas_ocn_tracer_interior_restoring.o mpas_ocn_tracer_exponential_decay.o mpas_ocn_tracer_ideal_age.o mpas_ocn_tracer_TTD.o mpas_ocn_vmix.o mpas_ocn_constants.o mpas_ocn_config.o mpas_ocn_frazil_forcing.o mpas_ocn_tidal_forcing.o mpas_ocn_tracer_ecosys.o mpas_ocn_tracer_DMS.o mpas_ocn_tracer_MacroMolecules.o mpas_ocn_tracer_CFC.o mpas_ocn_diagnostics.o mpas_ocn_wetting_drying.o mpas_ocn_vel_self_attraction_loading.o mpas_ocn_vel_tidal_potential.o mpas_ocn_mesh.o mpas_ocn_diagnostics_variables.o mpas_ocn_thick_hadv.o mpas_ocn_thick_vadv.o mpas_ocn_vel_hadv_coriolis.o mpas_ocn_vel_pressure_grad.o mpas_ocn_vel_vadv.o mpas_ocn_vel_hmix.o mpas_ocn_vel_forcing.o +mpas_ocn_tendency.o: mpas_ocn_high_freq_thickness_hmix_del2.o mpas_ocn_tracer_surface_restoring.o mpas_ocn_thick_surface_flux.o mpas_ocn_tracer_short_wave_absorption.o mpas_ocn_tracer_advection.o mpas_ocn_tracer_hmix.o mpas_ocn_tracer_nonlocalflux.o mpas_ocn_surface_bulk_forcing.o mpas_ocn_surface_land_ice_fluxes.o mpas_ocn_tracer_surface_flux_to_tend.o mpas_ocn_tracer_interior_restoring.o mpas_ocn_tracer_exponential_decay.o mpas_ocn_tracer_ideal_age.o mpas_ocn_tracer_TTD.o mpas_ocn_vmix.o mpas_ocn_constants.o mpas_ocn_config.o mpas_ocn_frazil_forcing.o mpas_ocn_tidal_forcing.o mpas_ocn_tracer_ecosys.o mpas_ocn_tracer_DMS.o mpas_ocn_tracer_MacroMolecules.o mpas_ocn_tracer_CFC.o mpas_ocn_diagnostics.o mpas_ocn_wetting_drying.o mpas_ocn_vel_self_attraction_loading.o mpas_ocn_vel_tidal_potential.o mpas_ocn_mesh.o mpas_ocn_diagnostics_variables.o mpas_ocn_thick_hadv.o mpas_ocn_thick_vadv.o mpas_ocn_vel_hadv_coriolis.o mpas_ocn_vel_pressure_grad.o mpas_ocn_vel_vadv.o mpas_ocn_vel_hmix.o mpas_ocn_vel_forcing.o mpas_ocn_manufactured_solution.o mpas_ocn_diagnostics.o: mpas_ocn_thick_ale.o mpas_ocn_equation_of_state.o mpas_ocn_gm.o mpas_ocn_constants.o mpas_ocn_config.o mpas_ocn_mesh.o mpas_ocn_diagnostics_variables.o mpas_ocn_surface_land_ice_fluxes.o mpas_ocn_vertical_advection.o mpas_ocn_submesoscale_eddies.o @@ -235,6 +236,8 @@ mpas_ocn_vertical_remap.o: mpas_ocn_config.o mpas_ocn_constants.o mpas_ocn_diagn mpas_ocn_stokes_drift.o: mpas_ocn_constants.o mpas_ocn_config.o mpas_ocn_diagnostics_variables.o mpas_ocn_mesh.o +mpas_ocn_manufactured_solution.o: mpas_ocn_constants.o mpas_ocn_config.o mpas_ocn_mesh.o + clean: $(RM) *.o *.i *.mod *.f90 diff --git a/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F b/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F new file mode 100644 index 000000000000..87b72f4970ac --- /dev/null +++ b/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F @@ -0,0 +1,245 @@ +! Copyright (c) 2013, Los Alamos National Security, LLC (LANS) +! and the University Corporation for Atmospheric Research (UCAR). +! +! Unless noted otherwise source code is licensed under the BSD license. +! Additional copyright and license information can be found in the LICENSE file +! distributed with this code, or at http://mpas-dev.github.io/license.html +! +!||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +! +! ocn_manufactured_solution +! +!> \brief Computes tendency terms for a manufactured solution +!> \author Steven Brus, Carolyn Begeman +!> \date June 2023 +!> \details +!> This module contains the routines for computing the thickness and +!> normal velocity tendencies for a manufactured solution case. See +!> Bishnu et al. 2022 (https://doi.org/10.22541/essoar.167100170.03833124/v1) +! +!----------------------------------------------------------------------- + +module ocn_manufactured_solution + + use mpas_constants + use mpas_timer + use mpas_timekeeping + use ocn_constants + use ocn_config + use ocn_mesh + use ocn_diagnostics_variables + + implicit none + private + save + + !-------------------------------------------------------------------- + ! + ! Public parameters + ! + !-------------------------------------------------------------------- + + !-------------------------------------------------------------------- + ! + ! Public member functions + ! + !-------------------------------------------------------------------- + + public :: ocn_manufactured_solution_tend_thick, & + ocn_manufactured_solution_tend_vel, & + ocn_manufactured_solution_init + + !-------------------------------------------------------------------- + ! + ! Private module variables + ! + !-------------------------------------------------------------------- + + real (kind=RKIND) :: kx, ky + real (kind=RKIND) :: omega + real (kind=RKIND) :: eta0 + real (kind=RKIND) :: H0 + +!*********************************************************************** + +contains + +!*********************************************************************** +! +! routine ocn_manufactured_solution_tend_thick +! +!> \brief Computes manufactured solution thickness tendency +!> \author Steven Brus, Carolyn Begeman +!> \date June 2023 +!> \details +!> This routine computes the thickness tendency for the manufactured solution +! +!----------------------------------------------------------------------- + + subroutine ocn_manufactured_solution_tend_thick(tend, err)!{{{ + + !----------------------------------------------------------------- + ! input/output variables + !----------------------------------------------------------------- + + real (kind=RKIND), dimension(:,:), intent(inout) :: & + tend !< Input/Output: thickness tendency + + !----------------------------------------------------------------- + ! output variables + !----------------------------------------------------------------- + + integer, intent(out) :: err !< Output: error flag + + !----------------------------------------------------------------- + ! local variables + !----------------------------------------------------------------- + + integer :: iCell, kmin, kmax, k + real (kind=RKIND) :: phase, time + + ! End preamble + !------------- + ! Begin code + + if (.not. config_use_manufactured_solution) return + + time = daysSinceStartOfSim*86400.0_RKIND + + do iCell = 1,nCellsOwned + + kmin = minLevelCell(iCell) + kmax = maxLevelCell(iCell) + + phase = kx*xCell(iCell) + ky*yCell(iCell) - omega*time + do k = kmin, kmax + tend(k,iCell) = tend(k,iCell) + eta0*(-H0*(kx + ky)*sin(phase) & + - omega*cos(phase) & + + eta0*(kx + ky)*cos(2.0_RKIND*phase)) + enddo + + err = 0 + + enddo + + !-------------------------------------------------------------------- + + end subroutine ocn_manufactured_solution_tend_thick!}}} + +!*********************************************************************** +! +! routine ocn_manufactured_solution_tend_vel +! +!> \brief Computes manufactured solution velocity tendency +!> \author Steven Brus, Carolyn Begeman +!> \date June 2023 +!> \details +!> This routine computes the velocity tendency for the manufactured solution +! +!----------------------------------------------------------------------- + subroutine ocn_manufactured_solution_tend_vel(tend, err)!{{{ + + !----------------------------------------------------------------- + ! input/output variables + !----------------------------------------------------------------- + + real (kind=RKIND), dimension(:,:), intent(inout) :: & + tend !< Input/Output: velocity tendency + + !----------------------------------------------------------------- + ! output variables + !----------------------------------------------------------------- + + integer, intent(out) :: err !< Output: error flag + + !----------------------------------------------------------------- + ! local variables + !----------------------------------------------------------------- + + integer :: iEdge, kmin, kmax, k + real (kind=RKIND) :: phase, u, v, time + + ! End preamble + !----------------------------------------------------------------- + ! Begin code + + if (.not. config_use_manufactured_solution) return + + time = daysSinceStartOfSim*86400.0_RKIND + + do iEdge = 1, nEdgesOwned + + kmin = minLevelEdgeBot(iEdge) + kmax = maxLevelEdgeTop(iEdge) + + phase = kx*xEdge(iEdge) + ky*yEdge(iEdge) - omega*time + + do k = kmin, kmax + + u = eta0*((-fEdge(iEdge) + gravity*kx)*cos(phase) & + + omega*sin(phase) & + - 0.5_RKIND*eta0*(kx + ky)*sin(2.0_RKIND*(phase))) + v = eta0*((fEdge(iEdge) + gravity*ky)*cos(phase) & + + omega*sin(phase) & + - 0.5_RKIND*eta0*(kx + ky)*sin(2.0_RKIND*(phase))) + + tend(k,iEdge) = tend(k,iEdge) + u*cos(angleEdge(iEdge)) + v*sin(angleEdge(iEdge)) + enddo + + err = 0 + + enddo + + !-------------------------------------------------------------------- + + end subroutine ocn_manufactured_solution_tend_vel!}}} + +!*********************************************************************** +! +! routine ocn_manufactured_solution_init +! +!> \brief Initialize the manufactured solution tendencies +!> \author Steven Brus, Carolyn Begeman +!> \date June 2023 +!> \details +!> This routine initializes constants related to the manufactured +!> solution tendencies +! +!----------------------------------------------------------------------- + subroutine ocn_manufactured_solution_init(domain, err)!{{{ + + type (domain_type), intent(inout) :: domain + integer, intent(out) :: err !< Output: Error flag + + type (block_type), pointer :: block + type (mpas_pool_type), pointer :: verticalMeshPool + real (kind=RKIND), dimension(:,:), pointer :: restingThickness + + if (.not. config_use_manufactured_solution) return + + kx = 2.0_RKIND*pii / config_manufactured_solution_wavelength_x + ky = 2.0_RKIND*pii / config_manufactured_solution_wavelength_y + + omega = config_manufactured_solution_omega + eta0 = config_manufactured_solution_amplitude + + block => domain % blocklist + do while (associated(block)) + call mpas_pool_get_subpool(block % structs, 'verticalMesh', verticalMeshPool) + + call mpas_pool_get_array(verticalMeshPool, 'restingThickness', restingThickness) + + H0 = restingThickness(1,1) + block => block % next + enddo + + err = 0 + + end subroutine ocn_manufactured_solution_init!}}} + +!*********************************************************************** + +end module ocn_manufactured_solution + +!||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +! vim: foldmethod=marker diff --git a/components/mpas-ocean/src/shared/mpas_ocn_tendency.F b/components/mpas-ocean/src/shared/mpas_ocn_tendency.F index 2341ea5c28da..fddabab62039 100644 --- a/components/mpas-ocean/src/shared/mpas_ocn_tendency.F +++ b/components/mpas-ocean/src/shared/mpas_ocn_tendency.F @@ -67,6 +67,7 @@ module ocn_tendency use ocn_wetting_drying use ocn_vel_tidal_potential use ocn_vel_self_attraction_loading + use ocn_manufactured_solution implicit none private @@ -225,6 +226,9 @@ subroutine ocn_tend_thick(tendPool, forcingPool)!{{{ call ocn_tidal_forcing_layer_thickness(forcingPool, & tendThick, err) + ! Compute thickness tendency to manufactured solution + call ocn_manufactured_solution_tend_thick(tendThick, err) + #ifdef MPAS_OPENACC !$acc exit data copyout(tendThick, surfaceThicknessFlux, surfaceThicknessFluxRunoff) #endif @@ -447,6 +451,9 @@ subroutine ocn_tend_vel(domain, tendPool, statePool, forcingPool, & sfcStress, kineticEnergyCell, & layerThickEdgeDrag, & layerThickEdgeMean, tendVel, err) + + ! Compute tendency term for manufactured solution + call ocn_manufactured_solution_tend_vel(tendVel, err) ! vertical mixing treated implicitly in a later routine ! adjust total velocity tendency based on wetting/drying From ad93c291cd2b8a2c5969fe555f95a0d61d235f6e Mon Sep 17 00:00:00 2001 From: Steven Brus Date: Thu, 25 May 2023 12:39:03 -0500 Subject: [PATCH 2/7] Calculate omega value for manufactured solution internally --- components/mpas-ocean/src/Registry.xml | 4 ---- .../mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F | 4 +++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/components/mpas-ocean/src/Registry.xml b/components/mpas-ocean/src/Registry.xml index 1f5e65e47cdc..cca5a38d761a 100644 --- a/components/mpas-ocean/src/Registry.xml +++ b/components/mpas-ocean/src/Registry.xml @@ -1546,10 +1546,6 @@ description="Wavelenth of manufactured solution in the y direction" possible_values="Any positive real number" /> - domain % blocklist @@ -230,9 +229,12 @@ subroutine ocn_manufactured_solution_init(domain, err)!{{{ call mpas_pool_get_array(verticalMeshPool, 'restingThickness', restingThickness) H0 = restingThickness(1,1) + block => block % next enddo + omega = sqrt(H0*gravity * (kx**2+ky**2)) + err = 0 end subroutine ocn_manufactured_solution_init!}}} From fe944ef94ff7e56ef0abf8793267cc958a203039 Mon Sep 17 00:00:00 2001 From: Steven Brus Date: Thu, 25 May 2023 17:00:40 -0500 Subject: [PATCH 3/7] Add mpas_ocn_manufactured_solution.F to ocean.cmake --- components/mpas-ocean/src/ocean.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/components/mpas-ocean/src/ocean.cmake b/components/mpas-ocean/src/ocean.cmake index c1b71dcd5806..6bc035bb5925 100644 --- a/components/mpas-ocean/src/ocean.cmake +++ b/components/mpas-ocean/src/ocean.cmake @@ -105,6 +105,7 @@ list(APPEND RAW_SOURCES core_ocean/shared/mpas_ocn_wetting_drying.F core_ocean/shared/mpas_ocn_vel_tidal_potential.F core_ocean/shared/mpas_ocn_stokes_drift.F + core_ocean/shared/mpas_ocn_manufactured_solution.F ) set(OCEAN_DRIVER From 96824ae812ed31130f2d9b1865c1e627482a322d Mon Sep 17 00:00:00 2001 From: Steven Brus Date: Tue, 30 May 2023 09:47:38 -0500 Subject: [PATCH 4/7] Fix variable conflict --- .../src/shared/mpas_ocn_manufactured_solution.F | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F b/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F index c8fc0948f0e5..60ca2992306b 100644 --- a/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F +++ b/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F @@ -56,7 +56,7 @@ module ocn_manufactured_solution !-------------------------------------------------------------------- real (kind=RKIND) :: kx, ky - real (kind=RKIND) :: omega + real (kind=RKIND) :: ang_freq real (kind=RKIND) :: eta0 real (kind=RKIND) :: H0 @@ -111,10 +111,10 @@ subroutine ocn_manufactured_solution_tend_thick(tend, err)!{{{ kmin = minLevelCell(iCell) kmax = maxLevelCell(iCell) - phase = kx*xCell(iCell) + ky*yCell(iCell) - omega*time + phase = kx*xCell(iCell) + ky*yCell(iCell) - ang_freq*time do k = kmin, kmax tend(k,iCell) = tend(k,iCell) + eta0*(-H0*(kx + ky)*sin(phase) & - - omega*cos(phase) & + - ang_freq*cos(phase) & + eta0*(kx + ky)*cos(2.0_RKIND*phase)) enddo @@ -172,15 +172,15 @@ subroutine ocn_manufactured_solution_tend_vel(tend, err)!{{{ kmin = minLevelEdgeBot(iEdge) kmax = maxLevelEdgeTop(iEdge) - phase = kx*xEdge(iEdge) + ky*yEdge(iEdge) - omega*time + phase = kx*xEdge(iEdge) + ky*yEdge(iEdge) - ang_freq*time do k = kmin, kmax u = eta0*((-fEdge(iEdge) + gravity*kx)*cos(phase) & - + omega*sin(phase) & + + ang_freq*sin(phase) & - 0.5_RKIND*eta0*(kx + ky)*sin(2.0_RKIND*(phase))) v = eta0*((fEdge(iEdge) + gravity*ky)*cos(phase) & - + omega*sin(phase) & + + ang_freq*sin(phase) & - 0.5_RKIND*eta0*(kx + ky)*sin(2.0_RKIND*(phase))) tend(k,iEdge) = tend(k,iEdge) + u*cos(angleEdge(iEdge)) + v*sin(angleEdge(iEdge)) @@ -233,7 +233,7 @@ subroutine ocn_manufactured_solution_init(domain, err)!{{{ block => block % next enddo - omega = sqrt(H0*gravity * (kx**2+ky**2)) + ang_freq = sqrt(H0*gravity * (kx**2+ky**2)) err = 0 From e43bac5994ac56e34366ad55248d1ffdf9ccb087 Mon Sep 17 00:00:00 2001 From: Steven Brus Date: Fri, 9 Jun 2023 12:24:06 -0500 Subject: [PATCH 5/7] Fix Registy variable description typos --- components/mpas-ocean/src/Registry.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/mpas-ocean/src/Registry.xml b/components/mpas-ocean/src/Registry.xml index cca5a38d761a..1c6bb04f02d6 100644 --- a/components/mpas-ocean/src/Registry.xml +++ b/components/mpas-ocean/src/Registry.xml @@ -1535,15 +1535,15 @@ Date: Fri, 9 Jun 2023 12:30:21 -0500 Subject: [PATCH 6/7] Add review comments from Carolyn Begeman --- .../src/shared/mpas_ocn_manufactured_solution.F | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F b/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F index 60ca2992306b..e9ad6786103c 100644 --- a/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F +++ b/components/mpas-ocean/src/shared/mpas_ocn_manufactured_solution.F @@ -118,10 +118,10 @@ subroutine ocn_manufactured_solution_tend_thick(tend, err)!{{{ + eta0*(kx + ky)*cos(2.0_RKIND*phase)) enddo - err = 0 - enddo + err = 0 + !-------------------------------------------------------------------- end subroutine ocn_manufactured_solution_tend_thick!}}} @@ -186,10 +186,10 @@ subroutine ocn_manufactured_solution_tend_vel(tend, err)!{{{ tend(k,iEdge) = tend(k,iEdge) + u*cos(angleEdge(iEdge)) + v*sin(angleEdge(iEdge)) enddo - err = 0 - enddo + err = 0 + !-------------------------------------------------------------------- end subroutine ocn_manufactured_solution_tend_vel!}}} @@ -222,6 +222,10 @@ subroutine ocn_manufactured_solution_init(domain, err)!{{{ eta0 = config_manufactured_solution_amplitude + + ! This test case assumes that the restingThickness is horizontally uniform + ! and that only one vertical level is used so only one set of indices is + ! used here. block => domain % blocklist do while (associated(block)) call mpas_pool_get_subpool(block % structs, 'verticalMesh', verticalMeshPool) From 574f24e70bec54f506ef9c9ed1dd86b6171db869 Mon Sep 17 00:00:00 2001 From: Jon Wolfe Date: Mon, 12 Jun 2023 16:18:01 -0500 Subject: [PATCH 7/7] Update bld files to match Registry --- components/mpas-ocean/bld/build-namelist | 10 ++++ .../mpas-ocean/bld/build-namelist-group-list | 1 + .../mpas-ocean/bld/build-namelist-section | 9 +++ .../namelist_defaults_mpaso.xml | 6 ++ .../namelist_definition_mpaso.xml | 55 +++++++++++++++---- 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/components/mpas-ocean/bld/build-namelist b/components/mpas-ocean/bld/build-namelist index 90967685be19..8586681ecd73 100755 --- a/components/mpas-ocean/bld/build-namelist +++ b/components/mpas-ocean/bld/build-namelist @@ -988,6 +988,15 @@ add_default($nl, 'config_transport_tests_flow_id'); add_default($nl, 'config_vert_levels'); +######################################### +# Namelist group: manufactured_solution # +######################################### + +add_default($nl, 'config_use_manufactured_solution'); +add_default($nl, 'config_manufactured_solution_wavelength_x'); +add_default($nl, 'config_manufactured_solution_wavelength_y'); +add_default($nl, 'config_manufactured_solution_amplitude'); + ################################################ # Namelist group: tracer_forcing_activeTracers # ################################################ @@ -1757,6 +1766,7 @@ my @groups = qw(run_modes testing transport_tests init_mode_vert_levels + manufactured_solution tracer_forcing_activetracers tracer_forcing_debugtracers tracer_forcing_ecosystracers diff --git a/components/mpas-ocean/bld/build-namelist-group-list b/components/mpas-ocean/bld/build-namelist-group-list index 7d5b8cdd473f..11864939025d 100644 --- a/components/mpas-ocean/bld/build-namelist-group-list +++ b/components/mpas-ocean/bld/build-namelist-group-list @@ -39,6 +39,7 @@ my @groups = qw(run_modes testing transport_tests init_mode_vert_levels + manufactured_solution tracer_forcing_activetracers tracer_forcing_debugtracers tracer_forcing_ecosystracers diff --git a/components/mpas-ocean/bld/build-namelist-section b/components/mpas-ocean/bld/build-namelist-section index 8dcdab06d6e4..40787aa2d02a 100644 --- a/components/mpas-ocean/bld/build-namelist-section +++ b/components/mpas-ocean/bld/build-namelist-section @@ -507,6 +507,15 @@ add_default($nl, 'config_transport_tests_flow_id'); add_default($nl, 'config_vert_levels'); +######################################### +# Namelist group: manufactured_solution # +######################################### + +add_default($nl, 'config_use_manufactured_solution'); +add_default($nl, 'config_manufactured_solution_wavelength_x'); +add_default($nl, 'config_manufactured_solution_wavelength_y'); +add_default($nl, 'config_manufactured_solution_amplitude'); + ################################################ # Namelist group: tracer_forcing_activeTracers # ################################################ diff --git a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml index d2cbcaee3630..f1d6786b688f 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml @@ -532,6 +532,12 @@ -1 + +.false. +2000000.0 +2000000.0 +1 + .true. .true. diff --git a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml index 2b1b736252aa..e654b19269d0 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml @@ -17,7 +17,7 @@ An abbreviation of the fortran declaration for the variable. Valid declarations are: - char*n + char*n integer logical real @@ -31,7 +31,7 @@ input_pathname Only include this attribute to indicate that the variable contains the pathname of an input dataset that resides in the - CESM inputdata directory tree. + CESM inputdata directory tree. The recognized values are "abs" to indicate that an absolute pathname is required, or "rel:var_name" to indicate that the @@ -1748,6 +1748,14 @@ Valid values: any positive real, typically 5.0e-4 Default: Defined in namelist_defaults.xml + +The type of layerThickness averaging to use on the drag term. The standard MPAS-O approach is 'centered'. + +Valid values: 'harmonic-mean', 'centered' +Default: Defined in namelist_defaults.xml + + @@ -1802,14 +1810,6 @@ Valid values: O(1) Default: Defined in namelist_defaults.xml - -The type of layerThickness averaging to use on the drag term. The standard MPAS-O approach is 'centered'. - -Valid values: 'harmonic-mean', 'centered' -Default: Defined in namelist_defaults.xml - - @@ -2557,6 +2557,41 @@ Default: Defined in namelist_defaults.xml + + + +This flag includes additional thickness and velocity tendencies necessary for testing with a manufactured solution. + +Valid values: .true. or .false. +Default: Defined in namelist_defaults.xml + + + +Wavelength of manufactured solution in the x direction + +Valid values: Any positive real number +Default: Defined in namelist_defaults.xml + + + +Wavelength of manufactured solution in the y direction + +Valid values: Any positive real number +Default: Defined in namelist_defaults.xml + + + +Amplitude of the manufactured solution + +Valid values: Any positive real number +Default: Defined in namelist_defaults.xml + + +