From aa641dd3d5b3a068606527e882e4bc8601adf421 Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Sun, 8 Dec 2024 11:39:16 +0000 Subject: [PATCH 01/10] allow option for hydrostatic switch with non-hydrostatic gravity wave, and move "hydrostatic" tests to case studies --- .../mountain_hydrostatic.py | 305 ------------------ .../skamarock_klemp_hydrostatic.py | 204 ------------ .../skamarock_klemp_nonhydrostatic.py | 55 +++- .../test_compressible_euler_examples.py | 52 +-- 4 files changed, 52 insertions(+), 564 deletions(-) delete mode 100644 examples/compressible_euler/mountain_hydrostatic.py delete mode 100644 examples/compressible_euler/skamarock_klemp_hydrostatic.py diff --git a/examples/compressible_euler/mountain_hydrostatic.py b/examples/compressible_euler/mountain_hydrostatic.py deleted file mode 100644 index 1fc113a71..000000000 --- a/examples/compressible_euler/mountain_hydrostatic.py +++ /dev/null @@ -1,305 +0,0 @@ -""" -The hydrostatic 1 metre high mountain test case from Melvin et al, 2010: -``An inherently mass-conserving iterative semi-implicit semi-Lagrangian -discretization of the non-hydrostatic vertical-slice equations.'', QJRMS. - -This test describes a wave over a mountain in a hydrostatic atmosphere. - -The setup used here uses the order 1 finite elements. -""" - -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -from firedrake import ( - as_vector, VectorFunctionSpace, PeriodicIntervalMesh, ExtrudedMesh, - SpatialCoordinate, exp, pi, cos, Function, conditional, Mesh, Constant -) -from gusto import ( - Domain, IO, OutputParameters, SemiImplicitQuasiNewton, SSPRK3, DGUpwind, - TrapeziumRule, SUPGOptions, ZComponent, Perturbation, - CompressibleParameters, HydrostaticCompressibleEulerEquations, - CompressibleSolver, compressible_hydrostatic_balance, HydrostaticImbalance, - SpongeLayerParameters, MinKernel, MaxKernel, logger -) - -mountain_hydrostatic_defaults = { - 'ncolumns': 200, - 'nlayers': 120, - 'dt': 5.0, - 'tmax': 15000., - 'dumpfreq': 1500, - 'dirname': 'mountain_hydrostatic' -} - - -def mountain_hydrostatic( - ncolumns=mountain_hydrostatic_defaults['ncolumns'], - nlayers=mountain_hydrostatic_defaults['nlayers'], - dt=mountain_hydrostatic_defaults['dt'], - tmax=mountain_hydrostatic_defaults['tmax'], - dumpfreq=mountain_hydrostatic_defaults['dumpfreq'], - dirname=mountain_hydrostatic_defaults['dirname'] -): - - # ------------------------------------------------------------------------ # - # Parameters for test case - # ------------------------------------------------------------------------ # - - domain_width = 240000. # width of domain in x direction, in m - domain_height = 50000. # height of model top, in m - a = 10000. # scale width of mountain, in m - hm = 1. # height of mountain, in m - zh = 5000. # height at which mesh is no longer distorted, in m - Tsurf = 250. # temperature of surface, in K - initial_wind = 20.0 # initial horizontal wind, in m/s - sponge_depth = 20000.0 # depth of sponge layer, in m - g = 9.80665 # acceleration due to gravity, in m/s^2 - cp = 1004. # specific heat capacity at constant pressure - sponge_mu = 0.15 # parameter for strength of sponge layer, in J/kg/K - exner_surf = 1.0 # maximum value of Exner pressure at surface - max_iterations = 10 # maximum number of hydrostatic balance iterations - tolerance = 1e-7 # tolerance for hydrostatic balance iteration - - # ------------------------------------------------------------------------ # - # Our settings for this set up - # ------------------------------------------------------------------------ # - - element_order = 1 - u_eqn_type = 'vector_invariant_form' - - # ------------------------------------------------------------------------ # - # Set up model objects - # ------------------------------------------------------------------------ # - - # Domain - # Make normal extruded mesh which will be distorted to describe the mountain - base_mesh = PeriodicIntervalMesh(ncolumns, domain_width) - ext_mesh = ExtrudedMesh( - base_mesh, layers=nlayers, layer_height=domain_height/nlayers - ) - Vc = VectorFunctionSpace(ext_mesh, "DG", 2) - - # Describe the mountain - xc = domain_width/2. - x, z = SpatialCoordinate(ext_mesh) - zs = hm * a**2 / ((x - xc)**2 + a**2) - xexpr = as_vector( - [x, conditional(z < zh, z + cos(0.5 * pi * z / zh)**6 * zs, z)] - ) - - # Make new mesh - new_coords = Function(Vc).interpolate(xexpr) - mesh = Mesh(new_coords) - mesh._base_mesh = base_mesh # Force new mesh to inherit original base mesh - domain = Domain(mesh, dt, "CG", element_order) - - # Equation - parameters = CompressibleParameters(g=g, cp=cp) - sponge = SpongeLayerParameters( - H=domain_height, z_level=domain_height-sponge_depth, mubar=sponge_mu/dt - ) - eqns = HydrostaticCompressibleEulerEquations( - domain, parameters, sponge_options=sponge, u_transport_option=u_eqn_type - ) - - # I/O - output = OutputParameters( - dirname=dirname, dumpfreq=dumpfreq, dump_vtus=True, dump_nc=False - ) - diagnostic_fields = [ - ZComponent('u'), HydrostaticImbalance(eqns), - Perturbation('theta'), Perturbation('rho') - ] - io = IO(domain, output, diagnostic_fields=diagnostic_fields) - - # Transport schemes - theta_opts = SUPGOptions() - transported_fields = [ - TrapeziumRule(domain, "u"), - SSPRK3(domain, "rho"), - SSPRK3(domain, "theta", options=theta_opts) - ] - transport_methods = [ - DGUpwind(eqns, "u"), - DGUpwind(eqns, "rho"), - DGUpwind(eqns, "theta", ibp=theta_opts.ibp) - ] - - # Linear solver - params = {'mat_type': 'matfree', - 'ksp_type': 'preonly', - 'pc_type': 'python', - 'pc_python_type': 'firedrake.SCPC', - # Velocity mass operator is singular in the hydrostatic case. - # So for reconstruction, we eliminate rho into u - 'pc_sc_eliminate_fields': '1, 0', - 'condensed_field': {'ksp_type': 'fgmres', - 'ksp_rtol': 1.0e-8, - 'ksp_atol': 1.0e-8, - 'ksp_max_it': 100, - 'pc_type': 'gamg', - 'pc_gamg_sym_graph': True, - 'mg_levels': {'ksp_type': 'gmres', - 'ksp_max_it': 5, - 'pc_type': 'bjacobi', - 'sub_pc_type': 'ilu'}}} - - alpha = 0.51 # off-centering parameter - linear_solver = CompressibleSolver( - eqns, alpha, solver_parameters=params, - overwrite_solver_parameters=True - ) - - # Time stepper - stepper = SemiImplicitQuasiNewton( - eqns, io, transported_fields, transport_methods, - linear_solver=linear_solver, alpha=alpha - ) - - # ------------------------------------------------------------------------ # - # Initial conditions - # ------------------------------------------------------------------------ # - - u0 = stepper.fields("u") - rho0 = stepper.fields("rho") - theta0 = stepper.fields("theta") - - # spaces - Vt = domain.spaces("theta") - Vr = domain.spaces("DG") - - # Thermodynamic constants required for setting initial conditions - # and reference profiles - N = parameters.N - - # N^2 = (g/theta)dtheta/dz => dtheta/dz = theta N^2g => theta=theta_0exp(N^2gz) - x, z = SpatialCoordinate(mesh) - thetab = Tsurf*exp(N**2*z/g) - theta_b = Function(Vt).interpolate(thetab) - - # Calculate hydrostatic exner - exner = Function(Vr) - rho_b = Function(Vr) - - # Set up kernels to evaluate global minima and maxima of fields - min_kernel = MinKernel() - max_kernel = MaxKernel() - - # First solve hydrostatic balance that gives Exner = 1 at bottom boundary - # This gives us a guess for the top boundary condition - bottom_boundary = Constant(exner_surf, domain=mesh) - logger.info(f'Solving hydrostatic with bottom Exner of {exner_surf}') - compressible_hydrostatic_balance( - eqns, theta_b, rho_b, exner, top=False, exner_boundary=bottom_boundary - ) - - # Solve hydrostatic balance again, but now use minimum value from first - # solve as the *top* boundary condition for Exner - top_value = min_kernel.apply(exner) - top_boundary = Constant(top_value, domain=mesh) - logger.info(f'Solving hydrostatic with top Exner of {top_value}') - compressible_hydrostatic_balance( - eqns, theta_b, rho_b, exner, top=True, exner_boundary=top_boundary - ) - - max_bottom_value = max_kernel.apply(exner) - - # Now we iterate, adjusting the top boundary condition, until this gives - # a maximum value of 1.0 at the surface - lower_top_guess = 0.9*top_value - upper_top_guess = 1.2*top_value - for i in range(max_iterations): - # If max bottom Exner value is equal to desired value, stop iteration - if abs(max_bottom_value - exner_surf) < tolerance: - break - - # Make new guess by average of previous guesses - top_guess = 0.5*(lower_top_guess + upper_top_guess) - top_boundary.assign(top_guess) - - logger.info( - f'Solving hydrostatic balance iteration {i}, with top Exner value ' - + f'of {top_guess}' - ) - - compressible_hydrostatic_balance( - eqns, theta_b, rho_b, exner, top=True, exner_boundary=top_boundary - ) - - max_bottom_value = max_kernel.apply(exner) - - # Adjust guesses based on new value - if max_bottom_value < exner_surf: - lower_top_guess = top_guess - else: - upper_top_guess = top_guess - - logger.info(f'Final max bottom Exner value of {max_bottom_value}') - - # Perform a final solve to obtain hydrostatically balanced rho - compressible_hydrostatic_balance( - eqns, theta_b, rho_b, exner, top=True, exner_boundary=top_boundary, - solve_for_rho=True - ) - - theta0.assign(theta_b) - rho0.assign(rho_b) - u0.project(as_vector([initial_wind, 0.0]), bcs=eqns.bcs['u']) - - stepper.set_reference_profiles([('rho', rho_b), ('theta', theta_b)]) - - # ------------------------------------------------------------------------ # - # Run - # ------------------------------------------------------------------------ # - - stepper.run(t=0, tmax=tmax) - -# ---------------------------------------------------------------------------- # -# MAIN -# ---------------------------------------------------------------------------- # - - -if __name__ == "__main__": - - parser = ArgumentParser( - description=__doc__, - formatter_class=ArgumentDefaultsHelpFormatter - ) - parser.add_argument( - '--ncolumns', - help="The number of columns in the vertical slice mesh.", - type=int, - default=mountain_hydrostatic_defaults['ncolumns'] - ) - parser.add_argument( - '--nlayers', - help="The number of layers for the mesh.", - type=int, - default=mountain_hydrostatic_defaults['nlayers'] - ) - parser.add_argument( - '--dt', - help="The time step in seconds.", - type=float, - default=mountain_hydrostatic_defaults['dt'] - ) - parser.add_argument( - "--tmax", - help="The end time for the simulation in seconds.", - type=float, - default=mountain_hydrostatic_defaults['tmax'] - ) - parser.add_argument( - '--dumpfreq', - help="The frequency at which to dump field output.", - type=int, - default=mountain_hydrostatic_defaults['dumpfreq'] - ) - parser.add_argument( - '--dirname', - help="The name of the directory to write to.", - type=str, - default=mountain_hydrostatic_defaults['dirname'] - ) - args, unknown = parser.parse_known_args() - - mountain_hydrostatic(**vars(args)) diff --git a/examples/compressible_euler/skamarock_klemp_hydrostatic.py b/examples/compressible_euler/skamarock_klemp_hydrostatic.py deleted file mode 100644 index f75ad9b10..000000000 --- a/examples/compressible_euler/skamarock_klemp_hydrostatic.py +++ /dev/null @@ -1,204 +0,0 @@ -""" -This example uses the hydrostatic compressible Euler equations to solve the -vertical slice gravity wave test case of Skamarock and Klemp, 1994: -``Efficiency and Accuracy of the Klemp-Wilhelmson Time-Splitting Technique'', -MWR. - -Potential temperature is transported using SUPG, and the degree 1 elements are -used. This also uses a mesh which is one cell thick in the y-direction. -""" - -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -from firedrake import ( - as_vector, SpatialCoordinate, PeriodicRectangleMesh, ExtrudedMesh, exp, sin, - Function, pi -) -from gusto import ( - Domain, IO, OutputParameters, SemiImplicitQuasiNewton, SSPRK3, DGUpwind, - TrapeziumRule, SUPGOptions, CourantNumber, Perturbation, - CompressibleParameters, HydrostaticCompressibleEulerEquations, - CompressibleSolver, compressible_hydrostatic_balance -) - -skamarock_klemp_hydrostatic_defaults = { - 'ncolumns': 150, - 'nlayers': 10, - 'dt': 25.0, - 'tmax': 60000., - 'dumpfreq': 1200, - 'dirname': 'skamarock_klemp_hydrostatic' -} - - -def skamarock_klemp_hydrostatic( - ncolumns=skamarock_klemp_hydrostatic_defaults['ncolumns'], - nlayers=skamarock_klemp_hydrostatic_defaults['nlayers'], - dt=skamarock_klemp_hydrostatic_defaults['dt'], - tmax=skamarock_klemp_hydrostatic_defaults['tmax'], - dumpfreq=skamarock_klemp_hydrostatic_defaults['dumpfreq'], - dirname=skamarock_klemp_hydrostatic_defaults['dirname'] -): - - # ------------------------------------------------------------------------ # - # Test case parameters - # ------------------------------------------------------------------------ # - - domain_width = 6.0e6 # Width of domain in x direction (m) - domain_length = 1.0e4 # Length of domain in y direction (m) - domain_height = 1.0e4 # Height of domain (m) - Tsurf = 300. # Temperature at surface (K) - wind_initial = 20. # Initial wind in x direction (m/s) - pert_width = 5.0e3 # Width parameter of perturbation (m) - deltaTheta = 1.0e-2 # Magnitude of theta perturbation (K) - N = 0.01 # Brunt-Vaisala frequency (1/s) - Omega = 0.5e-4 # Planetary rotation rate (1/s) - pressure_gradient_y = -1.0e-4*20 # Prescribed force in y direction (m/s^2) - - # ------------------------------------------------------------------------ # - # Our settings for this set up - # ------------------------------------------------------------------------ # - - element_order = 1 - - # ------------------------------------------------------------------------ # - # Set up model objects - # ------------------------------------------------------------------------ # - - # Domain -- 3D volume mesh - base_mesh = PeriodicRectangleMesh( - ncolumns, 1, domain_width, domain_length, quadrilateral=True - ) - mesh = ExtrudedMesh(base_mesh, nlayers, layer_height=domain_height/nlayers) - domain = Domain(mesh, dt, "RTCF", element_order) - - # Equation - parameters = CompressibleParameters(Omega=Omega) - balanced_pg = as_vector((0., pressure_gradient_y, 0.)) - eqns = HydrostaticCompressibleEulerEquations( - domain, parameters, extra_terms=[("u", balanced_pg)] - ) - - # I/O - output = OutputParameters( - dirname=dirname, dumpfreq=dumpfreq, dump_vtus=True, dump_nc=False, - dumplist=['u'], - ) - diagnostic_fields = [CourantNumber(), Perturbation('theta'), Perturbation('rho')] - io = IO(domain, output, diagnostic_fields=diagnostic_fields) - - # Transport schemes - theta_opts = SUPGOptions() - transported_fields = [ - TrapeziumRule(domain, "u"), - SSPRK3(domain, "rho"), - SSPRK3(domain, "theta", options=theta_opts) - ] - transport_methods = [ - DGUpwind(eqns, "u"), - DGUpwind(eqns, "rho"), - DGUpwind(eqns, "theta", ibp=theta_opts.ibp) - ] - - # Linear solver - linear_solver = CompressibleSolver(eqns) - - # Time stepper - stepper = SemiImplicitQuasiNewton( - eqns, io, transported_fields, transport_methods, - linear_solver=linear_solver - ) - - # ------------------------------------------------------------------------ # - # Initial conditions - # ------------------------------------------------------------------------ # - - u0 = stepper.fields("u") - rho0 = stepper.fields("rho") - theta0 = stepper.fields("theta") - - # spaces - Vt = domain.spaces("theta") - Vr = domain.spaces("DG") - - # Thermodynamic constants required for setting initial conditions - # and reference profiles - g = parameters.g - - x, _, z = SpatialCoordinate(mesh) - - # N^2 = (g/theta)dtheta/dz => dtheta/dz = theta N^2g => theta=theta_0exp(N^2gz) - thetab = Tsurf*exp(N**2*z/g) - - theta_b = Function(Vt).interpolate(thetab) - rho_b = Function(Vr) - - theta_pert = ( - deltaTheta * sin(pi*z/domain_height) - / (1 + (x - domain_width/2)**2 / pert_width**2) - ) - theta0.interpolate(theta_b + theta_pert) - - compressible_hydrostatic_balance(eqns, theta_b, rho_b, solve_for_rho=True) - - rho0.assign(rho_b) - u0.project(as_vector([wind_initial, 0.0, 0.0])) - - stepper.set_reference_profiles([('rho', rho_b), - ('theta', theta_b)]) - - # ------------------------------------------------------------------------ # - # Run - # ------------------------------------------------------------------------ # - - stepper.run(t=0, tmax=tmax) - -# ---------------------------------------------------------------------------- # -# MAIN -# ---------------------------------------------------------------------------- # - - -if __name__ == "__main__": - - parser = ArgumentParser( - description=__doc__, - formatter_class=ArgumentDefaultsHelpFormatter - ) - parser.add_argument( - '--ncolumns', - help="The number of columns in the vertical slice mesh.", - type=int, - default=skamarock_klemp_hydrostatic_defaults['ncolumns'] - ) - parser.add_argument( - '--nlayers', - help="The number of layers for the mesh.", - type=int, - default=skamarock_klemp_hydrostatic_defaults['nlayers'] - ) - parser.add_argument( - '--dt', - help="The time step in seconds.", - type=float, - default=skamarock_klemp_hydrostatic_defaults['dt'] - ) - parser.add_argument( - "--tmax", - help="The end time for the simulation in seconds.", - type=float, - default=skamarock_klemp_hydrostatic_defaults['tmax'] - ) - parser.add_argument( - '--dumpfreq', - help="The frequency at which to dump field output.", - type=int, - default=skamarock_klemp_hydrostatic_defaults['dumpfreq'] - ) - parser.add_argument( - '--dirname', - help="The name of the directory to write to.", - type=str, - default=skamarock_klemp_hydrostatic_defaults['dirname'] - ) - args, unknown = parser.parse_known_args() - - skamarock_klemp_hydrostatic(**vars(args)) diff --git a/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py b/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py index 6a6700650..2d8875a46 100644 --- a/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py +++ b/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py @@ -4,6 +4,10 @@ ``Efficiency and Accuracy of the Klemp-Wilhelmson Time-Splitting Technique'', MWR. +The domain is smaller than the "hydrostatic" gravity wave test, so that there +is difference between the hydrostatic and non-hydrostatic solutions. The test +can be run with and without a hydrostatic switch. + Potential temperature is transported using SUPG, and the degree 1 elements are used. """ @@ -19,19 +23,19 @@ import numpy as np from gusto import ( Domain, IO, OutputParameters, SemiImplicitQuasiNewton, SSPRK3, DGUpwind, - SUPGOptions, CourantNumber, Perturbation, Gradient, - CompressibleParameters, CompressibleEulerEquations, CompressibleSolver, - compressible_hydrostatic_balance, logger, RichardsonNumber, - RungeKuttaFormulation + logger, SUPGOptions, Perturbation, CompressibleParameters, + CompressibleEulerEquations, HydrostaticCompressibleEulerEquations, + compressible_hydrostatic_balance, RungeKuttaFormulation, CompressibleSolver ) skamarock_klemp_nonhydrostatic_defaults = { 'ncolumns': 150, 'nlayers': 10, 'dt': 6.0, - 'tmax': 3600., - 'dumpfreq': 300, - 'dirname': 'skamarock_klemp_nonhydrostatic' + 'tmax': 3000., + 'dumpfreq': 250, + 'dirname': 'skamarock_klemp_nonhydrostatic', + 'hydrostatic': False } @@ -41,7 +45,8 @@ def skamarock_klemp_nonhydrostatic( dt=skamarock_klemp_nonhydrostatic_defaults['dt'], tmax=skamarock_klemp_nonhydrostatic_defaults['tmax'], dumpfreq=skamarock_klemp_nonhydrostatic_defaults['dumpfreq'], - dirname=skamarock_klemp_nonhydrostatic_defaults['dirname'] + dirname=skamarock_klemp_nonhydrostatic_defaults['dirname'], + hydrostatic=skamarock_klemp_nonhydrostatic_defaults['hydrostatic'] ): # ------------------------------------------------------------------------ # @@ -73,18 +78,25 @@ def skamarock_klemp_nonhydrostatic( # Equation parameters = CompressibleParameters() - eqns = CompressibleEulerEquations(domain, parameters) + if hydrostatic: + eqns = HydrostaticCompressibleEulerEquations(domain, parameters) + else: + eqns = CompressibleEulerEquations(domain, parameters) # I/O points_x = np.linspace(0., domain_width, 100) points_z = [domain_height/2.] points = np.array([p for p in itertools.product(points_x, points_z)]) + # Adjust default directory name + if hydrostatic and dirname == skamarock_klemp_nonhydrostatic_defaults['dirname']: + dirname = f'hyd_switch_{dirname}' + # Dumping point data using legacy PointDataOutput is not supported in parallel if COMM_WORLD.size == 1: output = OutputParameters( dirname=dirname, dumpfreq=dumpfreq, pddumpfreq=dumpfreq, - dump_vtus=True, dump_nc=False, + dump_vtus=False, dump_nc=True, point_data=[('theta_perturbation', points)], ) else: @@ -94,21 +106,20 @@ def skamarock_klemp_nonhydrostatic( ) output = OutputParameters( dirname=dirname, dumpfreq=dumpfreq, pddumpfreq=dumpfreq, - dump_vtus=True, dump_nc=True, + dump_vtus=False, dump_nc=True, ) - diagnostic_fields = [ - CourantNumber(), Gradient('u'), Perturbation('theta'), - Gradient('theta_perturbation'), Perturbation('rho'), - RichardsonNumber('theta', parameters.g/Tsurf), Gradient('theta') - ] + diagnostic_fields = [Perturbation('theta')] io = IO(domain, output, diagnostic_fields=diagnostic_fields) # Transport schemes theta_opts = SUPGOptions() transported_fields = [ SSPRK3(domain, "u", subcycle_by_courant=0.25), - SSPRK3(domain, "rho", subcycle_by_courant=0.25, rk_formulation=RungeKuttaFormulation.linear), + SSPRK3( + domain, "rho", subcycle_by_courant=0.25, + rk_formulation=RungeKuttaFormulation.linear + ), SSPRK3(domain, "theta", subcycle_by_courant=0.25, options=theta_opts) ] transport_methods = [ @@ -216,6 +227,16 @@ def skamarock_klemp_nonhydrostatic( type=str, default=skamarock_klemp_nonhydrostatic_defaults['dirname'] ) + parser.add_argument( + '--hydrostatic', + help=( + "Whether to use the hydrostatic switch to emulate the " + + "hydrostatic equations. Otherwise use the full non-hydrostatic" + + "equations." + ), + action="store_true", + default=skamarock_klemp_nonhydrostatic_defaults['hydrostatic'] + ) args, unknown = parser.parse_known_args() skamarock_klemp_nonhydrostatic(**vars(args)) diff --git a/examples/compressible_euler/test_compressible_euler_examples.py b/examples/compressible_euler/test_compressible_euler_examples.py index 384824e12..b060f2403 100644 --- a/examples/compressible_euler/test_compressible_euler_examples.py +++ b/examples/compressible_euler/test_compressible_euler_examples.py @@ -46,66 +46,42 @@ def test_dry_bryan_fritsch_parallel(): test_dry_bryan_fritsch() -# Hydrostatic equations not currently working -@pytest.mark.xfail -def test_mountain_hydrostatic(): - from mountain_hydrostatic import mountain_hydrostatic - test_name = 'mountain_hydrostatic' - mountain_hydrostatic( - ncolumns=20, - nlayers=10, - dt=5.0, - tmax=50.0, - dumpfreq=10, - dirname=make_dirname(test_name) - ) - - -# Hydrostatic equations not currently working -@pytest.mark.xfail -@pytest.mark.parallel(nprocs=4) -def test_mountain_hydrostatic_parallel(): - test_mountain_hydrostatic() - - -# Hydrostatic equations not currently working -@pytest.mark.xfail -def test_skamarock_klemp_hydrostatic(): - from skamarock_klemp_hydrostatic import skamarock_klemp_hydrostatic - test_name = 'skamarock_klemp_hydrostatic' - skamarock_klemp_hydrostatic( +def test_skamarock_klemp_nonhydrostatic(): + from skamarock_klemp_nonhydrostatic import skamarock_klemp_nonhydrostatic + test_name = 'skamarock_klemp_nonhydrostatic' + skamarock_klemp_nonhydrostatic( ncolumns=30, nlayers=5, dt=6.0, tmax=60.0, dumpfreq=10, - dirname=make_dirname(test_name) + dirname=make_dirname(test_name), + hydrostatic=False ) -# Hydrostatic equations not currently working -@pytest.mark.xfail @pytest.mark.parallel(nprocs=2) -def test_skamarock_klemp_hydrostatic_parallel(): - test_skamarock_klemp_hydrostatic() +def test_skamarock_klemp_nonhydrostatic_parallel(): + test_skamarock_klemp_nonhydrostatic() -def test_skamarock_klemp_nonhydrostatic(): +def test_hyd_switch_skamarock_klemp_nonhydrostatic(): from skamarock_klemp_nonhydrostatic import skamarock_klemp_nonhydrostatic - test_name = 'skamarock_klemp_nonhydrostatic' + test_name = 'hyd_switch_skamarock_klemp_nonhydrostatic' skamarock_klemp_nonhydrostatic( ncolumns=30, nlayers=5, dt=6.0, tmax=60.0, dumpfreq=10, - dirname=make_dirname(test_name) + dirname=make_dirname(test_name), + hydrostatic=True ) @pytest.mark.parallel(nprocs=2) -def test_skamarock_klemp_nonhydrostatic_parallel(): - test_skamarock_klemp_nonhydrostatic() +def test_hyd_switch_skamarock_klemp_nonhydrostatic_parallel(): + test_hyd_switch_skamarock_klemp_nonhydrostatic() def test_straka_bubble(): From 533ce0241c74fc59d4bf85d2f357d5f8e32b9257 Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Sun, 8 Dec 2024 21:28:09 +0000 Subject: [PATCH 02/10] add schaer mountain, update gravity wave plot and implement spin up --- .../compressible_euler/schaer_mountain.py | 284 ++++++++++++++++++ .../schaer_mountain_initial.png | Bin 0 -> 17505 bytes .../skamarock_klemp_nonhydrostatic_final.png | Bin 119975 -> 114349 bytes gusto/solvers/linear_solvers.py | 63 ++-- .../semi_implicit_quasi_newton.py | 21 +- .../plot_schaer_mountain.py | 198 ++++++++++++ .../plot_skamarock_klemp_nonhydrostatic.py | 24 +- 7 files changed, 544 insertions(+), 46 deletions(-) create mode 100644 examples/compressible_euler/schaer_mountain.py create mode 100644 figures/compressible_euler/schaer_mountain_initial.png create mode 100644 plotting/compressible_euler/plot_schaer_mountain.py diff --git a/examples/compressible_euler/schaer_mountain.py b/examples/compressible_euler/schaer_mountain.py new file mode 100644 index 000000000..82c10f4f9 --- /dev/null +++ b/examples/compressible_euler/schaer_mountain.py @@ -0,0 +1,284 @@ +""" +The Schär mountain test case of Schär et al, 2002: +``A new terrain-following vertical coordinate formulation for atmospheric +prediction models.'', MWR. + +This test describes a wave over a set of idealised mountains, testing how the +discretisation handles orography. + +The setup used here uses the order 1 finite elements. +""" +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter + +from firedrake import ( + as_vector, VectorFunctionSpace, PeriodicIntervalMesh, ExtrudedMesh, + SpatialCoordinate, exp, pi, cos, Function, conditional, Mesh, Constant +) +from gusto import ( + Domain, CompressibleParameters, CompressibleSolver, logger, + OutputParameters, IO, SSPRK3, DGUpwind, SemiImplicitQuasiNewton, + compressible_hydrostatic_balance, SpongeLayerParameters, Exner, ZComponent, + Perturbation, SUPGOptions, TrapeziumRule, MaxKernel, MinKernel, + CompressibleEulerEquations +) + +schaer_mountain_defaults = { + 'ncolumns': 60, + 'nlayers': 30, + 'dt': 8.0, + 'tmax': 5*60*60., # 5 hours + 'dumpfreq': 2250, # dump at 5 hours with default settings + 'dirname': 'schaer_mountain' +} + + +def schaer_mountain( + ncolumns=schaer_mountain_defaults['ncolumns'], + nlayers=schaer_mountain_defaults['nlayers'], + dt=schaer_mountain_defaults['dt'], + tmax=schaer_mountain_defaults['tmax'], + dumpfreq=schaer_mountain_defaults['dumpfreq'], + dirname=schaer_mountain_defaults['dirname'] +): + + # ------------------------------------------------------------------------ # + # Parameters for test case + # ------------------------------------------------------------------------ # + + domain_width = 100000. # width of domain in x direction, in m + domain_height = 30000. # height of model top, in m + a = 5000. # scale width of mountain profile, in m + lamda = 4000. # scale width of individual mountains, in m + hm = 250. # height of mountain, in m + zh = 5000. # height at which mesh is no longer distorted, in m + Tsurf = 288. # temperature of surface, in K + initial_wind = 10.0 # initial horizontal wind, in m/s + sponge_depth = 10000.0 # depth of sponge layer, in m + g = 9.80665 # acceleration due to gravity, in m/s^2 + cp = 1004. # specific heat capacity at constant pressure + sponge_mu = 1.2 # strength of sponge layer + exner_surf = 1.0 # maximum value of Exner pressure at surface + max_iterations = 10 # maximum number of hydrostatic balance iterations + tolerance = 1e-7 # tolerance for hydrostatic balance iteration + + # ------------------------------------------------------------------------ # + # Our settings for this set up + # ------------------------------------------------------------------------ # + element_order = 1 + u_eqn_type = 'vector_invariant_form' + + # ------------------------------------------------------------------------ # + # Set up model objects + # ------------------------------------------------------------------------ # + + # Domain + # Make normal extruded mesh which will be distorted to describe the mountain + base_mesh = PeriodicIntervalMesh(ncolumns, domain_width) + ext_mesh = ExtrudedMesh( + base_mesh, layers=nlayers, layer_height=domain_height/nlayers + ) + Vc = VectorFunctionSpace(ext_mesh, "DG", 2) + + # Describe the mountain + xc = domain_width/2. + x, z = SpatialCoordinate(ext_mesh) + zs = hm * exp(-((x - xc)/a)**2) * (cos(pi*(x - xc)/lamda))**2 + xexpr = as_vector( + [x, conditional(z < zh, z + cos(0.5 * pi * z / zh)**6 * zs, z)] + ) + + # Make new mesh + new_coords = Function(Vc).interpolate(xexpr) + mesh = Mesh(new_coords) + mesh._base_mesh = base_mesh # Force new mesh to inherit original base mesh + domain = Domain(mesh, dt, "CG", element_order) + + # Equation + parameters = CompressibleParameters(g=g, cp=cp) + sponge = SpongeLayerParameters( + H=domain_height, z_level=domain_height-sponge_depth, mubar=sponge_mu/dt + ) + eqns = CompressibleEulerEquations( + domain, parameters, sponge_options=sponge, u_transport_option=u_eqn_type + ) + + # I/O + output = OutputParameters( + dirname=dirname, dumpfreq=dumpfreq, dump_vtus=False, dump_nc=True + ) + diagnostic_fields = [ + Exner(parameters), ZComponent('u'), Perturbation('theta'), + Perturbation('rho') + ] + io = IO(domain, output, diagnostic_fields=diagnostic_fields) + + # Transport schemes + theta_opts = SUPGOptions() + transported_fields = [ + TrapeziumRule(domain, "u"), + SSPRK3(domain, "rho"), + SSPRK3(domain, "theta", options=theta_opts) + ] + transport_methods = [ + DGUpwind(eqns, "u"), + DGUpwind(eqns, "rho"), + DGUpwind(eqns, "theta", ibp=theta_opts.ibp) + ] + + # Linear solver + linear_solver = CompressibleSolver(eqns) + + # Time stepper + stepper = SemiImplicitQuasiNewton( + eqns, io, transported_fields, transport_methods, + linear_solver=linear_solver, spinup_steps=5 + ) + + # ------------------------------------------------------------------------ # + # Initial conditions + # ------------------------------------------------------------------------ # + + u0 = stepper.fields("u") + rho0 = stepper.fields("rho") + theta0 = stepper.fields("theta") + + # spaces + Vt = domain.spaces("theta") + Vr = domain.spaces("DG") + + # Thermodynamic constants required for setting initial conditions + # and reference profiles + N = parameters.N + + # N^2 = (g/theta)dtheta/dz => dtheta/dz = theta N^2g => theta=theta_0exp(N^2gz) + x, z = SpatialCoordinate(mesh) + thetab = Tsurf*exp(N**2*z/g) + theta_b = Function(Vt).interpolate(thetab) + + # Calculate hydrostatic exner + exner = Function(Vr) + rho_b = Function(Vr) + + # Set up kernels to evaluate global minima and maxima of fields + min_kernel = MinKernel() + max_kernel = MaxKernel() + + # First solve hydrostatic balance that gives Exner = 1 at bottom boundary + # This gives us a guess for the top boundary condition + bottom_boundary = Constant(exner_surf, domain=mesh) + logger.info(f'Solving hydrostatic with bottom Exner of {exner_surf}') + compressible_hydrostatic_balance( + eqns, theta_b, rho_b, exner, top=False, exner_boundary=bottom_boundary + ) + + # Solve hydrostatic balance again, but now use minimum value from first + # solve as the *top* boundary condition for Exner + top_value = min_kernel.apply(exner) + top_boundary = Constant(top_value, domain=mesh) + logger.info(f'Solving hydrostatic with top Exner of {top_value}') + compressible_hydrostatic_balance( + eqns, theta_b, rho_b, exner, top=True, exner_boundary=top_boundary + ) + + max_bottom_value = max_kernel.apply(exner) + + # Now we iterate, adjusting the top boundary condition, until this gives + # a maximum value of 1.0 at the surface + lower_top_guess = 0.9*top_value + upper_top_guess = 1.2*top_value + for i in range(max_iterations): + # If max bottom Exner value is equal to desired value, stop iteration + if abs(max_bottom_value - exner_surf) < tolerance: + break + + # Make new guess by average of previous guesses + top_guess = 0.5*(lower_top_guess + upper_top_guess) + top_boundary.assign(top_guess) + + logger.info( + f'Solving hydrostatic balance iteration {i}, with top Exner value ' + + f'of {top_guess}' + ) + + compressible_hydrostatic_balance( + eqns, theta_b, rho_b, exner, top=True, exner_boundary=top_boundary + ) + + max_bottom_value = max_kernel.apply(exner) + + # Adjust guesses based on new value + if max_bottom_value < exner_surf: + lower_top_guess = top_guess + else: + upper_top_guess = top_guess + + logger.info(f'Final max bottom Exner value of {max_bottom_value}') + + # Perform a final solve to obtain hydrostatically balanced rho + compressible_hydrostatic_balance( + eqns, theta_b, rho_b, exner, top=True, exner_boundary=top_boundary, + solve_for_rho=True + ) + + theta0.assign(theta_b) + rho0.assign(rho_b) + u0.project(as_vector([initial_wind, 0.0]), bcs=eqns.bcs['u']) + + stepper.set_reference_profiles([('rho', rho_b), ('theta', theta_b)]) + + # ------------------------------------------------------------------------ # + # Run + # ------------------------------------------------------------------------ # + + stepper.run(t=0, tmax=tmax) + +# ---------------------------------------------------------------------------- # +# MAIN +# ---------------------------------------------------------------------------- # + + +if __name__ == "__main__": + + parser = ArgumentParser( + description=__doc__, + formatter_class=ArgumentDefaultsHelpFormatter + ) + parser.add_argument( + '--ncolumns', + help="The number of columns in the vertical slice mesh.", + type=int, + default=schaer_mountain_defaults['ncolumns'] + ) + parser.add_argument( + '--nlayers', + help="The number of layers for the mesh.", + type=int, + default=schaer_mountain_defaults['nlayers'] + ) + parser.add_argument( + '--dt', + help="The time step in seconds.", + type=float, + default=schaer_mountain_defaults['dt'] + ) + parser.add_argument( + "--tmax", + help="The end time for the simulation in seconds.", + type=float, + default=schaer_mountain_defaults['tmax'] + ) + parser.add_argument( + '--dumpfreq', + help="The frequency at which to dump field output.", + type=int, + default=schaer_mountain_defaults['dumpfreq'] + ) + parser.add_argument( + '--dirname', + help="The name of the directory to write to.", + type=str, + default=schaer_mountain_defaults['dirname'] + ) + args, unknown = parser.parse_known_args() + + schaer_mountain(**vars(args)) diff --git a/figures/compressible_euler/schaer_mountain_initial.png b/figures/compressible_euler/schaer_mountain_initial.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7940bc234e1fd1f56959cea59fa333f12d777f GIT binary patch literal 17505 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 literal 0 HcmV?d00001 diff --git a/figures/compressible_euler/skamarock_klemp_nonhydrostatic_final.png b/figures/compressible_euler/skamarock_klemp_nonhydrostatic_final.png index c1187a1cd7f22086b7d60ff56897cdd3ba0c06d6..e76a825826f2cf9290d91e288395a8746c5deff1 100644 GIT binary patch literal 114349 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%0DHT&I|AR4m;A#{U4bGz(*LWi!Y~1Tq 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

uTqFO3T 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%0D83gu#OW+p;HxPU9FNUJvKcrP|}7%?{FUm_b? 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 I;< 0: @@ -526,7 +541,7 @@ def __init__(self, equation, alpha): map_if_false=drop) # the explicit forms are multiplied by (1-alpha) and moved to the rhs - L_explicit = -(1-alpha)*dt*residual.label_map( + L_explicit = -(Constant(1)-alpha)*dt*residual.label_map( lambda t: any(t.has_label(time_derivative, hydrostatic, *implicit_terms, return_tuple=True)), diff --git a/plotting/compressible_euler/plot_schaer_mountain.py b/plotting/compressible_euler/plot_schaer_mountain.py new file mode 100644 index 000000000..99172f3cc --- /dev/null +++ b/plotting/compressible_euler/plot_schaer_mountain.py @@ -0,0 +1,198 @@ +""" +Plots the Schär mountain test case. + +This plots: +(a) w @ t = 5 hr, (b) theta perturbation @ t = 5 hr +""" +from os.path import abspath, dirname +import matplotlib.pyplot as plt +from netCDF4 import Dataset +import numpy as np +import pandas as pd +from tomplot import ( + set_tomplot_style, tomplot_cmap, plot_contoured_field, + add_colorbar_ax, tomplot_field_title, tomplot_contours, + extract_gusto_coords, extract_gusto_field, reshape_gusto_data +) + +test = 'schaer_mountain' + +# ---------------------------------------------------------------------------- # +# Directory for results and plots +# ---------------------------------------------------------------------------- # +# When copying this example these paths need editing, which will usually involve +# removing the abspath part to set directory paths relative to this file +results_file_name = f'{abspath(dirname(__file__))}/../../results/{test}/field_output.nc' +plot_stem = f'{abspath(dirname(__file__))}/../../figures/compressible_euler/{test}' + +# ---------------------------------------------------------------------------- # +# Final plot details +# ---------------------------------------------------------------------------- # +final_field_names = ['u_z', 'theta_perturbation', 'u_z', 'theta_perturbation'] +final_colour_schemes = ['PiYG', 'RdBu_r', 'PiYG', 'RdBu_r'] +final_field_labels = [ + r'$w$ (m s$^{-1}$)', r'$\Delta\theta$ (K)', + r'$w$ (m s$^{-1}$)', r'$\Delta\theta$ (K)' +] +final_contours = [ + np.linspace(-0.04, 0.04, 21), np.linspace(-0.025, 0.025, 21), + np.linspace(-0.04, 0.04, 21), np.linspace(-0.025, 0.025, 21) +] + +# ---------------------------------------------------------------------------- # +# Initial plot details +# ---------------------------------------------------------------------------- # +initial_field_names = ['Exner', 'theta'] +initial_colour_schemes = ['PuBu', 'Reds'] +initial_field_labels = [r'$\Pi$', r'$\theta$ (K)'] + +# ---------------------------------------------------------------------------- # +# General options +# ---------------------------------------------------------------------------- # +contour_method = 'contour' # Need to use this method to show mountains! +xlims = [0., 100.] +ylims = [0., 30.] + +# Things that are likely the same for all plots -------------------------------- +set_tomplot_style() +data_file = Dataset(results_file_name, 'r') + +# ---------------------------------------------------------------------------- # +# INITIAL PLOTTING +# ---------------------------------------------------------------------------- # + +fig, axarray = plt.subplots(1, 2, figsize=(18, 6), sharex='all', sharey='all') +time_idx = 0 + +for i, (ax, field_name, colour_scheme, field_label) in \ + enumerate(zip( + axarray.flatten(), initial_field_names, initial_colour_schemes, + initial_field_labels + )): + + # Data extraction ---------------------------------------------------------- + field_data = extract_gusto_field(data_file, field_name, time_idx=time_idx) + coords_X, coords_Y = extract_gusto_coords(data_file, field_name) + field_data, coords_X, coords_Y = \ + reshape_gusto_data(field_data, coords_X, coords_Y) + time = data_file['time'][time_idx] + + contours = tomplot_contours(field_data) + cmap, lines = tomplot_cmap(contours, colour_scheme) + + # Plot data ---------------------------------------------------------------- + cf, _ = plot_contoured_field( + ax, coords_X, coords_Y, field_data, contour_method, contours, + cmap=cmap, line_contours=lines + ) + + add_colorbar_ax(ax, cf, field_label, location='bottom') + tomplot_field_title(ax, None, minmax=True, field_data=field_data) + + # Labels ------------------------------------------------------------------- + if i == 0: + ax.set_ylabel(r'$z$ (km)', labelpad=-20) + ax.set_ylim(ylims) + ax.set_yticks(ylims) + ax.set_yticklabels(ylims) + + ax.set_xlabel(r'$x$ (km)', labelpad=-10) + ax.set_xlim(xlims) + ax.set_xticks(xlims) + ax.set_xticklabels(xlims) + +# Save figure ------------------------------------------------------------------ +fig.suptitle(f't = {time:.1f} s') +fig.subplots_adjust(wspace=0.25) +plot_name = f'{plot_stem}_initial.png' +print(f'Saving figure to {plot_name}') +fig.savefig(plot_name, bbox_inches='tight') +plt.close() + +# ---------------------------------------------------------------------------- # +# FINAL PLOTTING +# ---------------------------------------------------------------------------- # +xlims_zoom = [30., 70.] +ylims_zoom = [0., 12.] + +fig, axarray = plt.subplots(2, 2, figsize=(18, 12), sharex='row', sharey='row') +time_idx = -1 + +for i, (ax, field_name, colour_scheme, field_label, contours) in \ + enumerate(zip( + axarray.flatten(), final_field_names, final_colour_schemes, + final_field_labels, final_contours + )): + + # Data extraction ---------------------------------------------------------- + field_data = extract_gusto_field(data_file, field_name, time_idx=time_idx) + coords_X, coords_Y = extract_gusto_coords(data_file, field_name) + time = data_file['time'][time_idx] + + # Filter data for panels that are zoomed in mountain region + if i in [2, 3]: + data_dict = { + 'X': coords_X, + 'Y': coords_Y, + 'field': field_data + } + data_frame = pd.DataFrame(data_dict) + + data_frame = data_frame[ + (data_frame['X'] >= xlims_zoom[0]) + & (data_frame['X'] <= xlims_zoom[1]) + & (data_frame['Y'] >= ylims_zoom[0]) + & (data_frame['Y'] <= ylims_zoom[1]) + ] + field_data = data_frame['field'].values[:] + coords_X = data_frame['X'].values[:] + coords_Y = data_frame['Y'].values[:] + + field_data, coords_X, coords_Y = \ + reshape_gusto_data(field_data, coords_X, coords_Y) + + cmap, lines = tomplot_cmap(contours, colour_scheme, remove_contour=0.0) + + # Plot data ---------------------------------------------------------------- + cf, _ = plot_contoured_field( + ax, coords_X, coords_Y, field_data, contour_method, contours, + cmap=cmap, line_contours=lines + ) + + add_colorbar_ax(ax, cf, field_label, location='bottom') + tomplot_field_title( + ax, None, minmax=True, field_data=field_data, minmax_format='.3f' + ) + + # Labels ------------------------------------------------------------------- + ax.set_xlabel(r'$x$ (km)', labelpad=-10) + + if i in [0, 1]: + ax.set_xlim(xlims) + ax.set_ylim(ylims) + ax.set_xticks(xlims) + ax.set_xticklabels(xlims) + else: + ax.set_xlim(xlims_zoom) + ax.set_ylim(ylims_zoom) + ax.set_xticks(xlims_zoom) + ax.set_xticklabels(xlims_zoom) + + if i == 0: + ax.set_ylabel(r'$z$ (km)', labelpad=-20) + ax.set_yticks(ylims) + ax.set_yticklabels(ylims) + + elif i == 2: + ax.set_ylabel(r'$z$ (km)', labelpad=-20) + ax.set_yticks(ylims_zoom) + ax.set_yticklabels(ylims_zoom) + + +# Save figure ------------------------------------------------------------------ +fig.suptitle(f't = {time:.1f} s') +fig.subplots_adjust(wspace=0.25) +plot_name = f'{plot_stem}_final.png' +print(f'Saving figure to {plot_name}') +fig.savefig(plot_name, bbox_inches='tight') +plt.close() diff --git a/plotting/compressible_euler/plot_skamarock_klemp_nonhydrostatic.py b/plotting/compressible_euler/plot_skamarock_klemp_nonhydrostatic.py index 668d75dc8..566948b41 100644 --- a/plotting/compressible_euler/plot_skamarock_klemp_nonhydrostatic.py +++ b/plotting/compressible_euler/plot_skamarock_klemp_nonhydrostatic.py @@ -3,7 +3,7 @@ This plots the initial conditions @ t = 0 s, with (a) theta perturbation, (b) theta -and the final state @ t = 3600 s, with +and the final state @ t = 3000 s, with (a) theta perturbation, (b) a 1D slice through the wave """ @@ -11,6 +11,7 @@ import matplotlib.pyplot as plt import numpy as np from netCDF4 import Dataset +import pandas as pd from tomplot import ( set_tomplot_style, tomplot_cmap, plot_contoured_field, add_colorbar_ax, tomplot_field_title, extract_gusto_coords, @@ -49,7 +50,6 @@ # General options # ---------------------------------------------------------------------------- # contour_method = 'tricontour' -xlims = [0, 300.0] ylims = [0, 10.0] # Things that are likely the same for all plots -------------------------------- @@ -59,6 +59,8 @@ # ---------------------------------------------------------------------------- # # INITIAL PLOTTING # ---------------------------------------------------------------------------- # +xlims = [0, 300.0] + fig, axarray = plt.subplots(1, 2, figsize=(12, 6), sharex='all', sharey='all') time_idx = 0 @@ -107,6 +109,9 @@ # ---------------------------------------------------------------------------- # # FINAL PLOTTING # ---------------------------------------------------------------------------- # +x_offset = -3000.0*20/1000.0 +xlims = [-x_offset, 300.0-x_offset] + fig, axarray = plt.subplots(2, 1, figsize=(8, 8), sharex='all') time_idx = -1 @@ -115,6 +120,21 @@ coords_X, coords_Y = extract_gusto_coords(data_file, final_field_name) time = data_file['time'][time_idx] +# Wave has wrapped around periodic boundary, so shift the coordinates +coords_X = np.where(coords_X < xlims[0], coords_X + 300.0, coords_X) + +# Sort data given the change in coordinates +data_dict = { + 'X': coords_X, + 'Y': coords_Y, + 'field': field_data +} +data_frame = pd.DataFrame(data_dict) +data_frame.sort_values(by=['X', 'Y'], inplace=True) +coords_X = data_frame['X'].values[:] +coords_Y = data_frame['Y'].values[:] +field_data = data_frame['field'].values[:] + # Plot 2D data ----------------------------------------------------------------- ax = axarray[0] From 8c4c37646aceda550dda66a306176e25d6780d94 Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Sun, 8 Dec 2024 21:47:25 +0000 Subject: [PATCH 03/10] attempt to fix hydrostatic switch with fml --- .../equations/compressible_euler_equations.py | 85 ++++++++++--------- gusto/solvers/linear_solvers.py | 6 +- .../semi_implicit_quasi_newton.py | 9 +- 3 files changed, 53 insertions(+), 47 deletions(-) diff --git a/gusto/equations/compressible_euler_equations.py b/gusto/equations/compressible_euler_equations.py index 84b187e47..9539fdcf6 100644 --- a/gusto/equations/compressible_euler_equations.py +++ b/gusto/equations/compressible_euler_equations.py @@ -4,10 +4,11 @@ sin, pi, inner, dx, div, cross, FunctionSpace, FacetNormal, jump, avg, dS_v, conditional, SpatialCoordinate, split, Constant, as_vector ) -from firedrake.fml import subject, replace_subject +from firedrake.fml import subject, drop, keep from gusto.core.labels import ( time_derivative, transport, prognostic, hydrostatic, linearisation, - pressure_gradient, coriolis, gravity, sponge + pressure_gradient, coriolis, gravity, sponge, implicit, + horizontal_prognostic ) from gusto.equations.thermodynamics import exner_pressure from gusto.equations.common_forms import ( @@ -332,49 +333,53 @@ def __init__(self, domain, parameters, sponge_options=None, no_normal_flow_bc_ids=no_normal_flow_bc_ids, active_tracers=active_tracers) - # Replace - self.residual = self.residual.label_map( - lambda t: t.has_label(time_derivative), - map_if_true=lambda t: self.hydrostatic_projection(t, 'u') - ) - - # Add an extra hydrostatic term u_idx = self.field_names.index('u') u = split(self.X)[u_idx] + w = self.tests[u_idx] k = self.domain.k - self.residual += hydrostatic( - subject( - prognostic( - -inner(k, self.tests[u_idx]) * inner(k, u) * dx, "u"), - self.X - ) - ) + u_vert = k*inner(k, u) + u_hori = u - u_vert - def hydrostatic_projection(self, term, field_name): - """ - Performs the 'hydrostatic' projection. + # -------------------------------------------------------------------- # + # Add hydrostatic term + # -------------------------------------------------------------------- # + # Term to appear in both explicit and implicit forcings + # For the explicit forcing, this will cancel out the u^n part of the + # time derivative + self.residual += hydrostatic(subject(prognostic( + inner(k, w)*inner(k, u)/domain.dt*dx, 'u'), self.X) + ) - Takes a term involving a vector prognostic variable and replaces the - prognostic with only its horizontal components. It also adds the - 'hydrostatic' label to that term. + # Term that appears only in implicit forcing + # For the implicit forcing, in combination with the term above, the + # u^{n+1} term will be cancelled out + self.residual += implicit(hydrostatic(subject(prognostic( + Constant(-2.0)*inner(k, w)*inner(k, u)/domain.dt*dx, 'u'), self.X)) + ) - Args: - term (:class:`Term`): the term to perform the projection upon. - field_name (str): the prognostic field to make hydrostatic. + # -------------------------------------------------------------------- # + # Only transport horizontal wind + # -------------------------------------------------------------------- # + # Drop wind transport term, it needs replacing with a version that + # includes only the horizontal components for the transported field + self.residual = self.residual.label_map( + lambda t: t.has_label(transport) and t.get(prognostic) == 'u', + map_if_true=drop, + map_if_false=keep + ) - Returns: - :class:`LabelledForm`: the labelled form containing the new term. - """ + # Velocity transport term -- depends on formulation + if u_transport_option == "vector_invariant_form": + u_term = prognostic(vector_invariant_form(domain, w, u_hori, u), 'u') + elif u_transport_option == "vector_advection_form": + u_term = prognostic(advection_form(w, u_hori, u), 'u') + elif u_transport_option == "circulation_form": + circ_form = prognostic( + advection_equation_circulation_form(domain, w, u_hori, u), 'u' + ) + ke_form = prognostic(kinetic_energy_form(w, u_hori, u), 'u') + u_term = ke_form + circ_form + else: + raise ValueError("Invalid u_transport_option: %s" % u_transport_option) - f_idx = self.field_names.index(field_name) - k = self.domain.k - X = term.get(subject) - field = split(X)[f_idx] - - new_subj = field - inner(field, k) * k - # In one step: - # - set up the replace_subject routine (which returns a function) - # - call that function on the supplied `term` argument, - # to replace the subject with the new hydrostatic subject - # - add the hydrostatic label - return replace_subject(new_subj, old_idx=f_idx)(term) + self.residual += horizontal_prognostic(subject(u_term, self.X)) diff --git a/gusto/solvers/linear_solvers.py b/gusto/solvers/linear_solvers.py index bc8297be1..77e4391d9 100644 --- a/gusto/solvers/linear_solvers.py +++ b/gusto/solvers/linear_solvers.py @@ -21,8 +21,8 @@ logger, DEBUG, logging_ksp_monitor_true_residual, attach_custom_monitor ) -from gusto.core.labels import linearisation, time_derivative, hydrostatic -from gusto.equations import thermodynamics +from gusto.core.labels import linearisation, time_derivative +from gusto.equations import thermodynamics, HydrostaticCompressibleEulerEquations from gusto.recovery.recovery_kernels import AverageWeightings, AverageKernel from abc import ABCMeta, abstractmethod, abstractproperty @@ -284,7 +284,7 @@ def L_tr(f): # "broken" u, rho, and trace system # NOTE: no ds_v integrals since equations are defined on # a periodic (or sphere) base mesh. - if any([t.has_label(hydrostatic) for t in self.equations.residual]): + if isinstance(self.equations, HydrostaticCompressibleEulerEquations): u_mass = inner(w, (h_project(u) - u_in))*dx else: u_mass = inner(w, (u - u_in))*dx diff --git a/gusto/timestepping/semi_implicit_quasi_newton.py b/gusto/timestepping/semi_implicit_quasi_newton.py index a0a02fe41..13dcef15e 100644 --- a/gusto/timestepping/semi_implicit_quasi_newton.py +++ b/gusto/timestepping/semi_implicit_quasi_newton.py @@ -10,9 +10,10 @@ from firedrake.fml import drop, replace_subject from pyop2.profiling import timed_stage from gusto.core import TimeLevelFields, StateFields -from gusto.core.labels import (transport, diffusion, time_derivative, - linearisation, prognostic, hydrostatic, - physics_label, sponge, incompressible) +from gusto.core.labels import ( + transport, diffusion, time_derivative, linearisation, prognostic, + hydrostatic, physics_label, sponge, incompressible, implicit +) from gusto.solvers import LinearTimesteppingSolver from gusto.core.logging import logger, DEBUG, logging_ksp_monitor_true_residual from gusto.time_discretisation.time_discretisation import ExplicitTimeDiscretisation @@ -518,7 +519,7 @@ def __init__(self, equation, alpha): """ self.field_name = equation.field_name - implicit_terms = [incompressible, sponge] + implicit_terms = [incompressible, sponge, implicit] dt = equation.domain.dt W = equation.function_space From 75e043525a5b13588133f0fd3cf5dced8cd85c1f Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Mon, 9 Dec 2024 10:21:58 +0000 Subject: [PATCH 04/10] implement more changes for the hydrostatic switch --- gusto/core/labels.py | 2 ++ gusto/equations/compressible_euler_equations.py | 2 +- gusto/spatial_methods/spatial_methods.py | 15 +++++++++++++-- gusto/timestepping/semi_implicit_quasi_newton.py | 13 ++++++++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/gusto/core/labels.py b/gusto/core/labels.py index 15b687f65..b3706980d 100644 --- a/gusto/core/labels.py +++ b/gusto/core/labels.py @@ -113,3 +113,5 @@ def __call__(self, target, value=None): hydrostatic = DynamicsLabel("hydrostatic") incompressible = DynamicsLabel("incompressible") sponge = DynamicsLabel("sponge") +horizontal_prognostic = Label("horizontal_prognostic") +vertical_prognostic = Label("vertical_prognostic") diff --git a/gusto/equations/compressible_euler_equations.py b/gusto/equations/compressible_euler_equations.py index 9539fdcf6..c2bfb37b0 100644 --- a/gusto/equations/compressible_euler_equations.py +++ b/gusto/equations/compressible_euler_equations.py @@ -354,7 +354,7 @@ def __init__(self, domain, parameters, sponge_options=None, # For the implicit forcing, in combination with the term above, the # u^{n+1} term will be cancelled out self.residual += implicit(hydrostatic(subject(prognostic( - Constant(-2.0)*inner(k, w)*inner(k, u)/domain.dt*dx, 'u'), self.X)) + Constant(-1.0)*inner(k, w)*inner(k, u)/domain.dt*dx, 'u'), self.X)) ) # -------------------------------------------------------------------- # diff --git a/gusto/spatial_methods/spatial_methods.py b/gusto/spatial_methods/spatial_methods.py index 6ad214dcd..bc0c9a1e1 100644 --- a/gusto/spatial_methods/spatial_methods.py +++ b/gusto/spatial_methods/spatial_methods.py @@ -3,9 +3,11 @@ spatial discretisation of some term. """ -from firedrake import split +from firedrake import split, dot from firedrake.fml import Term, keep, drop -from gusto.core.labels import prognostic +from gusto.core.labels import ( + prognostic, horizontal_prognostic, vertical_prognostic +) __all__ = ['SpatialMethod'] @@ -47,6 +49,15 @@ def __init__(self, equation, variable, term_label): assert num_terms == 1, f'Unable to find {term_label.label} term ' \ + f'for {variable}. {num_terms} found' + # If specified, replace field with only horizontal or vertical part + if self.original_form.terms[0].has_label(horizontal_prognostic): + k = self.equation.domain.k + self.field = self.field - k*dot(k, self.field) + + if self.original_form.terms[0].has_label(vertical_prognostic): + k = self.equation.domain.k + self.field = k*dot(k, self.field) + def replace_form(self, equation): """ Replaces the form for the term in the equation with the form for the diff --git a/gusto/timestepping/semi_implicit_quasi_newton.py b/gusto/timestepping/semi_implicit_quasi_newton.py index 13dcef15e..b5f12a68a 100644 --- a/gusto/timestepping/semi_implicit_quasi_newton.py +++ b/gusto/timestepping/semi_implicit_quasi_newton.py @@ -5,9 +5,10 @@ from firedrake import ( Function, Constant, TrialFunctions, DirichletBC, div, Interpolator, - LinearVariationalProblem, LinearVariationalSolver + LinearVariationalProblem, LinearVariationalSolver, dot ) from firedrake.fml import drop, replace_subject +import numpy as np from pyop2.profiling import timed_stage from gusto.core import TimeLevelFields, StateFields from gusto.core.labels import ( @@ -368,6 +369,12 @@ def update_reference_profiles(self): self.linear_solver.update_reference_profiles() self.to_update_ref_profile = False + def log_w(self, field, time_stage): + k = self.equation.domain.k + w = Function(self.equation.domain.spaces('theta')) + w.interpolate(dot(k, field)) + logger.info(f'{time_stage} -- w: min {np.min(w.dat.data)}, max {np.max(w.dat.data)}') + def timestep(self): """Defines the timestep""" xn = self.x.n @@ -405,6 +412,7 @@ def timestep(self): logger.info('Semi-implicit Quasi Newton: Explicit forcing') # Put explicit forcing into xstar self.forcing.apply(x_after_slow, xn, xstar(self.field_name), "explicit") + self.log_w(xstar('u'), 'Explicit forcing') # set xp here so that variables that are not transported have # the correct values @@ -418,6 +426,7 @@ def timestep(self): self.io.log_courant(self.fields, 'transporting_velocity', message=f'transporting velocity, outer iteration {outer}') self.transport_fields(outer, xstar, xp) + self.log_w(xp('u'), 'Transport') # Fast physics ----------------------------------------------------- x_after_fast(self.field_name).assign(xp(self.field_name)) @@ -439,6 +448,7 @@ def timestep(self): if (inner > 0 and self.accelerator): # Zero implicit forcing to accelerate solver convergence self.forcing.zero_forcing_terms(self.equation, xp, xrhs, self.transported_fields) + self.log_w(xrhs.subfunctions[0], 'Implicit forcing') xrhs -= xnp1(self.field_name) xrhs += xrhs_phys @@ -450,6 +460,7 @@ def timestep(self): xnp1X = xnp1(self.field_name) xnp1X += dy + self.log_w(xnp1('u'), 'After solver') # Update xnp1 values for active tracers not included in the linear solve self.copy_active_tracers(x_after_fast, xnp1) From e0fd5e7a7025185cb76241bf3cc928294f09679b Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Mon, 9 Dec 2024 10:24:19 +0000 Subject: [PATCH 05/10] update initial condition figure for schaer mountain --- .../schaer_mountain_initial.png | Bin 17505 -> 17903 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/figures/compressible_euler/schaer_mountain_initial.png b/figures/compressible_euler/schaer_mountain_initial.png index 9b7940bc234e1fd1f56959cea59fa333f12d777f..7ad5015df27c0e9f1d2e175737e2007f32cf665f 100644 GIT binary patch literal 17903 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 literal 17505 zcmeHuc|4Wv*YDk^k)$MK7lja_h_IhZM4}Y7S(!5K%o(>*QKklwOg#yY%w!%mNn#rw ziJe)riJfV)&9<}dt>^bV=Y8Mv$9vxM$N8M|?$4)B_P+1?y02?pYprXo@A|HXmo-&) zZsXpDAjnR&3(DFEvZ)?H)=O^L48Ih-!Ii;(a<1obu2=C^t{&H&Es;ytU2oarUF~gd z9CWvIcCo=bN{gQomlivC)7ABsi@bz{!@q72$2(g~)DGdU!XR63UC?(y5Vq^+zjc3L zQ*03AT$7senQOOW$9l9vVn*UH^QIlS-nr3F{`h=k%YfR4mpvqtZi|t}X)z7moL^r= zJU*wnf3LN;H&;k-CQ@bAAMid`%iC64x|nPGIT88o-+$a#vNba}KWBNTr;)Q%`lF+Q z+N0MN;XQ=zAwG-GB74&wr4OtQPp{*?S?;q?#@0vhiN`DY^oIHo``BQH2y)@eK2GCx z%s+95&&V`Wmcr}^B=ltSJK)zjYD%><>Q1ogPmMm_e5)06)7Y%t7hm1pZz`iaV~=R*F}46 zLj03jMqD|K@8>)xQQ*0hyJJB?1{s_bXV2@FF!^U)KjxNJ&g-p55Pp7mCA{!2Bz#}Rfp82qOgr@i867n3_-kGm^iSJ-T`T21{t~*c^xjM%~p9Ww)sOQoCtF3B;U|hr1I=Z?$A@GP6ahK zHvXV{T@m99%-S1V^R=hP*lbLNO846LpevwRY9eX61wZ||k|{l%>#A$0#Ho2b20BDb+1w&CW4+Hc>k{~RAzNo#vl z>M@~`(z?Ht7u53MD|Ca}>}6_MJ<{52yDNN`>Q{9{p65_?#5g5*H}#IVKDZj+ke9BT zcCyG7mo@~ z(MpK-%;>OJ5q!3PVY1=M^?4nVe6#1B)uEvw<*P*q@|!wSd+wk8eOHIQyMoMN_FfK0cyxxcr>|+{n2-UMy$R#dy0? zN-p&1aB?W@n)=a_2-^0f(MqUyvn1iJv)S8{9!D7Z_Ug*qKI7*g_MH6uz4-i> z!mb0Q$Bo3J%w1fh`T1WqS}EL~G}3)=?Bfk}%S}AQ zD|dJN@}_2;n?pxr@lM0Xh#D!a4>K|{z}0byUO<;U`K|h9VHXEp^dty7fVF9QxH<5^ z+aSHrzCbq2NBEZYP8>m|bux6#@%V{rr;iP^ZRxem=MD@EWcrcUZMHSvzI{urbUv8S zTvxsi?Q*+9+X>sCC4}7>VyI zH<`G$|5^HWq|)bPOyj5FY3oR~^{r%84%mYquJQt;I;*@ClNbx8^o(5z7SA2<`0(Y# z8neTP;WSes}nNA z4DbX3mbTzyZ*TwMM|Xl{o+ObT8J9{Dxce6f*|bU6JmHQxHEJ2kzt=;#caij7PR2&h&`cSEaV zmzJ|p-;PC=2?Cgx;=ZksI+%W0aQ(!~!ZUXHovD;)jbvhJ>1pSM7}916Z2H4`jE<&E z%$Rjv$3tu_=;ac7OJ7IF{sk}bsFJ# zD_AL7DZOH8GF%j?o|IF_(vZMTsk|)s?4fR&+fY^)d|(@~&dgXP!lgy4rAd@Hu%@JO(GsiO0EMb)x5#aWKuBvf4vKJ*g{cg|zd z)RUxmEoVx|SgKC@CIq*M+8c(?H-PYFU}~_|+OIge&f>L^I2*Oyv2gHPb)Wz#+M>rY z>g?*ln8uIe?herqbV-%Q$0R%1!`AQFcK<4sb=14JI+&G}^})^`s^NU+GjvNC zfu4=;!rI_9u!B!rG_9nfuXaUS7$g2V+2UjK)1cRXkf{PGX`nbcV0|nsEU2@;fA$b~ zRC@=9xP_2s=}XCKof*?V!qe?m%_1}eIp82cJx@Y&!rLx|u355TW}9tWglP8njg-ox z`x*;nNVMV9t}#u;9lo^hbqzd+KPz6vhUz0`N~+evn!@2v(iPmoyqaKgtNFqG;94W-+Y2i224Cr$MA_J-NZoX%t4 z)vBP254*WPWb|uiXGwbrf{+}IJEyYJbkm$BddneNJ+R;fp_?C(V71WHq&eeNe)Vdo z#+v78O2p=Z%EHkIp@h@z+qZ2O`q_}gWP@luI0$R=O|rJvU5D`TPQELIiQ5xyDK!dZ zN2w=0+4-T$$1`#0r{O)7MD{k@lMo^b+P+crq#cI8(39v&>a}EsrySFJTpD%@$!C6xBT>YUnd>?% zrSXw<(<~pU;?^abtZUaUHVOmjSj88e2}r#xEcQw_7!IL9#>$d4cU;y)A~-+ki4L$0 zPzls)M+dHGRD)jzp>`GG6OJaDWF_pc!`6Y68cZQ5HOZ27KD-2$d4~H$Ynr>t+_R#9PBO=gO#RZ#0}y$;tY>{6VT1pg%OGuf=Orh{L?CS2t~#%T5h zVZ*hwHi$*wJA}OP+uXqAz1B{RwTUU{8at(+pwL!;9(hXDhsWC0x{4NAh&owh)b3M8 z{~U3>0Zty03eA<5b8j7%oEAOEiY&d|oY~7Vi;03G>z_*9zTIf{9YV54;8kKh#&apK zxV4N=n#!iaqoLjO>YGb%x9hX7aCAR=_6!ZGAZ%65!STvns`u=AtD6Q1-UBw%ItwXS z>FxwB8OW^^6nK@k2t|=l<4UEoXxR~eT8FjD%LD{=?BI?KNZ80aThl*3Ha1q1 zs2YyCzAQ4jv&{)uO#6|9X11t(+wR|9o_Dg4icXT#&5}Jky|7%2&5uQ$iDiD+*gQlv z(!W!wuz{MF%3%^s4O->-`6s0g$653QD^-KnR%>s=p2{FocW#&fWmw)&|A()v4c4ri z(etk9PLLj9OGihCoC{+e>HKBZ?1KS;e}+ic@*zle?+hElN%|s+Y^VL~kk(RSf$a3` zDq_~+sImB&FW3kBh6Ql_O^bZM-YcEvLL}H-7lMnM+IvAaFB^HS7cwj z1i>8~sG5y+*TgszyT)Gfa9()C0t$+3KyR0w;-$oC3ZZ##f4|x5C;emYr{PF0D=wan z+>o9J3co$!Ju8B|IR`JF8j?}n$P{t0IXYlCKCz_HCE#^@bVk z#cW9sVuG=sg3IWq^3M-!(`9H*fB)?D?{?q`rhazhZSPyH6H53Xl;9(^JeNgSp+Y$A zG~5*T_3PIcwg4&=RrnDx*rkr<0Su#>z-2oBzWbx~W5jm@;@_6L%{QQUBPB{Pg8x~a zQArc*-hc#SKq6W1D1raCkp#xb zWS@jdSy12VN?-WxCBman2|t@VCpREw5scx4^UL$t4-+fB6URzK(xayrH)9wQt1jI> z7yBUD?I>IRo>#O)WK3M_k$rLTa(tbIxX(&%%XfBmd^ugWjNWc&9f|jux|rj1&YTM| z+fNtJxL@@pjx1ZW&>l4~WN2#gTPT8X)k@9njJ$F7g=3+&%?l7PeDWjU%|CySB2gfkwjL6IBbc2XEMQ0n(m(icy*wq1 z+1N9DDRDPDnnxHK8m2_<-F9F2xjLG8TqQvi!OP40A`x=Fs#p?zG1*YzE*6JHH+17)a5}oB(i0GVZ^_ z`8Hfp0MV5D8ZIPh=MuB_A|&z&U1NdBc`QJbMw>nEEyq=+s0g)_7WuZuzR)j!g2MHi#82tRN`zF{-`@Vh+f}>n*6(#S%V_9y--4zBM9^O4 zy`RXZAk}{iELV>QS*(r`R|+A+cm$gY5dy%`53=UG$^lf#>r_DBhJ;vJoms%FPGQi^ z7>x7ieP}P^Jw%6q@FHe*EAy5-8JK3*n8|-IO@QA<<~& zN8uth+@%4;^c7MlG_Zjr)AQfYQvp(8HowV$?c`#@DkEKHZ7QLHjFPTpx zdV;%@`d}sTawNFj|FFgpVXT5eh`kICsM@|v4{#Evl$7`wrDQ7ecK*Y}ZZpi*2J~h( zndh(2y~?w07WC^|S(;19@$`SVwNA*~6%A~%o06qe(Ioow5+oVP=(R0%Ss(pS)o*XR zc9-VS>p84G;k`6gh(4IJ)jO+}!Mxa#f0xFFUA{G%_5v#ezw;p2g7`^ zOUA3^Uj>x;YV30Lyw>Un);NtHjOfbpHw@$Yp5U7KQ9YtpMlRBOxI0dK33U%RA+q0# zVbnuu#Vb5qnwzNo_)!J&xA{(Th0N>{VZIvkv2>z>2MvEwp^gKZ)+4emmj6rKPPTc} zp|scJ2hf60?~0wTVjF-oHyFJU@=ZWT&i{Tn=(NYUGJs2H*~+~Xu(yHl-w#8T3q|=T z&Qqwim(u69Z8t1Vws{*Ncs+(xU1{i>EGB;e_EM~ zsx%mg00^H4H5_N#g$%>O0Xx$rgXK2Um9})5#vMEE9{a`_++Sv>6($;o5LaEz_|A!kO4NQESSen0~~pv|x6cW?d7R!h>(# z8zJ$h+lC8wX+2}T72=2O@!r89jwlH<{O0e^z;;YPFpD}g8|N??!k1a zlMDsi$;n%~F+)4^Sa~)LHQaryaO}NvvP0+GuEb_g^Y$*70N98SWHyt1c;bq?&+1ZN zIGfV^K`1o=R(vzxAg|LWmvg`PwuWfVL!K}1Q8cQ{CNL@qAn^1+aM&n-2k6n&>1W_< zO~X;~qo&{E$fg=2U2Ms^d()6ntyDr+Lwt5@nnAL6V9PMfI?WoEI%i#cXP<=02N1sI zv8CBU;sGc>RwFASCKW#WQGXOVmR0*PRKmFM2nV|Xj+Y5CmPQzVVQ6+fEJa)0 zIQR6w4DE9?mY;vN%jdZIBl7yeDODL2HA?*TaTm~$1q0mW_(#{|X9josOv#g31}9Zz z_`4n@2hPgwGR0?9cS)Crq*S@^YUY@ha|P0Q3KOI+AD?deT%>Qs=3yB=% z{lRBG6C$xw7ccv*J1|?*^3W8UDU_^+t1#)ta1PQ}#=W2jtSuyrITPsXxut;|VE0IW zS7esb+ylzDB`A(xh)IX_!@6wiY<%4AJ+19~Z+4kaA3T<-t|Uy>H$5glnO2=& zQ?`Yq7r69(RPq>D=i`?a0nTysHbF^K$4rT#M#byJ#X{*afC1TpVu>sL@nI4 zon!E}M3`^0l#`P9gNdG*Q$t|KCAd;{io6|{u@WKkbmWsKl<7e}{|OWDBW)R%E@wV# zigE26uFkKO;)raHq$bElqYMU|jwqI{K2c6cNo=~mEav0>Q&0EKw5!ZdJ@M&<@QQuq zbBvzXXl|cC>cw52 zzQys+_ghK27=Ozn%-@QVEm_}09j|1;$uOnpZ-;xn%S&f;YxWkDG6K|*O=(;T-hT>J z-b4%XC^=&9IT|^`Yh_*XC1A#Y)+D>VobWbQVyQfV(lQ`+&kn1i$!}Uk$cNTm@u4KJ zj>=d-#0Rg(!*yi%!qMMmUuhk*TpKauvGxT<$u+F(W0|#;mxk*Z|YN>sgS}%-Gm|pZOK%y}qYoie-!00p?2l^94V|u`TV# zS+0$hexzz_+4E1K?6)Dzg|&x0_R0B4Fl+mDH~$-B*02rPOgaTp*}1Dpd|&Mb++LK7BotrIby(mqTitS{E6&_F|i}U)%amts`kL*N`sujcV&u_SYWiKK;|} zq?}`=6w1Cq5K+~yC7rxjvktWC0^eVhU-|t@7Ne19^xLKW#e3=0ZyyUQs7fE|Y2_t; zD76EzyBT|Ms?p7LQh(D~8l7LvT4&zG7^?rEMSEp4`Y*F2SPC6x8M5S_<4J7N3r448 zR?{FVwkI}Ej zJc%Lwv7WdjySr5ONNLeDcg)mE2^aHSn+)?=mpwxsZOFWcYdVomnj5X8Ce+f8pI*DF zUl_J5tWx82;HZ&6>=7|*?V~-Sn-khjO8GLc%Uw)8w<=gAH>kcKe+Ji7(~a3Ul*d$o z7aRwc@?2;3*W{nQmmQne&C^6vlvgxelTLd_DBjm&9y6Rr;JPI~DL=enL(~0W8#^N? zS%PS!U**ZmB@W!`k$m)oV&h`^B7}ut634uB)k2v}?;zMXcNYgu3n*4-Wi>0shA@S* z%~d6Z#Lx&fZ#)$%G;%9Fh2$}Mn@MoGwNpMm&r&{;KFob%ck*?8{5VS<` zwCGP;nq~>rK2N*Vn=VxA=J)QpiZrmh5VQ62k-_GNyS|~i=taeEOb32K@Zy=Uzv?Mj=*Q75bb~wAR;f#+O z8$xLc+-cOJRw()YU{NeD$57oufe-I9`s4Q=>8Nmi%WW^Oj(QuRLOdo--WNQ;m(AO~ zp}ke!)D+#TgL3i{Hj)QOH;O87oa5_)zwteO;I^Y-6Z)W(Yj0~_*ntJhA#U@IB9?|I z@87)IN4S|JK0B@2IJePH5&~o{QqvDwhclbmfeLH%u}Xu_Hr5etKR!wDkh#;|)3Lsp zgx+`c^NTK)#nt}k< zBVHnpAZ2H~Lp_}`kMB(T^2BuWS*iB>b_A(R-%Q)Rop#L4dR(T%yHKzNu7uhV6f%9a zC*g1gjX@%7K%?{yy0R|acN<#fYgBv^!F2`ogm}sNnZkP(Z{EADKC+9ywx9Xq@CDx! zmh}m7u1Q|KDSpHa%x&r4of>*#Z{(Abh)hrN=`zR=z!Z;{^9g5|`wL12v^x4wOYJ-} zREv7QT|xzl6y0^>aS}NZ&|*Y=yqW1ijH=%T-aISK)%-SG+#{p9CUZ~3#D7FP^4<@R zXN&0`m)sXyWnna&T_MO?FZx^^O|3F?dBjD5%`oO}Zf$MtXbE>#N*UZgctp#accV(@bKh4lKMpxX;H%kC04Q50#C#rN{g3BV~J)M?ic>=J5OXn*GA z{bi={5>5bfE4n&9~rDE&aPY2>PdlU{^uF3oc9;^wP7 zS9*a><9lKFMEz}QM&Uq4VXu7NGQ7!YdZ^LP0T?$O3-9*{dig0BssHP}uU}e9MMEYm zU<#bgobqzTC@EMy%*sG;Tm3{I5fi65+)WOy88E76{_bxREi4Qr{ual==7uA{YXV5~ zvT#FENRS@3aCsWLI{gG&yb-Ex@5nFq4Ra%v&gjmm5c?*yXb+r=d4X48o8Ng$KL-~A z6t^VpkuN1s*cjU!VA_7pKM1*v6A&!q~U2`*1B4G!n=U}#Kxx(1ph&{K1%n3LO<{* z%%kunAeJeO&y3Hy=A7u>MV=G!4M>XiO43e6Ih|M9>V~Ibty;%`*CH^iMEqkJ%BCo9 z09AHCZ$a6INB6QIxO30m5#P1FkU?vFlqc$aW=HSR+)J5AD{xVAQR>?upcN-M{wsTr9F-S*ML5uoZcQs zKQr*qw*WxtJR*ZvIUj=Hr$V<{Q8xExN$l zXeHe_<_<)#t0WeV9JWX@li~<^1$3AXEiEmdXeB-4NnH&VQp1^KD*Xna?oY!J$tN%? z*PYGUse4c)-y} z^B9o<+a`SDxT1GGjMvN!xL-hU#JQeq0`LmtcLVreEjsHW8xD_2IGoHp*N0pPtyq_B zt3Api2KehBFdPH|DQrXU_Me<+i~)Wfz-Q9aUw8P?PP{PUGcyC$1b67iNyc$p0THM* zU%Jk}Y#dT{*$I@3B4FpCoH^ilp5P9J+HVTqcq^5z*@nNIQ1y$T7ZrBxC}%L4(ZP`& zFK9!sNjt99Bx}Zw?&Og+*&h-QwNt-fbm9PQo$~;4#aJTgod^R#MJ|1So7|JE@RN7t{vo@vei<>KRQ7eej?lT*|npKwC za`OWaJ0~T!gPSTSEDXfv!M*|0ALu3kIqp|_xPZcuz@|wq(-4%Vt>Xgl2c;-N+4?Up zmwGL8rT?H=`8$J*B9DpQTaFb~zQ8Lu%|10cd=~cdC(+DZJ}$@4;6ye&2w1z)9HZS{ zrg?dXuebMU)Md`k&o|J30UEnBT~~FJ(}jIK{^h^?0|^eCgBcZ7s6TFY-HwR90rG3f zluS$`=>F95!nEi~uHc#*z%p|om;mJh3Irdjs?LCZ0)s|?sK9U1NM4*7X$7+R!dDXT zC8AYmR2dl=wC&(^g8zEtw{75BKIhK3L~LkijUmJVzXp7-2j$9M@E_kzRZT&OUqk&J zkn`q{EuO8Omc|94qynfP#3tjB$DC*6DmMW^Kc8<8T13(EP|^bWEebP1Jqy(3+Xj&) zQT$WNpyUm}|HM=9z%_x`a~Lpts9~V|9s|EC=JZP)_OqX_><2&}fLSQ;L*1%csI9s4 zmC4Y-jfj6Rc*=Avyvh#r7&I4{p#dMz4a)*9-$TFpA|TcY2??2Jtj!3y59Kd+qw!1nfe*bK$H&i;L1bf~{XVNl?#!08ei5D);|YOutC zk=B$PAR;(L<7I3G_`zAg<^Ze+#Y7+}s)BTYnd5V_`Se7Yw2=~SPGr>-S}_F7Ogx~e zgyOtldm7-S_7^Z^ufOQ;IBU>PIE3^0mZi7D;R{D^*$-PZoQA!NjDnC{8iXOsyERt~ zwOTC4CIrdU>O;&tf$?CKeobWOu%rObP76YIE-zx4skb`Cp4u)gHw6H6#Ep5=M!)wZ* zMGboR4SN7tX!k2Tgg)Jo<@oH}GYhpC0xvj_&;-UzN^s^j07~XrR{Jp@(Awsgoi}v* zm^ZA}VIL+i#`>6h6l>nGv{{rVg0MJ}GS!;EIN?XbU_;h&oGDT`A^(SnvhoKBtZ|r^ zvhwosKGN~m!^6a7`xYH8FGeus4^mw%=}LG|&}zxyrSC+sI;DkX;=Bc1T_g}Hc*&Ei zbJLU#p;ZdS`RB9VX1|;tB0K1W7DLy)Ci;;u;%bfaGCQ%)@NVVgbn`$8mccePl9C|q zVE%$W34eUlTAjrY3a!qqvda=C<~WVxibp+Gr=h&Ji^!;3g~^G13|t+4ZI``krD-(} zzJ9P?oe~Ppe1Fz;HDR>`{h@DpW&(Pt?w?}Z_FVLyp0QV3?3$jjnHeN3ji3-WD!9tV z7}+R(;nmMkQ39_RpM{u93Y8GAJ5Lm&2L)*nvw5%olpq%I!k2k(9+H!fpS4<8W7LwV zf$QD}jy@H3W|HE`W&Qk*ltq(*4j zdr%HtOyq04q}EEaUjaJFtW^e~5M525VUyYQ_C>s}XNwLlsJY@DuS2uv($8R1BiFs0 z0~3TpjkQ}C<)J6Ab5Z8zEjniRPBg2ahJnoQWM*~$7qzzh7uxFnUB3+4XIJS4O?}QS zI#4h&^;=FmuXl)_-)~{W`HKMmz%X&%m3bv$m6ms2@A{7kzZ_n-g_Smin)F3xwc@R{S$gq%`Ra{DY_kGLZL$6eHS{3vQPnW`qOt+Lt}Z(ktqbM7ItZQ8s>3` zF-|6$p!Y_tz@DYFz;i>6dzGf^H&a&puzqtM1lbB&U!Son6sk|vPB6wNREWgo&>Om4 z+4xE9a`>7V<7O+W;0Y-8Oid@OD)`Z!C42yt-DeDKZ@rUHuA8sdtJn>f;dVPsG|wx} zINN7t89=)OrfjQ)Ngqj3+=6?y;u;bM-}%1E_$<<3(x-+{2GtI1saUYaLGlriODeU63w7DhUS} zgjx?sK+Om4$5&`{NDF~{6S5{KrrXO50!v1^hYtc2K^yZp>!$@#?wwvE(72eP3t0wq zjy((tf=mcbMko~nuQ1kt(EICMFgWz8b(7o68<{AOd6wdlfCsdg7$y9ICGZUa{iuP+ z^AmB8hPOAAEsD}Z-Qv|cO*(C;DG=)P_V!91#-Q}yzng$=Fn*2wcZTS`WZlzgzdbq; zI^q6?I5KBuq246Jl*!78zq)qbPmxt4nwN~69M>Zuv)}8Uxe(M|s>e7SI^zkvZ3u5^ z`A`4{%8_WfBH|x$>GSMoO+zeXd5}y*Qv%qBvWPMhE;Yqlkz4I+iDKN6mxx2b{f$7U zwLUdLiTRcJ{ZG%scxZ?yO=6ig?k)Ae7ul~#sQ(=^g`918=b3desZnO`pMZ&FFUY)J z(8k*)B`FD3hQ`5{ZGJtNj&>@|E4+^Aw3q#80!8coZD=W;nT!?|_8G`S-T`c!tBKEtd^1nUu0#CnVvp+af40p#W)VgU1}!KK zlZu}ETY!oXI(_Zx;(>mVOwR<-rc21dBT<*&iyQjL=yT}Y7`2(pS_4ALKX+|FE_57r zkQjSM*99IuB=2Y-Mx(Di>W|W=fNw1Fygro@z+%e!D|f4V*8zDUBv-5Ng~B+4Yo7lt zfQ+nvQvARDp#3!xH0L^>@J!Nv2!f=0t$d+fLp8xG2?9K5g_73NfL#p=g1+E?&I!8V zpl>LYSB?Cj753IS^KyA?86n{V^;lMqqgK9xznd#sKf9m?)G283`?VToX;5!BRCba=`G06(IU&Y(oD+5XeO=2#6L}nM~G3c!MM4n#o0q6L` z6bUg4gHaHFQCsLyvzG}x&eWh_5rDir!;-8k3bk``3{EyunWPT zJnSt5gfy1zfPY^J+N=wo^q1hnls}|hp=8+=cCoXA7JL*>gKqBw>A(P71F9e|Re^1T z&CMx1$yMA-r3-RDWX&FDR!tBN?uMg&w{F3!;U34r(=A)3oX$~!SA>Gc0QRx719-94 z$!Pw4k7VMGg4Qv2sAFWUH85A+gIxq0l_teBS^?yD>6$Jq0jw{lJ)_Mwg#lQIN|JW; z{JPh`qI*qW*S=OIG+Q6=c%hNy7V8j$&%<@@H}K1LnNwE;Dp>?NNferLS6O}axpnQ# znh3b%-W@Thiv9elp^&5|6H`vxG67gBObk*ua{^)YGo7XD_}I2eD4+Xp;yR%zVY`D( zC1PIfFbYY6UlqLR2s;XmF4KWp(BmQv7kb}B^Lld-YK{_qQ@7L9Ym6tEk)?e`P zJLN#q**PRmwBHs99h_+QOn$+p?6AMGU)VF;$+fl;l==nk`}y$7xT`$cV}MsVvDRsf z4hpHZvNC`NVA?5sqaDzp22Fu1WZ-#0x-Otv2-*Zav>eTe|Jupzk6n;^Y2I-aH`B#K`GAa{{-h@6}$D-&FY(%e`v#d5ViA~%9&@)?*0!}#*}FQ From 9eb6ceb3e06f355511b092514c8e74005e1fbf7f Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Wed, 18 Dec 2024 08:45:23 +0000 Subject: [PATCH 06/10] settings for schaer mountain to improve stability --- .../compressible_euler/schaer_mountain.py | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/examples/compressible_euler/schaer_mountain.py b/examples/compressible_euler/schaer_mountain.py index 82c10f4f9..c30237aaf 100644 --- a/examples/compressible_euler/schaer_mountain.py +++ b/examples/compressible_euler/schaer_mountain.py @@ -19,7 +19,7 @@ OutputParameters, IO, SSPRK3, DGUpwind, SemiImplicitQuasiNewton, compressible_hydrostatic_balance, SpongeLayerParameters, Exner, ZComponent, Perturbation, SUPGOptions, TrapeziumRule, MaxKernel, MinKernel, - CompressibleEulerEquations + CompressibleEulerEquations, SubcyclingOptions, RungeKuttaFormulation ) schaer_mountain_defaults = { @@ -64,6 +64,8 @@ def schaer_mountain( # ------------------------------------------------------------------------ # # Our settings for this set up # ------------------------------------------------------------------------ # + + alpha = 0.55 element_order = 1 u_eqn_type = 'vector_invariant_form' @@ -113,25 +115,32 @@ def schaer_mountain( io = IO(domain, output, diagnostic_fields=diagnostic_fields) # Transport schemes + subcycling_opts = SubcyclingOptions(subcycle_by_courant=0.25) theta_opts = SUPGOptions() transported_fields = [ - TrapeziumRule(domain, "u"), - SSPRK3(domain, "rho"), - SSPRK3(domain, "theta", options=theta_opts) + TrapeziumRule(domain, "u", subcycling_options=subcycling_opts), + SSPRK3( + domain, "rho", rk_formulation=RungeKuttaFormulation.predictor, + subcycling_options=subcycling_opts + ), + SSPRK3( + domain, "theta", options=theta_opts, subcycling_options=subcycling_opts + ) ] transport_methods = [ DGUpwind(eqns, "u"), - DGUpwind(eqns, "rho"), + DGUpwind(eqns, "rho", advective_then_flux=True), DGUpwind(eqns, "theta", ibp=theta_opts.ibp) ] # Linear solver - linear_solver = CompressibleSolver(eqns) + tau_values = {'rho': 1.0, 'theta': 1.0} + linear_solver = CompressibleSolver(eqns, alpha, tau_values=tau_values) # Time stepper stepper = SemiImplicitQuasiNewton( eqns, io, transported_fields, transport_methods, - linear_solver=linear_solver, spinup_steps=5 + linear_solver=linear_solver, alpha=alpha, spinup_steps=5 ) # ------------------------------------------------------------------------ # From 43c277e1444f4063ba4753994c9ce663465fe68a Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Wed, 18 Dec 2024 09:46:51 +0000 Subject: [PATCH 07/10] improve stability settings for schaer mountain --- examples/compressible_euler/schaer_mountain.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/compressible_euler/schaer_mountain.py b/examples/compressible_euler/schaer_mountain.py index c30237aaf..c5aa37d33 100644 --- a/examples/compressible_euler/schaer_mountain.py +++ b/examples/compressible_euler/schaer_mountain.py @@ -124,7 +124,8 @@ def schaer_mountain( subcycling_options=subcycling_opts ), SSPRK3( - domain, "theta", options=theta_opts, subcycling_options=subcycling_opts + domain, "theta", options=theta_opts, + subcycling_options=subcycling_opts ) ] transport_methods = [ From 3c7fd3c0e80eafdbf77f752a6b93117614600bd2 Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Thu, 19 Dec 2024 20:32:50 +0000 Subject: [PATCH 08/10] move hydrostatic params to file, neaten up spinup period and fix Schaer mountain --- .../compressible_euler/schaer_mountain.py | 33 +++++----- .../skamarock_klemp_nonhydrostatic.py | 10 ++- .../schaer_mountain_initial.png | Bin 17903 -> 21510 bytes gusto/solvers/parameters.py | 27 +++++++- .../semi_implicit_quasi_newton.py | 58 ++++++++++++++---- .../plot_schaer_mountain.py | 44 ++++++------- 6 files changed, 118 insertions(+), 54 deletions(-) diff --git a/examples/compressible_euler/schaer_mountain.py b/examples/compressible_euler/schaer_mountain.py index c5aa37d33..c73d7aad6 100644 --- a/examples/compressible_euler/schaer_mountain.py +++ b/examples/compressible_euler/schaer_mountain.py @@ -12,7 +12,7 @@ from firedrake import ( as_vector, VectorFunctionSpace, PeriodicIntervalMesh, ExtrudedMesh, - SpatialCoordinate, exp, pi, cos, Function, conditional, Mesh, Constant + SpatialCoordinate, exp, pi, cos, Function, Mesh, Constant ) from gusto import ( Domain, CompressibleParameters, CompressibleSolver, logger, @@ -23,11 +23,11 @@ ) schaer_mountain_defaults = { - 'ncolumns': 60, - 'nlayers': 30, + 'ncolumns': 100, + 'nlayers': 50, 'dt': 8.0, 'tmax': 5*60*60., # 5 hours - 'dumpfreq': 2250, # dump at 5 hours with default settings + 'dumpfreq': 2250, # dump at end with default settings 'dirname': 'schaer_mountain' } @@ -50,22 +50,22 @@ def schaer_mountain( a = 5000. # scale width of mountain profile, in m lamda = 4000. # scale width of individual mountains, in m hm = 250. # height of mountain, in m - zh = 5000. # height at which mesh is no longer distorted, in m Tsurf = 288. # temperature of surface, in K initial_wind = 10.0 # initial horizontal wind, in m/s sponge_depth = 10000.0 # depth of sponge layer, in m - g = 9.80665 # acceleration due to gravity, in m/s^2 - cp = 1004. # specific heat capacity at constant pressure - sponge_mu = 1.2 # strength of sponge layer + g = 9.810616 # acceleration due to gravity, in m/s^2 + cp = 1004.5 # specific heat capacity at constant pressure + mu_dt = 1.2 # strength of sponge layer, no units exner_surf = 1.0 # maximum value of Exner pressure at surface - max_iterations = 10 # maximum number of hydrostatic balance iterations - tolerance = 1e-7 # tolerance for hydrostatic balance iteration + max_iterations = 100 # maximum number of hydrostatic balance iterations + tolerance = 1e-12 # tolerance for hydrostatic balance iteration # ------------------------------------------------------------------------ # # Our settings for this set up # ------------------------------------------------------------------------ # - alpha = 0.55 + spinup_steps = 5 # Not necessary but helps balance initial conditions + alpha = 0.51 # Necessary to absorb grid scale waves element_order = 1 u_eqn_type = 'vector_invariant_form' @@ -86,7 +86,7 @@ def schaer_mountain( x, z = SpatialCoordinate(ext_mesh) zs = hm * exp(-((x - xc)/a)**2) * (cos(pi*(x - xc)/lamda))**2 xexpr = as_vector( - [x, conditional(z < zh, z + cos(0.5 * pi * z / zh)**6 * zs, z)] + [x, z + ((domain_height - z) / domain_height) * zs] ) # Make new mesh @@ -98,7 +98,7 @@ def schaer_mountain( # Equation parameters = CompressibleParameters(g=g, cp=cp) sponge = SpongeLayerParameters( - H=domain_height, z_level=domain_height-sponge_depth, mubar=sponge_mu/dt + H=domain_height, z_level=domain_height-sponge_depth, mubar=mu_dt/dt ) eqns = CompressibleEulerEquations( domain, parameters, sponge_options=sponge, u_transport_option=u_eqn_type @@ -141,7 +141,7 @@ def schaer_mountain( # Time stepper stepper = SemiImplicitQuasiNewton( eqns, io, transported_fields, transport_methods, - linear_solver=linear_solver, alpha=alpha, spinup_steps=5 + linear_solver=linear_solver, alpha=alpha, spinup_steps=spinup_steps ) # ------------------------------------------------------------------------ # @@ -178,7 +178,8 @@ def schaer_mountain( bottom_boundary = Constant(exner_surf, domain=mesh) logger.info(f'Solving hydrostatic with bottom Exner of {exner_surf}') compressible_hydrostatic_balance( - eqns, theta_b, rho_b, exner, top=False, exner_boundary=bottom_boundary + eqns, theta_b, rho_b, exner, top=False, exner_boundary=bottom_boundary, + solve_for_rho=True ) # Solve hydrostatic balance again, but now use minimum value from first @@ -232,7 +233,7 @@ def schaer_mountain( theta0.assign(theta_b) rho0.assign(rho_b) - u0.project(as_vector([initial_wind, 0.0]), bcs=eqns.bcs['u']) + u0.project(as_vector([initial_wind, 0.0])) stepper.set_reference_profiles([('rho', rho_b), ('theta', theta_b)]) diff --git a/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py b/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py index 21772369a..5ec8ab12b 100644 --- a/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py +++ b/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py @@ -26,7 +26,7 @@ logger, SUPGOptions, Perturbation, CompressibleParameters, CompressibleEulerEquations, HydrostaticCompressibleEulerEquations, compressible_hydrostatic_balance, RungeKuttaFormulation, CompressibleSolver, - SubcyclingOptions + SubcyclingOptions, hydrostatic_parameters ) skamarock_klemp_nonhydrostatic_defaults = { @@ -134,7 +134,13 @@ def skamarock_klemp_nonhydrostatic( ] # Linear solver - linear_solver = CompressibleSolver(eqns) + if hydrostatic: + linear_solver = CompressibleSolver( + eqns, solver_parameters=hydrostatic_parameters, + overwrite_solver_parameters=True + ) + else: + linear_solver = CompressibleSolver(eqns) # Time stepper stepper = SemiImplicitQuasiNewton( diff --git a/figures/compressible_euler/schaer_mountain_initial.png b/figures/compressible_euler/schaer_mountain_initial.png index 7ad5015df27c0e9f1d2e175737e2007f32cf665f..5e78c469ae9d05a4bd127f37c464891b89b4fb9e 100644 GIT binary patch literal 21510 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 DTRCkb literal 17903 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 diff --git a/gusto/solvers/parameters.py b/gusto/solvers/parameters.py index a7f61edb0..b43703455 100644 --- a/gusto/solvers/parameters.py +++ b/gusto/solvers/parameters.py @@ -4,7 +4,7 @@ """ from gusto.core.function_spaces import is_cg -__all__ = ['mass_parameters'] +__all__ = ['mass_parameters', 'hydrostatic_parameters'] def mass_parameters(V, spaces=None, ignore_vertical=True): @@ -97,3 +97,28 @@ def mass_parameters(V, spaces=None, ignore_vertical=True): } return parameters + + +hydrostatic_parameters = { + 'mat_type': 'matfree', + 'ksp_type': 'preonly', + 'pc_type': 'python', + 'pc_python_type': 'firedrake.SCPC', + # Velocity mass operator is singular in the hydrostatic case. + # So for reconstruction, we eliminate rho into u + 'pc_sc_eliminate_fields': '1, 0', + 'condensed_field': { + 'ksp_type': 'fgmres', + 'ksp_rtol': 1.0e-8, + 'ksp_atol': 1.0e-8, + 'ksp_max_it': 100, + 'pc_type': 'gamg', + 'pc_gamg_sym_graph': True, + 'mg_levels': { + 'ksp_type': 'gmres', + 'ksp_max_it': 5, + 'pc_type': 'bjacobi', + 'sub_pc_type': 'ilu' + } + } +} \ No newline at end of file diff --git a/gusto/timestepping/semi_implicit_quasi_newton.py b/gusto/timestepping/semi_implicit_quasi_newton.py index b980cf94b..7920cb65c 100644 --- a/gusto/timestepping/semi_implicit_quasi_newton.py +++ b/gusto/timestepping/semi_implicit_quasi_newton.py @@ -114,12 +114,16 @@ def __init__(self, equation_set, io, transport_schemes, spatial_methods, self.num_outer = num_outer self.num_inner = num_inner self.alpha = Constant(alpha) - self._alpha_original = Constant(alpha) self.predictor = predictor self.accelerator = accelerator + + # Options relating to reference profiles and spin-up + self._alpha_original = Constant(alpha) self.reference_update_freq = reference_update_freq self.to_update_ref_profile = False self.spinup_steps = spinup_steps + self.spinup_begun = False + self.spinup_done = False # Flag for if we have simultaneous transport self.simult = False @@ -359,13 +363,43 @@ def update_reference_profiles(self): if float(self.t) + self.reference_update_freq > self.last_ref_update_time: self.equation.X_ref.assign(self.x.n(self.field_name)) self.last_ref_update_time = float(self.t) - if hasattr(self.linear_solver, 'update_reference_profiles'): - self.linear_solver.update_reference_profiles() + self.linear_solver.update_reference_profiles() elif self.to_update_ref_profile: - if hasattr(self.linear_solver, 'update_reference_profiles'): - self.linear_solver.update_reference_profiles() - self.to_update_ref_profile = False + self.linear_solver.update_reference_profiles() + self.to_update_ref_profile = False + + def start_spinup(self): + """ + Initialises the spin-up period, so that the scheme is implicit by + setting the off-centering parameter alpha to be 1. + """ + logger.debug('Starting spin-up period') + # Update alpha + self.alpha.assign(1.0) + self.linear_solver.alpha.assign(1.0) + # We need to tell solvers that they may need rebuilding + self.linear_solver.update_reference_profiles() + self.forcing.solvers['explicit'].invalidate_jacobian() + self.forcing.solvers['implicit'].invalidate_jacobian() + # This only needs doing once, so update the flag + self.spinup_begun = True + + def finish_spinup(self): + """ + Finishes the spin-up period, returning the off-centering parameter + to its original value. + """ + logger.debug('Finishing spin-up period') + # Update alpha + self.alpha.assign(self._alpha_original) + self.linear_solver.alpha.assign(self._alpha_original) + # We need to tell solvers that they may need rebuilding + self.linear_solver.update_reference_profiles() + self.forcing.solvers['explicit'].invalidate_jacobian() + self.forcing.solvers['implicit'].invalidate_jacobian() + # This only needs doing once, so update the flag + self.spinup_done = True def timestep(self): """Defines the timestep""" @@ -383,13 +417,11 @@ def timestep(self): self.update_reference_profiles() # Are we in spin-up period? -------------------------------------------- - if self.step < self.spinup_steps + 1: # steps numbered from 1 onwards - self.alpha.assign(1.0) - self.linear_solver.alpha.assign(1.0) - logger.info('Spin-up step') - else: - self.alpha.assign(self._alpha_original) - self.linear_solver.alpha.assign(self._alpha_original) + # Note: steps numbered from 1 onwards + if self.step < self.spinup_steps + 1 and not self.spinup_begun: + self.start_spinup() + elif self.step >= self.spinup_steps + 1 and not self.spinup_done: + self.finish_spinup() # Slow physics --------------------------------------------------------- x_after_slow(self.field_name).assign(xn(self.field_name)) diff --git a/plotting/compressible_euler/plot_schaer_mountain.py b/plotting/compressible_euler/plot_schaer_mountain.py index 99172f3cc..6b78b27b2 100644 --- a/plotting/compressible_euler/plot_schaer_mountain.py +++ b/plotting/compressible_euler/plot_schaer_mountain.py @@ -15,7 +15,7 @@ extract_gusto_coords, extract_gusto_field, reshape_gusto_data ) -test = 'schaer_mountain' +test = 'schaer_alpha_0p51' # ---------------------------------------------------------------------------- # # Directory for results and plots @@ -35,8 +35,8 @@ r'$w$ (m s$^{-1}$)', r'$\Delta\theta$ (K)' ] final_contours = [ - np.linspace(-0.04, 0.04, 21), np.linspace(-0.025, 0.025, 21), - np.linspace(-0.04, 0.04, 21), np.linspace(-0.025, 0.025, 21) + np.linspace(-1.0, 1.0, 21), np.linspace(-1.0, 1.0, 21), + np.linspace(-1.0, 1.0, 21), np.linspace(-1.0, 1.0, 21) ] # ---------------------------------------------------------------------------- # @@ -116,7 +116,7 @@ ylims_zoom = [0., 12.] fig, axarray = plt.subplots(2, 2, figsize=(18, 12), sharex='row', sharey='row') -time_idx = -1 +time_idx = 1 for i, (ax, field_name, colour_scheme, field_label, contours) in \ enumerate(zip( @@ -129,24 +129,24 @@ coords_X, coords_Y = extract_gusto_coords(data_file, field_name) time = data_file['time'][time_idx] - # Filter data for panels that are zoomed in mountain region - if i in [2, 3]: - data_dict = { - 'X': coords_X, - 'Y': coords_Y, - 'field': field_data - } - data_frame = pd.DataFrame(data_dict) - - data_frame = data_frame[ - (data_frame['X'] >= xlims_zoom[0]) - & (data_frame['X'] <= xlims_zoom[1]) - & (data_frame['Y'] >= ylims_zoom[0]) - & (data_frame['Y'] <= ylims_zoom[1]) - ] - field_data = data_frame['field'].values[:] - coords_X = data_frame['X'].values[:] - coords_Y = data_frame['Y'].values[:] + # # Filter data for panels that are zoomed in mountain region + # if i in [2, 3]: + # data_dict = { + # 'X': coords_X, + # 'Y': coords_Y, + # 'field': field_data + # } + # data_frame = pd.DataFrame(data_dict) + + # data_frame = data_frame[ + # (data_frame['X'] >= xlims_zoom[0]) + # & (data_frame['X'] <= xlims_zoom[1]) + # & (data_frame['Y'] >= ylims_zoom[0]) + # & (data_frame['Y'] <= ylims_zoom[1]) + # ] + # field_data = data_frame['field'].values[:] + # coords_X = data_frame['X'].values[:] + # coords_Y = data_frame['Y'].values[:] field_data, coords_X, coords_Y = \ reshape_gusto_data(field_data, coords_X, coords_Y) From 4cb089cd8302a4670004bc0552587b59797da071 Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Fri, 3 Jan 2025 19:18:32 +0000 Subject: [PATCH 09/10] it doesn't seem to be working now, so start a new branch ... --- .../skamarock_klemp_nonhydrostatic.py | 29 +- .../equations/compressible_euler_equations.py | 40 +- gusto/solvers/linear_solvers.py | 425 +++++++++++------- 3 files changed, 313 insertions(+), 181 deletions(-) diff --git a/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py b/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py index 5ec8ab12b..313c21337 100644 --- a/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py +++ b/examples/compressible_euler/skamarock_klemp_nonhydrostatic.py @@ -26,7 +26,8 @@ logger, SUPGOptions, Perturbation, CompressibleParameters, CompressibleEulerEquations, HydrostaticCompressibleEulerEquations, compressible_hydrostatic_balance, RungeKuttaFormulation, CompressibleSolver, - SubcyclingOptions, hydrostatic_parameters + SubcyclingOptions, dx, TestFunction, TrialFunction, ZComponent, + LinearVariationalProblem, LinearVariationalSolver ) skamarock_klemp_nonhydrostatic_defaults = { @@ -67,6 +68,8 @@ def skamarock_klemp_nonhydrostatic( # ------------------------------------------------------------------------ # element_order = 1 + alpha = 0.5 + u_eqn_type = 'vector_advection_form' # ------------------------------------------------------------------------ # # Set up model objects @@ -80,7 +83,9 @@ def skamarock_klemp_nonhydrostatic( # Equation parameters = CompressibleParameters() if hydrostatic: - eqns = HydrostaticCompressibleEulerEquations(domain, parameters) + eqns = HydrostaticCompressibleEulerEquations( + domain, parameters, u_transport_option=u_eqn_type + ) else: eqns = CompressibleEulerEquations(domain, parameters) @@ -110,7 +115,7 @@ def skamarock_klemp_nonhydrostatic( dump_vtus=False, dump_nc=True, ) - diagnostic_fields = [Perturbation('theta')] + diagnostic_fields = [Perturbation('theta'), ZComponent('u')] io = IO(domain, output, diagnostic_fields=diagnostic_fields) # Transport schemes @@ -136,8 +141,7 @@ def skamarock_klemp_nonhydrostatic( # Linear solver if hydrostatic: linear_solver = CompressibleSolver( - eqns, solver_parameters=hydrostatic_parameters, - overwrite_solver_parameters=True + eqns, alpha=alpha ) else: linear_solver = CompressibleSolver(eqns) @@ -145,7 +149,7 @@ def skamarock_klemp_nonhydrostatic( # Time stepper stepper = SemiImplicitQuasiNewton( eqns, io, transported_fields, transport_methods, - linear_solver=linear_solver + linear_solver=linear_solver, alpha=alpha, num_outer=2, num_inner=2 ) # ------------------------------------------------------------------------ # @@ -175,12 +179,23 @@ def skamarock_klemp_nonhydrostatic( # Calculate hydrostatic exner compressible_hydrostatic_balance(eqns, theta_b, rho_b) + # Define initial theta theta_pert = ( deltaTheta * sin(pi*z/domain_height) / (1 + (x - domain_width/2)**2 / pert_width**2) ) theta0.interpolate(theta_b + theta_pert) - rho0.assign(rho_b) + + # find perturbed rho + gamma = TestFunction(Vr) + rho_trial = TrialFunction(Vr) + dx_qp = dx(degree=domain.max_quad_degree) + lhs = gamma * rho_trial * dx_qp + rhs = gamma * (rho_b * theta_b / theta0) * dx_qp + rho_problem = LinearVariationalProblem(lhs, rhs, rho0) + rho_solver = LinearVariationalSolver(rho_problem) + rho_solver.solve() + u0.project(as_vector([wind_initial, 0.0])) stepper.set_reference_profiles([('rho', rho_b), ('theta', theta_b)]) diff --git a/gusto/equations/compressible_euler_equations.py b/gusto/equations/compressible_euler_equations.py index ac0721394..272631923 100644 --- a/gusto/equations/compressible_euler_equations.py +++ b/gusto/equations/compressible_euler_equations.py @@ -361,10 +361,10 @@ def __init__(self, domain, parameters, sponge_options=None, Constant(-1.0)*inner(k, w)*inner(k, u)/domain.dt*dx, 'u'), self.X)) ) - # Add Euler-Poincare term - self.residual += hydrostatic(subject(prognostic( - Constant(0.5)*div(w)*inner(u_hori, u)*dx, 'u'), self.X) - ) + # # Add Euler-Poincare term + # self.residual += hydrostatic(subject(prognostic( + # Constant(0.5)*div(w)*inner(u_hori, u)*dx, 'u'), self.X) + # ) # -------------------------------------------------------------------- # # Only transport horizontal wind @@ -377,22 +377,22 @@ def __init__(self, domain, parameters, sponge_options=None, map_if_false=keep ) - u_term = prognostic( - advection_equation_circulation_form(domain, w, u_hori, u), 'u' - ) + # u_term = prognostic( + # advection_equation_circulation_form(domain, w, u_hori, u), 'u' + # ) - # # Velocity transport term -- depends on formulation - # if u_transport_option == "vector_invariant_form": - # u_term = prognostic(vector_invariant_form(domain, w, u_hori, u), 'u') - # elif u_transport_option == "vector_advection_form": - # u_term = prognostic(advection_form(w, u_hori, u), 'u') - # elif u_transport_option == "circulation_form": - # circ_form = prognostic( - # advection_equation_circulation_form(domain, w, u_hori, u), 'u' - # ) - # ke_form = prognostic(kinetic_energy_form(w, u_hori, u), 'u') - # u_term = ke_form + circ_form - # else: - # raise ValueError("Invalid u_transport_option: %s" % u_transport_option) + # Velocity transport term -- depends on formulation + if u_transport_option == "vector_invariant_form": + u_term = prognostic(vector_invariant_form(domain, w, u_hori, u), 'u') + elif u_transport_option == "vector_advection_form": + u_term = prognostic(advection_form(w, u_hori, u), 'u') + elif u_transport_option == "circulation_form": + circ_form = prognostic( + advection_equation_circulation_form(domain, w, u_hori, u), 'u' + ) + ke_form = prognostic(kinetic_energy_form(w, u_hori, u), 'u') + u_term = ke_form + circ_form + else: + raise ValueError("Invalid u_transport_option: %s" % u_transport_option) self.residual += horizontal_prognostic(subject(u_term, self.X)) diff --git a/gusto/solvers/linear_solvers.py b/gusto/solvers/linear_solvers.py index c37f93062..57775ab8e 100644 --- a/gusto/solvers/linear_solvers.py +++ b/gusto/solvers/linear_solvers.py @@ -135,7 +135,7 @@ class CompressibleSolver(TimesteppingSolver): (3) Reconstruct theta """ - solver_parameters = {'mat_type': 'matfree', + hybrid_parameters = {'mat_type': 'matfree', 'ksp_type': 'preonly', 'pc_type': 'python', 'pc_python_type': 'firedrake.SCPC', @@ -152,8 +152,33 @@ class CompressibleSolver(TimesteppingSolver): 'pc_type': 'bjacobi', 'sub_pc_type': 'ilu'}}} - def __init__(self, equations, alpha=0.5, tau_values=None, - solver_parameters=None, overwrite_solver_parameters=False): + full_parameters = { + 'pc_type': 'fieldsplit', + 'pc_fieldsplit_type': 'schur', + 'ksp_type': 'gmres', + 'ksp_max_it': 100, + 'ksp_gmres_restart': 50, + 'pc_fieldsplit_schur_fact_type': 'FULL', + 'pc_fieldsplit_schur_precondition': 'selfp', + 'fieldsplit_0': {'ksp_type': 'preonly', + 'pc_type': 'bjacobi', + 'sub_pc_type': 'ilu'}, + 'fieldsplit_1': {'ksp_type': 'preonly', + 'pc_type': 'gamg', + 'mg_levels': {'ksp_type': 'chebyshev', + 'ksp_chebyshev_esteig': True, + 'ksp_max_it': 1, + 'pc_type': 'bjacobi', + 'sub_pc_type': 'ilu'}} + } + + solver_parameters = None + + def __init__( + self, equations, alpha=0.5, tau_values=None, + solver_parameters=None, overwrite_solver_parameters=False, + formulation='hybridized' + ): """ Args: equations (:class:`PrognosticEquation`): the model's equation. @@ -168,9 +193,20 @@ def __init__(self, equations, alpha=0.5, tau_values=None, `solver_parameters` that have been passed in. If False then update the default parameters with the `solver_parameters` passed in. Defaults to False. + formulation (str, optional): the formulation to use. Valid options + are 'hybridized' and 'full'. Defaults to 'hybridized'. """ + assert formulation in ['hybridized', 'full'], \ + f'Invalid solver formulation: {formulation}' + self.equations = equations self.quadrature_degree = equations.domain.max_quad_degree + self.formulation = formulation + + if formulation == 'hybridized': + self.solver_parameters = self.hybrid_parameters + elif formulation == 'full': + self.solver_parameters = self.full_parameters super().__init__(equations, alpha, tau_values, solver_parameters, overwrite_solver_parameters) @@ -178,43 +214,74 @@ def __init__(self, equations, alpha=0.5, tau_values=None, @timed_function("Gusto:SolverSetup") def _setup_solver(self): + # Declare constants and relaxation parameters -------------------------- equations = self.equations cp = equations.parameters.cp dt = self.dt + # Set relaxation parameters. If an alternative has not been given, set # to semi-implicit off-centering factor beta_u = dt*self.tau_values.get("u", self.alpha) beta_t = dt*self.tau_values.get("theta", self.alpha) beta_r = dt*self.tau_values.get("rho", self.alpha) + # Specify degree for some terms as estimated degree is too large ------- + dx_qp = dx(degree=(equations.domain.max_quad_degree)) + dS_v_qp = dS_v(degree=(equations.domain.max_quad_degree)) + dS_h_qp = dS_h(degree=(equations.domain.max_quad_degree)) + ds_v_qp = ds_v(degree=(equations.domain.max_quad_degree)) + ds_tb_qp = (ds_t(degree=(equations.domain.max_quad_degree)) + + ds_b(degree=(equations.domain.max_quad_degree))) + + # Split up the rhs vector (symbolically) ------------------------------- + self.xrhs = Function(self.equations.function_space) + u_in, rho_in, theta_in = split(self.xrhs)[0:3] + + # Get the function spaces ---------------------------------------------- Vu = equations.domain.spaces("HDiv") - Vu_broken = FunctionSpace(equations.domain.mesh, BrokenElement(Vu.ufl_element())) Vtheta = equations.domain.spaces("theta") Vrho = equations.domain.spaces("DG") - h_deg = Vrho.ufl_element().degree()[0] - v_deg = Vrho.ufl_element().degree()[1] - Vtrace = FunctionSpace(equations.domain.mesh, "HDiv Trace", degree=(h_deg, v_deg)) + if self.formulation == 'hybridized': + h_deg = Vrho.ufl_element().degree()[0] + v_deg = Vrho.ufl_element().degree()[1] + Vtrace = FunctionSpace(equations.domain.mesh, "HDiv Trace", degree=(h_deg, v_deg)) + Vu_broken = FunctionSpace(equations.domain.mesh, BrokenElement(Vu.ufl_element())) - # Split up the rhs vector (symbolically) - self.xrhs = Function(self.equations.function_space) - u_in, rho_in, theta_in = split(self.xrhs)[0:3] - - # Build the function space for "broken" u, rho, and pressure trace - M = MixedFunctionSpace((Vu_broken, Vrho, Vtrace)) - w, phi, dl = TestFunctions(M) - u, rho, l0 = TrialFunctions(M) + # Build the function space for "broken" u, rho, and pressure trace + M = MixedFunctionSpace((Vu_broken, Vrho, Vtrace)) + w, phi, dl = TestFunctions(M) + u, rho, l0 = TrialFunctions(M) - n = FacetNormal(equations.domain.mesh) + elif self.formulation == 'full': + # Mixed function space is just for velocity and density + M = MixedFunctionSpace((Vu, Vrho)) + w, phi = TestFunctions(M) + u, rho = TrialFunctions(M) - # Get background fields + # Get background fields ------------------------------------------------ _, rhobar, thetabar = split(equations.X_ref)[0:3] exnerbar = thermodynamics.exner_pressure(equations.parameters, rhobar, thetabar) exnerbar_rho = thermodynamics.dexner_drho(equations.parameters, rhobar, thetabar) exnerbar_theta = thermodynamics.dexner_dtheta(equations.parameters, rhobar, thetabar) - # Analytical (approximate) elimination of theta + # Set up elimination of theta ========================================= k = equations.domain.k # Upward pointing unit vector + n = FacetNormal(equations.domain.mesh) + + # Vertical projection + def V(u): + return k*inner(u, k) + + # Hydrostatic projection + h_project = lambda u: u - k*inner(u, k) + + if isinstance(self.equations, HydrostaticCompressibleEulerEquations): + u_mass = inner(w, (h_project(u) - u_in))*dx + else: + u_mass = inner(w, (u - u_in))*dx + + # Analytical (approximate) elimination of theta theta = -dot(k, u)*dot(k, grad(thetabar))*beta_t + theta_in # Only include theta' (rather than exner') in the vertical @@ -224,21 +291,6 @@ def _setup_solver(self): # for linear perturbations) exner = exnerbar_theta*theta + exnerbar_rho*rho - # Vertical projection - def V(u): - return k*inner(u, k) - - # hydrostatic projection - h_project = lambda u: u - k*inner(u, k) - - # Specify degree for some terms as estimated degree is too large - dx_qp = dx(degree=(equations.domain.max_quad_degree)) - dS_v_qp = dS_v(degree=(equations.domain.max_quad_degree)) - dS_h_qp = dS_h(degree=(equations.domain.max_quad_degree)) - ds_v_qp = ds_v(degree=(equations.domain.max_quad_degree)) - ds_tb_qp = (ds_t(degree=(equations.domain.max_quad_degree)) - + ds_b(degree=(equations.domain.max_quad_degree))) - # Add effect of density of water upon theta, using moisture reference profiles # TODO: Explore if this is the right thing to do for the linear problem if equations.active_tracers is not None: @@ -258,65 +310,92 @@ def V(u): theta_w = theta thetabar_w = thetabar - _l0 = TrialFunction(Vtrace) - _dl = TestFunction(Vtrace) - a_tr = _dl('+')*_l0('+')*(dS_v_qp + dS_h_qp) + _dl*_l0*ds_v_qp + _dl*_l0*ds_tb_qp - - def L_tr(f): - return _dl('+')*avg(f)*(dS_v_qp + dS_h_qp) + _dl*f*ds_v_qp + _dl*f*ds_tb_qp - - cg_ilu_parameters = {'ksp_type': 'cg', - 'pc_type': 'bjacobi', - 'sub_pc_type': 'ilu'} - - # Project field averages into functions on the trace space - rhobar_avg = Function(Vtrace) - exnerbar_avg = Function(Vtrace) - - rho_avg_prb = LinearVariationalProblem(a_tr, L_tr(rhobar), rhobar_avg, - constant_jacobian=True) - exner_avg_prb = LinearVariationalProblem(a_tr, L_tr(exnerbar), exnerbar_avg, - constant_jacobian=True) - - self.rho_avg_solver = LinearVariationalSolver(rho_avg_prb, - solver_parameters=cg_ilu_parameters, - options_prefix='rhobar_avg_solver') - self.exner_avg_solver = LinearVariationalSolver(exner_avg_prb, - solver_parameters=cg_ilu_parameters, - options_prefix='exnerbar_avg_solver') - - # "broken" u, rho, and trace system - # NOTE: no ds_v integrals since equations are defined on - # a periodic (or sphere) base mesh. - if isinstance(self.equations, HydrostaticCompressibleEulerEquations): - u_mass = inner(w, (h_project(u) - u_in))*dx - else: - u_mass = inner(w, (u - u_in))*dx - - eqn = ( - # momentum equation - u_mass - - beta_u*cp*div(theta_w*V(w))*exnerbar*dx_qp - # following does nothing but is preserved in the comments - # to remind us why (because V(w) is purely vertical). - # + beta*cp*jump(theta_w*V(w), n=n)*exnerbar_avg('+')*dS_v_qp - + beta_u*cp*jump(theta_w*V(w), n=n)*exnerbar_avg('+')*dS_h_qp - + beta_u*cp*dot(theta_w*V(w), n)*exnerbar_avg*ds_tb_qp - - beta_u*cp*div(thetabar_w*w)*exner*dx_qp - # trace terms appearing after integrating momentum equation - + beta_u*cp*jump(thetabar_w*w, n=n)*l0('+')*(dS_v_qp + dS_h_qp) - + beta_u*cp*dot(thetabar_w*w, n)*l0*(ds_tb_qp + ds_v_qp) - # mass continuity equation - + (phi*(rho - rho_in) - beta_r*inner(grad(phi), u)*rhobar)*dx - + beta_r*jump(phi*u, n=n)*rhobar_avg('+')*(dS_v + dS_h) - # term added because u.n=0 is enforced weakly via the traces - + beta_r*phi*dot(u, n)*rhobar_avg*(ds_tb + ds_v) - # constraint equation to enforce continuity of the velocity - # through the interior facets and weakly impose the no-slip - # condition - + dl('+')*jump(u, n=n)*(dS_v + dS_h) - + dl*dot(u, n)*(ds_t + ds_b + ds_v) - ) + cg_ilu_parameters = { + 'ksp_type': 'cg', + 'pc_type': 'bjacobi', + 'sub_pc_type': 'ilu' + } + + # Hybridization formulation ============================================ + if self.formulation == 'hybridized': + _l0 = TrialFunction(Vtrace) + _dl = TestFunction(Vtrace) + a_tr = _dl('+')*_l0('+')*(dS_v_qp + dS_h_qp) + _dl*_l0*ds_v_qp + _dl*_l0*ds_tb_qp + + def L_tr(f): + return _dl('+')*avg(f)*(dS_v_qp + dS_h_qp) + _dl*f*ds_v_qp + _dl*f*ds_tb_qp + + # Project field averages into functions on the trace space + rhobar_avg = Function(Vtrace) + exnerbar_avg = Function(Vtrace) + + rho_avg_prb = LinearVariationalProblem( + a_tr, L_tr(rhobar), rhobar_avg, constant_jacobian=True + ) + exner_avg_prb = LinearVariationalProblem( + a_tr, L_tr(exnerbar), exnerbar_avg, constant_jacobian=True + ) + + self.rho_avg_solver = LinearVariationalSolver( + rho_avg_prb, solver_parameters=cg_ilu_parameters, + options_prefix='rhobar_avg_solver' + ) + self.exner_avg_solver = LinearVariationalSolver( + exner_avg_prb, solver_parameters=cg_ilu_parameters, + options_prefix='exnerbar_avg_solver' + ) + + # Function for the hybridized solutions + self.urhol0 = Function(M) + + # "broken" u, rho, and trace system + # NOTE: no ds_v integrals since equations are defined on + # a periodic (or sphere) base mesh. + + eqn = ( + # momentum equation + u_mass + - beta_u*cp*div(theta_w*V(w))*exnerbar*dx_qp + # following does nothing but is preserved in the comments + # to remind us why (because V(w) is purely vertical). + # + beta*cp*jump(theta_w*V(w), n=n)*exnerbar_avg('+')*dS_v_qp + + beta_u*cp*jump(theta_w*V(w), n=n)*exnerbar_avg('+')*dS_h_qp + + beta_u*cp*dot(theta_w*V(w), n)*exnerbar_avg*ds_tb_qp + - beta_u*cp*div(thetabar_w*w)*exner*dx_qp + # trace terms appearing after integrating momentum equation + + beta_u*cp*jump(thetabar_w*w, n=n)*l0('+')*(dS_v_qp + dS_h_qp) + + beta_u*cp*dot(thetabar_w*w, n)*l0*(ds_tb_qp + ds_v_qp) + # mass continuity equation + + (phi*(rho - rho_in) - beta_r*inner(grad(phi), u)*rhobar)*dx + + beta_r*jump(phi*u, n=n)*rhobar_avg('+')*(dS_v + dS_h) + # term added because u.n=0 is enforced weakly via the traces + + beta_r*phi*dot(u, n)*rhobar_avg*(ds_tb + ds_v) + # constraint equation to enforce continuity of the velocity + # through the interior facets and weakly impose the no-slip + # condition + + dl('+')*jump(u, n=n)*(dS_v + dS_h) + + dl*dot(u, n)*(ds_t + ds_b + ds_v) + ) + + # Full formulation ===================================================== + elif self.formulation == 'full': + # Function to store result of u-rho solve + self.urho = Function(M) + one = Constant(1.0) + eqn = ( + u_mass + - beta_u*cp*div(theta_w*V(w))*exnerbar*dx_qp + # following does nothing but is preserved in the comments + # to remind us why (because V(w) is purely vertical. + # + beta*cp*jump(theta*V(w),n)*avg(pibar)*dS_v_qp + - beta_u*cp*div(thetabar_w*w)*exner*dx_qp + - (one - beta_u)*cp*div(thetabar_w*V(w))*exner*dx_qp + + beta_u*cp*jump(thetabar_w*w, n)*avg(exner)*dS_v_qp + + (phi*(rho - rho_in) - beta_r*inner(grad(phi), u)*rhobar)*dx + + beta_r*jump(phi*u, n)*avg(rhobar)*(dS_v + dS_h) + ) + + # Add additional terms ================================================= # TODO: can we get this term using FML? # contribution of the sponge term if hasattr(self.equations, "mu"): @@ -329,68 +408,99 @@ def L_tr(f): aeqn = lhs(eqn) Leqn = rhs(eqn) - # Function for the hybridized solutions - self.urhol0 = Function(M) - - hybridized_prb = LinearVariationalProblem(aeqn, Leqn, self.urhol0, - constant_jacobian=True) - hybridized_solver = LinearVariationalSolver(hybridized_prb, - solver_parameters=self.solver_parameters, - options_prefix='ImplicitSolver') - self.hybridized_solver = hybridized_solver - - # Project broken u into the HDiv space using facet averaging. - # Weight function counting the dofs of the HDiv element: - self._weight = Function(Vu) - weight_kernel = AverageWeightings(Vu) - weight_kernel.apply(self._weight) - - # Averaging kernel - self._average_kernel = AverageKernel(Vu) + # Set up the problem =================================================== + if self.formulation == 'hybridized': + hybridized_prb = LinearVariationalProblem( + aeqn, Leqn, self.urhol0, constant_jacobian=True + ) + hybridized_solver = LinearVariationalSolver( + hybridized_prb, solver_parameters=self.solver_parameters, + options_prefix='HybridImplicitSolver' + ) + self.hybridized_solver = hybridized_solver + + # Project broken u into the HDiv space using facet averaging. + # Weight function counting the dofs of the HDiv element: + self._weight = Function(Vu) + weight_kernel = AverageWeightings(Vu) + weight_kernel.apply(self._weight) + + # Averaging kernel + self._average_kernel = AverageKernel(Vu) + + # HDiv-conforming velocity + self.u_hdiv = Function(Vu) + u_hdiv = self.u_hdiv + + # Store boundary conditions for the div-conforming velocity to apply + # post-solve + self.bcs = self.equations.bcs['u'] - # HDiv-conforming velocity - self.u_hdiv = Function(Vu) - - # Reconstruction of theta + else: + # Boundary conditions (assumes extruded mesh) + self.bcs = [ + DirichletBC(M.sub(0), 0.0, "bottom"), + DirichletBC(M.sub(0), 0.0, "top") + ] + + # Solver for u, rho + urho_problem = LinearVariationalProblem( + aeqn, Leqn, self.urho, bcs=self.bcs + ) + self.urho_solver = LinearVariationalSolver( + urho_problem, solver_parameters=self.solver_parameters, + options_prefix='ImplicitSolver' + ) + # Velocity to appear in theta reconstruction + u_hdiv = self.urho.subfunctions[0] + + # Reconstruction of theta ============================================== theta = TrialFunction(Vtheta) gamma = TestFunction(Vtheta) self.theta = Function(Vtheta) theta_eqn = gamma*(theta - theta_in - + dot(k, self.u_hdiv)*dot(k, grad(thetabar))*beta_t)*dx + + dot(k, u_hdiv)*dot(k, grad(thetabar))*beta_t)*dx - theta_problem = LinearVariationalProblem(lhs(theta_eqn), rhs(theta_eqn), self.theta, - constant_jacobian=True) - self.theta_solver = LinearVariationalSolver(theta_problem, - solver_parameters=cg_ilu_parameters, - options_prefix='thetabacksubstitution') + theta_problem = LinearVariationalProblem( + lhs(theta_eqn), rhs(theta_eqn), self.theta, constant_jacobian=True + ) + self.theta_solver = LinearVariationalSolver( + theta_problem, solver_parameters=cg_ilu_parameters, + options_prefix='thetabacksubstitution' + ) - # Store boundary conditions for the div-conforming velocity to apply - # post-solve - self.bcs = self.equations.bcs['u'] - - # Log residuals on hybridized solver - self.log_ksp_residuals(self.hybridized_solver.snes.ksp) - # Log residuals on the trace system too - python_context = self.hybridized_solver.snes.ksp.pc.getPythonContext() - attach_custom_monitor(python_context, logging_ksp_monitor_true_residual) + if self.formulation == 'hybridized': + # Log residuals on hybridized solver + self.log_ksp_residuals(self.hybridized_solver.snes.ksp) + # Log residuals on the trace system too + python_context = self.hybridized_solver.snes.ksp.pc.getPythonContext() + attach_custom_monitor(python_context, logging_ksp_monitor_true_residual) + elif self.formulation == 'full': + # Log residuals on mixed solver + self.log_ksp_residuals(self.urho_solver.snes.ksp) @timed_function("Gusto:UpdateReferenceProfiles") def update_reference_profiles(self): - with timed_region("Gusto:HybridProjectRhobar"): - logger.info('Compressible linear solver: rho average solve') - self.rho_avg_solver.solve() - with timed_region("Gusto:HybridProjectExnerbar"): - logger.info('Compressible linear solver: Exner average solve') - self.exner_avg_solver.solve() + if self.formulation == 'hydridized': + with timed_region("Gusto:HybridProjectRhobar"): + logger.info('Compressible linear solver: rho average solve') + self.rho_avg_solver.solve() + + with timed_region("Gusto:HybridProjectExnerbar"): + logger.info('Compressible linear solver: Exner average solve') + self.exner_avg_solver.solve() - # Because the left hand side of the hybridised problem depends - # on the reference profile, the Jacobian matrix should change - # when the reference profiles are updated. This call will tell - # the hybridized_solver to reassemble the Jacobian next time - # `solve` is called. - self.hybridized_solver.invalidate_jacobian() + # Because the left hand side of the hybridised problem depends + # on the reference profile, the Jacobian matrix should change + # when the reference profiles are updated. This call will tell + # the hybridized_solver to reassemble the Jacobian next time + # `solve` is called. + self.hybridized_solver.invalidate_jacobian() + + elif self.formulation == 'full': + self.urho_solver.invalidate_jacobian() @timed_function("Gusto:LinearSolve") def solve(self, xrhs, dy): @@ -405,23 +515,30 @@ def solve(self, xrhs, dy): """ self.xrhs.assign(xrhs) - # Solve the hybridized system - logger.info('Compressible linear solver: hybridized solve') - self.hybridized_solver.solve() + # MIXED SOLVE ========================================================== + if self.formulation == 'hybridized': + # Solve the hybridized system + logger.info('Compressible linear solver: hybridized solve') + self.hybridized_solver.solve() + + broken_u, rho1, _ = self.urhol0.subfunctions + u1 = self.u_hdiv - broken_u, rho1, _ = self.urhol0.subfunctions - u1 = self.u_hdiv + # Project broken_u into the HDiv space + u1.assign(0.0) - # Project broken_u into the HDiv space - u1.assign(0.0) + with timed_region("Gusto:HybridProjectHDiv"): + logger.info('Compressible linear solver: restore continuity') + self._average_kernel.apply(u1, self._weight, broken_u) - with timed_region("Gusto:HybridProjectHDiv"): - logger.info('Compressible linear solver: restore continuity') - self._average_kernel.apply(u1, self._weight, broken_u) + # Reapply bcs to ensure they are satisfied + for bc in self.bcs: + bc.apply(u1) - # Reapply bcs to ensure they are satisfied - for bc in self.bcs: - bc.apply(u1) + elif self.formulation == 'full': + logger.info('Compressible linear solver: mixed solve') + self.urho_solver.solve() + u1, rho1 = self.urho.subfunctions # Copy back into u and rho cpts of dy u, rho, theta = dy.subfunctions[0:3] From 1f7bff4426370f007622d9c994ef044d715d258b Mon Sep 17 00:00:00 2001 From: Tom Bendall Date: Wed, 2 Apr 2025 21:51:16 +0100 Subject: [PATCH 10/10] fix conflicts --- .../test_compressible_euler_examples.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/examples/compressible_euler/test_compressible_euler_examples.py b/examples/compressible_euler/test_compressible_euler_examples.py index b4bdde2f3..b060f2403 100644 --- a/examples/compressible_euler/test_compressible_euler_examples.py +++ b/examples/compressible_euler/test_compressible_euler_examples.py @@ -65,11 +65,6 @@ def test_skamarock_klemp_nonhydrostatic_parallel(): test_skamarock_klemp_nonhydrostatic() -<<<<<<< HEAD -======= -# Hydrostatic equations not currently working -@pytest.mark.xfail ->>>>>>> origin/main def test_hyd_switch_skamarock_klemp_nonhydrostatic(): from skamarock_klemp_nonhydrostatic import skamarock_klemp_nonhydrostatic test_name = 'hyd_switch_skamarock_klemp_nonhydrostatic' @@ -84,11 +79,6 @@ def test_hyd_switch_skamarock_klemp_nonhydrostatic(): ) -<<<<<<< HEAD -======= -# Hydrostatic equations not currently working -@pytest.mark.xfail ->>>>>>> origin/main @pytest.mark.parallel(nprocs=2) def test_hyd_switch_skamarock_klemp_nonhydrostatic_parallel(): test_hyd_switch_skamarock_klemp_nonhydrostatic()