Open milankl opened 1 year ago
Same result at lower resolution (T170)
and apart from some additional waves in pressure also with implicit $\alpha = 0.5$
@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?
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
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
@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
I'm a bit confused about the vorticity anomalies at the poles, I have not seen these before.
Same with the OctahedralGaussianGrid, looks like that's a good starting point to investigate what's going on here!
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)
versus
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.