Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jablonowski test case #265

Open
milankl opened this issue Mar 22, 2023 · 6 comments
Open

Jablonowski test case #265

milankl opened this issue Mar 22, 2023 · 6 comments
Labels
dynamics 〰️ Affects the dynamical core testing 🧪 How we test things and continuous integration

Comments

@milankl
Copy link
Member

milankl commented Mar 22, 2023

In the Jablonowski (#45) test case our day-9 baroclinic wave is currently not strong enough (T255 26 levls Float64 FullGaussianGrid $\alpha=1$ implicit stepping default diffusion)

image

versus

image

image

Maybe an issue in the initial conditions or the implicit stepping dampens too aggressively? Also, I didn't wait for the steady state to equilibrate as Jablonoswki suggest.

@milankl milankl added testing 🧪 How we test things and continuous integration dynamics 〰️ Affects the dynamical core labels Mar 22, 2023
@milankl
Copy link
Member Author

milankl commented Mar 22, 2023

Same result at lower resolution (T170)

image

and apart from some additional waves in pressure also with implicit $\alpha = 0.5$

image

@milankl
Copy link
Member Author

milankl commented Mar 22, 2023

@christophernhill @jm-c any idea why that could be? 👆🏼 Compared to Jablonowski, we are about a day behind 🙈 See day 8 below, that one fits quite well and looking at our day 10 is quite similar to Jablonowski's day 9. What controls the error growth time scale in this sytem, proportional to the initial perturbation and the available potential energy in the baroclinic background flow?

image

@milankl
Copy link
Member Author

milankl commented Mar 22, 2023

Okay, a stronger perturbation $u_p = 2$ m/s instead of 1m/s and a day later (day 10) yields roughly what we are supposed to see

image

@milankl milankl added this to the v0.5 milestone Mar 23, 2023
@milankl
Copy link
Member Author

milankl commented Mar 23, 2023

With $u_p$ = 3m/s the strength of the baroclinic wave after 9 days is about correct, but it didn't travel far enough: The big vortex sits at about 65˚N, 195˚E for us but more like 60˚N, 215˚E for Jablonowski

Now actually interpolated on 850hPa

image

@milankl milankl modified the milestones: v0.5, v0.6 May 22, 2023
@milankl milankl modified the milestones: v0.6, v0.7 Aug 30, 2023
@milankl
Copy link
Member Author

milankl commented Sep 13, 2023

@hottad You can since v0.6 run the jablonoswki test as follows (pretty printing from #385 now in the main branch)

julia> using SpeedyWeather

julia> spectral_grid = SpectralGrid(trunc=85,nlev=8,Grid=OctaHEALPixGrid,dealiasing=2)
SpectralGrid:
├ Spectral:   T85 LowerTriangularMatrix{Complex{Float32}}, radius = 6.371e6 m
├ Grid:       127-ring OctaHEALPixGrid{Float32}, 16384 grid points
├ Resolution: 176km (average), 156km × 198km (Equator)
└ Vertical:   8-level SigmaCoordinates

Once we've defined the SpectralGrid we can create the zonal ridge orography from Jablonowski like so

julia> orography = ZonalRidge(spectral_grid)
ZonalRidge{Float32, OctaHEALPixGrid{Float32}} <: AbstractOrography
├ η₀::Float64 = 0.252
├ u₀::Float64 = 35.0
└── arrays: orography, geopot_surf

And their initial conditions are called ZonalWind (because it is a zonal wind), I hope I have left all parameters to their defaults, need to check whether I changed ΔT maybe?

julia> initial_conditions = ZonalWind()
ZonalWind <: InitialConditions
├ η₀::Float64 = 0.252
├ u₀::Float64 = 35.0
├ perturb_lat::Float64 = 40.0
├ perturb_lon::Float64 = 20.0
├ perturb_uₚ::Float64 = 1.0
├ perturb_radius::Float64 = 0.1
├ ΔT::Float64 = 0.0
├ Tmin::Float64 = 200.0
└ pressure_on_orography::Bool = false

Then construct the model and while we could have set all individual physics parameterizations we can also disable them all together with physics=false which skips the parameterization_tendencies! call entirely.

julia> model = PrimitiveDryModel(;spectral_grid,orography,initial_conditions,physics=false)
PrimitiveDryModel{Float32, SpeedyWeather.CPUDevice}
├ spectral_grid: SpectralGrid
├ planet: Earth
├ atmosphere: EarthAtmosphere
├ initial_conditions: ZonalWind
├ orography: ZonalRidge{Float32, OctaHEALPixGrid{Float32}}
├ physics: Bool
├ boundary_layer_drag: LinearDrag{Float32}
├ temperature_relaxation: HeldSuarez{Float32}
├ static_energy_diffusion: SpeedyWeather.StaticEnergyDiffusion{Float32}
├ vertical_advection: SpeedyWeather.CenteredVerticalAdvection{Float32, 1}
├ time_stepping: Leapfrog{Float32}
├ spectral_transform: SpectralTransform{Float32}
├ horizontal_diffusion: HyperDiffusion{Float32}
├ implicit: ImplicitPrimitiveEq{Float32}
├ geometry: Geometry{Float32}
├ constants: DynamicsConstants{Float32}
├ device_setup: SpeedyWeather.DeviceSetup{SpeedyWeather.CPUDevice, DataType}
├ output: OutputWriter{Float32, PrimitiveDry}
└ feedback: Feedback

initialize and run!

julia> simulation = initialize!(model)
SpeedyWeather.Simulation{PrimitiveDryModel{Float32, SpeedyWeather.CPUDevice}}
├ PrimitiveDryModel{Float32, SpeedyWeather.CPUDevice}
├ PrognosticVariables{Float32, PrimitiveDryModel{Float32, SpeedyWeather.CPUDevice}}
└ DiagnosticVariables{Float32, OctaHEALPixGrid{Float32}, PrimitiveDry}
julia> run!(simulation,n_days=9,output=true)

which yields

image

I'm a bit confused about the vorticity anomalies at the poles, I have not seen these before.

@milankl
Copy link
Member Author

milankl commented Sep 13, 2023

Same with the OctahedralGaussianGrid, looks like that's a good starting point to investigate what's going on here!
image

@milankl milankl removed this from the v0.7 milestone Mar 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dynamics 〰️ Affects the dynamical core testing 🧪 How we test things and continuous integration
Projects
None yet
Development

No branches or pull requests

1 participant