diff --git a/examples/near_global_ocean_simulation.jl b/examples/near_global_ocean_simulation.jl index 1f005b7bd..0a9e41859 100644 --- a/examples/near_global_ocean_simulation.jl +++ b/examples/near_global_ocean_simulation.jl @@ -105,7 +105,10 @@ radiation = Radiation(arch) # The number of snapshots that are loaded into memory is determined by # the `backend`. Here, we load 41 snapshots at a time into memory. -atmosphere = JRA55PrescribedAtmosphere(arch; backend=JRA55NetCDFBackend(41)) +tidal_potential = FieldTimeSeries("tidal_potential.jld2", "Φ"; architecture=GPU(), backend=InMemory(41)) +tidal_potential = FieldTimeSeries("tidal_potential.jld2", "Φ"; architecture=GPU(), backend=InMemory(41), boundary_conditions=FieldBoundaryConditions(tidal_potential.grid, (Center, Center, Nothing))) +Oceananigans.BoundaryConditions.fill_halo_regions!(tidal_potential) +atmosphere = JRA55PrescribedAtmosphere(arch; tidal_potential, backend=JRA55NetCDFBackend(41)) # ## The coupled simulation @@ -117,7 +120,7 @@ coupled_model = OceanSeaIceModel(ocean; atmosphere, radiation) # We then create a coupled simulation. We start with a small-ish time step of 90 seconds. # We run the simulation for 10 days with this small-ish time step. -simulation = Simulation(coupled_model; Δt=90, stop_time=10days) +simulation = Simulation(coupled_model; Δt=60, stop_time=30days) # We define a callback function to monitor the simulation's progress, @@ -176,7 +179,7 @@ run!(simulation) # After the initial spin up of 10 days, we can increase the time-step and run for longer. -simulation.stop_time = 60days +simulation.stop_time = 120days simulation.Δt = 10minutes run!(simulation) diff --git a/examples/one_degree_simulation.jl b/examples/one_degree_simulation.jl index d1c2f6ecc..2eb060318 100644 --- a/examples/one_degree_simulation.jl +++ b/examples/one_degree_simulation.jl @@ -92,7 +92,7 @@ tracer_advection = Centered() ocean = ocean_simulation(grid; momentum_advection, tracer_advection, - closure, +# closure, forcing, free_surface) diff --git a/experiments/one_degree_simulation/Manifest.toml b/experiments/one_degree_simulation/Manifest.toml index e80087e3f..1eb210671 100644 --- a/experiments/one_degree_simulation/Manifest.toml +++ b/experiments/one_degree_simulation/Manifest.toml @@ -271,13 +271,13 @@ weakdeps = ["SparseArrays"] deps = ["Adapt", "CFTime", "CUDA", "ClimaSeaIce", "CubicSplines", "DataDeps", "Dates", "Downloads", "ImageMorphology", "JLD2", "KernelAbstractions", "MPI", "NCDatasets", "Oceananigans", "OffsetArrays", "OrthogonalSphericalShellGrids", "Printf", "Scratch", "SeawaterPolynomials", "StaticArrays", "Statistics", "SurfaceFluxes", "Thermodynamics"] path = "../.." uuid = "0376089a-ecfe-4b0e-a64f-9c555d74d754" -version = "0.4.2" +version = "0.4.7" [[deps.ClimaSeaIce]] deps = ["Adapt", "KernelAbstractions", "Oceananigans", "RootSolvers", "Roots", "SeawaterPolynomials"] -git-tree-sha1 = "e53033740cf85c15ddcbe55eadf15aeb6b816d2e" +git-tree-sha1 = "f480a37fa4933fa1c698b24bde75cbfc27f5ce72" uuid = "6ba0ff68-24e6-4315-936c-2e99227c95a4" -version = "0.1.5" +version = "0.2.4" [[deps.CloseOpenIntervals]] deps = ["Static", "StaticArrayInterface"] @@ -333,9 +333,9 @@ version = "0.13.0" [[deps.CommonDataModel]] deps = ["CFTime", "DataStructures", "Dates", "Preferences", "Printf", "Statistics"] -git-tree-sha1 = "98d64d5b9e5263884276656a43c45424b3a645c2" +git-tree-sha1 = "358bf5a7d5c1387b995a43577673290c5d344758" uuid = "1fbeeb36-5f17-413c-809b-666fb144f157" -version = "0.3.7" +version = "0.3.8" [[deps.CommonSolve]] git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" @@ -485,10 +485,10 @@ uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" [[deps.DiskArrays]] -deps = ["LRUCache", "Mmap", "OffsetArrays"] -git-tree-sha1 = "5109a9314f8904f96a14b80d40dce5c9972c584f" +deps = ["LRUCache", "OffsetArrays"] +git-tree-sha1 = "ef25c513cad08d7ebbed158c91768ae32f308336" uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" -version = "0.4.10" +version = "0.3.23" [[deps.Distances]] deps = ["LinearAlgebra", "Statistics", "StatsAPI"] @@ -624,9 +624,9 @@ version = "0.8.3" [[deps.FilePathsBase]] deps = ["Compat", "Dates"] -git-tree-sha1 = "2ec417fc319faa2d768621085cc1feebbdee686b" +git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" uuid = "48062228-2e41-5def-b9a4-89aafe57970f" -version = "0.9.23" +version = "0.9.24" weakdeps = ["Mmap", "Test"] [deps.FilePathsBase.extensions] @@ -797,10 +797,10 @@ uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" version = "1.0.2" [[deps.HDF5_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] -git-tree-sha1 = "38c8874692d48d5440d5752d6c74b0c6b0b60739" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] +git-tree-sha1 = "e94f84da9af7ce9c6be049e9067e511e17ff89ec" uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" -version = "1.14.2+1" +version = "1.14.6+0" [[deps.HTTP]] deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] @@ -1273,9 +1273,9 @@ version = "0.20.22" [[deps.MPICH_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "e7159031670cee777cc2840aef7a521c3603e36c" +git-tree-sha1 = "3aa3210044138a1749dbd350a9ba8680869eb503" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.3.0+0" +version = "4.3.0+1" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] @@ -1285,9 +1285,9 @@ version = "0.1.11" [[deps.MPItrampoline_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "97aac4a518b6f01851f8821272780e1ba56fe90d" +git-tree-sha1 = "ff91ca13c7c472cef700f301c8d752bc2aaff1a8" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.5.2+0" +version = "5.5.3+0" [[deps.MacroTools]] git-tree-sha1 = "72aebe0b5051e5143a079a4685a46da330a40472" @@ -1382,9 +1382,9 @@ version = "2023.1.10" [[deps.NCDatasets]] deps = ["CFTime", "CommonDataModel", "DataStructures", "Dates", "DiskArrays", "NetCDF_jll", "NetworkOptions", "Printf"] -git-tree-sha1 = "2c9dc92001ac06d432f363f37ff5552954d9947c" +git-tree-sha1 = "4704758e7dd9c843f0a99b18a26aa2d88dd8b8e6" uuid = "85f8d34a-cbdd-5861-8df4-14fed0d494ab" -version = "0.14.6" +version = "0.14.0" [[deps.NVTX]] deps = ["Colors", "JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] @@ -1405,10 +1405,10 @@ uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "1.1.2" [[deps.NetCDF_jll]] -deps = ["Artifacts", "Blosc_jll", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "OpenMPI_jll", "XML2_jll", "Zlib_jll", "Zstd_jll", "libzip_jll"] -git-tree-sha1 = "a8af1798e4eb9ff768ce7fdefc0e957097793f15" +deps = ["Artifacts", "Blosc_jll", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML", "XML2_jll", "Zlib_jll", "Zstd_jll", "libaec_jll", "libzip_jll"] +git-tree-sha1 = "d574803b6055116af212434460adf654ce98e345" uuid = "7243133f-43d8-5620-bbf4-c2c921802cf3" -version = "400.902.209+0" +version = "401.900.300+0" [[deps.Netpbm]] deps = ["FileIO", "ImageCore", "ImageMetadata"] @@ -1427,17 +1427,18 @@ version = "0.5.5" [[deps.Oceananigans]] deps = ["Adapt", "CUDA", "Crayons", "CubedSphere", "Dates", "Distances", "DocStringExtensions", "FFTW", "GPUArrays", "Glob", "IncompleteLU", "InteractiveUtils", "IterativeSolvers", "JLD2", "KernelAbstractions", "LinearAlgebra", "Logging", "MPI", "NCDatasets", "OffsetArrays", "OrderedCollections", "Pkg", "Printf", "Random", "Rotations", "SeawaterPolynomials", "SparseArrays", "StaticArrays", "Statistics", "StructArrays", "TimesDates"] -path = "/Users/gregorywagner/Projects/alt/Oceananigans.jl" +git-tree-sha1 = "9ef8914f4d0b0f3c50cbca229b82ae4b5e854481" uuid = "9e8cae18-63c1-5223-a75c-80ca9d6e9a09" -version = "0.95.15" +version = "0.95.23" [deps.Oceananigans.extensions] OceananigansEnzymeExt = "Enzyme" OceananigansMakieExt = ["MakieCore", "Makie"] OceananigansMetalExt = "Metal" - OceananigansReactantExt = ["Reactant", "KernelAbstractions"] + OceananigansReactantExt = ["Reactant", "KernelAbstractions", "ConstructionBase"] [deps.Oceananigans.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" @@ -1483,9 +1484,9 @@ version = "0.8.1+2" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "6c1cf6181ffe0aa33eb33250ca2a60e54a15ea66" +git-tree-sha1 = "da913f03f17b449951e0461da960229d4a3d1a8c" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.7+0" +version = "5.0.7+1" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] @@ -1518,9 +1519,9 @@ version = "1.8.0" [[deps.OrthogonalSphericalShellGrids]] deps = ["Adapt", "Distances", "KernelAbstractions", "MPI", "Oceananigans", "OffsetArrays", "Statistics"] -git-tree-sha1 = "d11fd9caa8246493ca6da68bf00fef6a86bfa835" +git-tree-sha1 = "eadf4cc0db734a18b611afdaaf91d607dbdee2d8" uuid = "c2be9673-fb75-4747-82dc-aa2bb9f4aed0" -version = "0.2.1" +version = "0.2.2" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] @@ -2100,9 +2101,9 @@ version = "0.5.0" [[deps.TimeZones]] deps = ["Artifacts", "Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] -git-tree-sha1 = "38bb1023fb94bfbaf2a29e1e0de4bbba6fe0bf6d" +git-tree-sha1 = "2c705e96825b66c4a3f25031a683c06518256dd3" uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" -version = "1.21.2" +version = "1.21.3" weakdeps = ["RecipesBase"] [deps.TimeZones.extensions] @@ -2383,9 +2384,9 @@ version = "2.0.3+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "055a96774f383318750a1a5e10fd4151f04c29c5" +git-tree-sha1 = "068dfe202b0a05b8332f1e8e6b4080684b9c7700" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.46+0" +version = "1.6.47+0" [[deps.libsixel_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] diff --git a/experiments/one_degree_simulation/one_degree_simulation.jl b/experiments/one_degree_simulation/one_degree_simulation.jl index bc8bef425..3d1e70c9f 100644 --- a/experiments/one_degree_simulation/one_degree_simulation.jl +++ b/experiments/one_degree_simulation/one_degree_simulation.jl @@ -5,28 +5,28 @@ using Oceananigans using Oceananigans.Units using Dates using Printf -using GLMakie + +filename = "tidal_potential_jra55.jld2" +url = "https://www.dropbox.com/scl/fi/5qu30pcuy1z5q0s5xpwaj/" * + "tidal_potential_jra55.jld2?rlkey=2597z4vkiuq3stjsry45rpfyd&st=n42stc80&dl=0" + +if !isfile(filename) + Base.download(url, filename) +end Oceananigans.defaults.FloatType = Float64 -arch = CPU() -Nx = 256 -Ny = 128 -Nz = 32 +arch = GPU() +Nx = 360 * 4 +Ny = 170 * 4 +Nz = 60 z_faces = exponential_z_faces(; Nz, depth=6000, h=34) -underlying_grid = TripolarGrid(arch; size=(Nx, Ny, Nz), z=z_faces) +underlying_grid = TripolarGrid(arch; size=(Nx, Ny, Nz), halo=(7, 7, 7), z=z_faces) -bottom_height = regrid_bathymetry(underlying_grid; minimum_depth=30, interpolation_passes=20, major_basins=1) -view(bottom_height, 73:78, 88:89, 1) .= -1000 # open Gibraltar strait +bottom_height = regrid_bathymetry(underlying_grid; minimum_depth=20, interpolation_passes=40, major_basins=3) +#view(bottom_height, 73:78, 88:89, 1) .= -1000 # open Gibraltar strait grid = ImmersedBoundaryGrid(underlying_grid, GridFittedBottom(bottom_height); active_cells_map=true) -catke = ClimaOcean.OceanSimulations.default_ocean_closure() -viscous_closure = Oceananigans.TurbulenceClosures.HorizontalScalarDiffusivity(ν=2000) -closure = (catke, viscous_closure) - -#gm = Oceananigans.TurbulenceClosures.IsopycnalSkewSymmetricDiffusivity(κ_skew=1000, κ_symmetric=1000) -#closure = (gm, catke, viscous_closure) - dates = DateTime(1993, 1, 1) : Month(1) : DateTime(1993, 11, 1) mask = LinearlyTaperedPolarMask(southern=(-80, -70), northern=(70, 90), z=(-100, 0)) temperature = ECCOMetadata(:temperature; dates, version=ECCO4Monthly()) @@ -36,19 +36,34 @@ FT = ECCORestoring(temperature, grid; mask, rate) FS = ECCORestoring(salinity, grid; mask, rate) forcing = (T=FT, S=FS) +#= +catke = ClimaOcean.OceanSimulations.default_ocean_closure() +viscous_closure = Oceananigans.TurbulenceClosures.HorizontalScalarDiffusivity(ν=2000) +gm = Oceananigans.TurbulenceClosures.IsopycnalSkewSymmetricDiffusivity(κ_skew=1000, κ_symmetric=1000) +closure = (gm, catke, viscous_closure) momentum_advection = VectorInvariant() tracer_advection = Centered(order=2) free_surface = SplitExplicitFreeSurface(grid; substeps=70) ocean = ocean_simulation(grid; momentum_advection, tracer_advection, free_surface, forcing) +=# + +free_surface = SplitExplicitFreeSurface(grid; substeps=70) +ocean = ocean_simulation(grid; forcing, free_surface, bottom_drag_coefficient=0.01) set!(ocean.model, T=ECCOMetadata(:temperature; dates=first(dates)), S=ECCOMetadata(:salinity; dates=first(dates))) radiation = Radiation(arch) -atmosphere = JRA55PrescribedAtmosphere(arch; backend=JRA55NetCDFBackend(41)) -coupled_model = OceanSeaIceModel(ocean; atmosphere, radiation) +tidal_potential = FieldTimeSeries("tidal_potential_jra55.jld2", "Φ"; architecture=GPU(), backend=InMemory(41)) +boundary_conditions = FieldBoundaryConditions(tidal_potential.grid, (Center, Center, Nothing)) -simulation = Simulation(coupled_model; Δt=10minutes, stop_iteration=100) +tidal_potential = FieldTimeSeries("tidal_potential_jra55.jld2", "Φ"; architecture=GPU(), backend=InMemory(41), boundary_conditions) +Oceananigans.BoundaryConditions.fill_halo_regions!(tidal_potential) +atmosphere = JRA55PrescribedAtmosphere(arch; tidal_potential, backend=JRA55NetCDFBackend(41)) + +# atmosphere = JRA55PrescribedAtmosphere(arch; backend=JRA55NetCDFBackend(41)) +coupled_model = OceanSeaIceModel(ocean; atmosphere, radiation) +simulation = Simulation(coupled_model; Δt=1minutes, stop_time=5days) wall_time = Ref(time_ns()) @@ -75,5 +90,23 @@ end add_callback!(simulation, progress, IterationInterval(10)) +u, v, w = ocean.model.velocities +ζ = ∂x(v) - ∂y(u) +s = @at (Center, Center, Center) sqrt(u^2 + v^2) +outputs = merge(ocean.model.tracers, ocean.model.velocities, (; ζ, s)) +simulation.output_writers[:surface] = JLD2OutputWriter(ocean.model, outputs; + schedule = TimeInterval(3hours), + filename = "tidally_forced_surface_fields", + indices = (:, :, grid.Nz), + overwrite_existing = true, + array_type = Array{Float32}) + +simulation.output_writers[:middepth] = JLD2OutputWriter(ocean.model, outputs; + schedule = TimeInterval(3hours), + filename = "tidally_forced_deep_fields", + indices = (:, :, Int(grid.Nz/2)), + overwrite_existing = true, + array_type = Array{Float32}) + run!(simulation) diff --git a/src/Bathymetry.jl b/src/Bathymetry.jl index 4b6cda0e9..014016bb6 100644 --- a/src/Bathymetry.jl +++ b/src/Bathymetry.jl @@ -205,6 +205,7 @@ function interpolate_bathymetry_in_passes(native_z, target_grid; Nλt, Nφt = Nt = size(target_grid) Nλn, Nφn = Nn = size(native_z) + #= resxt = minimum_xspacing(target_grid) resyt = minimum_yspacing(target_grid) @@ -222,10 +223,11 @@ function interpolate_bathymetry_in_passes(native_z, target_grid; "is finer than the target grid in both horizontal directions.") return target_z end - + =# + # Interpolate in passes - latitude = y_domain(native_z.grid) longitude = x_domain(native_z.grid) + latitude = y_domain(native_z.grid) ΔNλ = floor((Nλn - Nλt) / passes) ΔNφ = floor((Nφn - Nφt) / passes) @@ -241,7 +243,6 @@ function interpolate_bathymetry_in_passes(native_z, target_grid; for pass = 1:passes - 1 new_size = (Nλ[pass], Nφ[pass], 1) - @debug "Bathymetry interpolation pass $pass with size $new_size" new_grid = LatitudeLongitudeGrid(architecture(target_grid), Float32, diff --git a/src/OceanSeaIceModels/InterfaceComputations/interpolate_atmospheric_state.jl b/src/OceanSeaIceModels/InterfaceComputations/interpolate_atmospheric_state.jl index 1015b51d8..9f8a48f86 100644 --- a/src/OceanSeaIceModels/InterfaceComputations/interpolate_atmospheric_state.jl +++ b/src/OceanSeaIceModels/InterfaceComputations/interpolate_atmospheric_state.jl @@ -1,10 +1,11 @@ using Oceananigans.Operators: intrinsic_vector -using Oceananigans.Grids: _node +using Oceananigans.Grids: _node, AbstractGrid using Oceananigans.Fields: FractionalIndices using Oceananigans.OutputReaders: TimeInterpolator using ...OceanSimulations: forcing_barotropic_potential +using ClimaOcean.OceanSimulations: BarotropicPotentialForcing, forcing_barotropic_potential using ClimaOcean.OceanSeaIceModels.PrescribedAtmospheres: PrescribedAtmosphere import ClimaOcean.OceanSeaIceModels: interpolate_atmosphere_state! @@ -12,7 +13,6 @@ import ClimaOcean.OceanSeaIceModels: interpolate_atmosphere_state! """Interpolate the atmospheric state onto the ocean / sea-ice grid.""" function interpolate_atmosphere_state!(interfaces, atmosphere::PrescribedAtmosphere, coupled_model) ocean = coupled_model.ocean - atmosphere_grid = atmosphere.grid # Basic model properties grid = ocean.model.grid @@ -40,13 +40,12 @@ function interpolate_atmosphere_state!(interfaces, atmosphere::PrescribedAtmosph # Extract info for time-interpolation u = atmosphere.velocities.u # for example - atmosphere_times = u.times atmosphere_backend = u.backend atmosphere_time_indexing = u.time_indexing - atmosphere_fields = coupled_model.interfaces.exchanger.exchange_atmosphere_state - space_fractional_indices = coupled_model.interfaces.exchanger.atmosphere_exchanger - exchange_grid = coupled_model.interfaces.exchanger.exchange_grid + atmosphere_fields = interfaces.exchanger.exchange_atmosphere_state + space_fractional_indices = interfaces.exchanger.atmosphere_exchanger + exchange_grid = interfaces.exchanger.exchange_grid # Simplify NamedTuple to reduce parameter space consumption. # See https://github.com/CliMA/ClimaOcean.jl/issues/116. @@ -106,12 +105,32 @@ function interpolate_atmosphere_state!(interfaces, atmosphere::PrescribedAtmosph auxiliary_time_indexing) end - # Set ocean barotropic pressure forcing - barotropic_potential = forcing_barotropic_potential(ocean) - ρₒ = coupled_model.interfaces.ocean_properties.reference_density - if !isnothing(barotropic_potential) - parent(barotropic_potential) .= parent(atmosphere_data.p) ./ ρₒ + # barotropic potential in PrescribedAtmosphere? + atmosphere_pressure = atmosphere.pressure.data + tidal_potential = atmosphere.tidal_potential + + if !isnothing(tidal_potential) + tidal_potential_data = tidal_potential.data + else + tidal_potential_data = nothing end + + # Which forcing is this going to be? + barotropic_potential = forcing_barotropic_potential(ocean) + + launch!(arch, grid, kernel_parameters, + _compute_barotropic_potential!, + barotropic_potential, + grid, + space_fractional_indices, + time_interpolator, + atmosphere_pressure, + tidal_potential_data, + interfaces.ocean_properties.reference_density, + atmosphere_backend, + atmosphere_time_indexing) + + return nothing end @inline get_fractional_index(i, j, ::Nothing) = nothing @@ -169,6 +188,41 @@ end end end +@inline interpolate_tidal_potential(::Nothing, grid, args) = zero(grid) +@inline interpolate_tidal_potential(tidal_potential, grid, args) = interp_atmos_time_series(tidal_potential, args...) + +# Fallback +@kernel _compute_barotropic_potential!(::Nothing, args...) = nothing + +@kernel function _compute_barotropic_potential!(barotropic_potential, + grid, + space_fractional_indices, + time_interpolator, + atmos_pressure, + tidal_potential, + ocean_reference_density, + atmos_backend, + atmos_time_indexing) + + i, j = @index(Global, NTuple) + + ρₒ = ocean_reference_density + + ii = space_fractional_indices.i + jj = space_fractional_indices.j + fi = get_fractional_index(i, j, ii) + fj = get_fractional_index(i, j, jj) + + x_itp = FractionalIndices(fi, fj, nothing) + t_itp = time_interpolator + atmos_args = (x_itp, t_itp, atmos_backend, atmos_time_indexing) + + pa = interp_atmos_time_series(atmos_pressure, atmos_args...) # yes this is a re-interpolation + Φt = interpolate_tidal_potential(tidal_potential, grid, atmos_args) + + @inbounds barotropic_potential[i, j, 1] = pa / ρₒ + Φt / ρₒ +end + @kernel function _interpolate_auxiliary_freshwater_flux!(freshwater_flux, interface_grid, clock, @@ -198,6 +252,9 @@ end ##### Utility for interpolating tuples of fields ##### +# Assumption: a Nothing object interpolates to zero!! +@inline interp_atmos_time_series(::Nothing, X, time, grid::AbstractGrid, args...) = zero(grid) + # Note: assumes loc = (c, c, nothing) (and the third location should not matter.) @inline interp_atmos_time_series(J::AbstractArray, x_itp::FractionalIndices, t_itp, args...) = interpolate(x_itp, t_itp, J, args...) diff --git a/src/OceanSeaIceModels/PrescribedAtmospheres.jl b/src/OceanSeaIceModels/PrescribedAtmospheres.jl index 4ce53cefc..eda82b62b 100644 --- a/src/OceanSeaIceModels/PrescribedAtmospheres.jl +++ b/src/OceanSeaIceModels/PrescribedAtmospheres.jl @@ -3,6 +3,7 @@ module PrescribedAtmospheres using Oceananigans.Grids: grid_name using Oceananigans.Utils: prettysummary, Time using Oceananigans.Fields: Center +using Oceananigans.BoundaryConditions: FieldBoundaryConditions using Oceananigans.OutputReaders: FieldTimeSeries, update_field_time_series!, extract_field_time_series using Oceananigans.TimeSteppers: Clock, tick! @@ -289,7 +290,7 @@ const PATP = PrescribedAtmosphereThermodynamicsParameters ##### Prescribed atmosphere (as opposed to dynamically evolving / prognostic) ##### -struct PrescribedAtmosphere{FT, G, T, U, P, C, F, I, R, TP, TI} +mutable struct PrescribedAtmosphere{FT, M, G, T, U, P, C, F, I, ΦT, R, TP, TI} grid :: G clock :: Clock{T} velocities :: U @@ -297,6 +298,7 @@ struct PrescribedAtmosphere{FT, G, T, U, P, C, F, I, R, TP, TI} tracers :: C freshwater_flux :: F auxiliary_freshwater_flux :: I + tidal_potential :: ΦT # this really belongs elsewhere, but we put it here for now downwelling_radiation :: R thermodynamics_parameters :: TP times :: TI @@ -319,32 +321,37 @@ function Base.show(io::IO, pa::PrescribedAtmosphere) end function default_atmosphere_velocities(grid, times) - ua = FieldTimeSeries{Center, Center, Nothing}(grid, times) - va = FieldTimeSeries{Center, Center, Nothing}(grid, times) + bcs = FieldBoundaryConditions(grid, (Center, Center, Nothing)) + ua = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) + va = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) return (u=ua, v=va) end function default_atmosphere_tracers(grid, times) - Ta = FieldTimeSeries{Center, Center, Nothing}(grid, times) - qa = FieldTimeSeries{Center, Center, Nothing}(grid, times) + bcs = FieldBoundaryConditions(grid, (Center, Center, Nothing)) + Ta = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) + qa = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) parent(Ta) .= 273.15 + 20 return (T=Ta, q=qa) end function default_downwelling_radiation(grid, times) - Qℓ = FieldTimeSeries{Center, Center, Nothing}(grid, times) - Qs = FieldTimeSeries{Center, Center, Nothing}(grid, times) + bcs = FieldBoundaryConditions(grid, (Center, Center, Nothing)) + Qℓ = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) + Qs = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) return TwoBandDownwellingRadiation(shortwave=Qs, longwave=Qℓ) end function default_freshwater_flux(grid, times) - rain = FieldTimeSeries{Center, Center, Nothing}(grid, times) - snow = FieldTimeSeries{Center, Center, Nothing}(grid, times) + bcs = FieldBoundaryConditions(grid, (Center, Center, Nothing)) + rain = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) + snow = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) return (; rain, snow) end function default_atmosphere_pressure(grid, times) - pa = FieldTimeSeries{Center, Center, Nothing}(grid, times) + bcs = FieldBoundaryConditions(grid, (Center, Center, Nothing)) + pa = FieldTimeSeries{Center, Center, Nothing}(grid, times; boundary_conditions=bcs) parent(pa) .= 101325 return pa end @@ -373,6 +380,7 @@ end boundary_layer_height = 600 # meters, thermodynamics_parameters = PrescribedAtmosphereThermodynamicsParameters(FT), auxiliary_freshwater_flux = nothing, + tidal_potential = nothing, velocities = default_atmosphere_velocities(grid, times), tracers = default_atmosphere_tracers(grid, times), pressure = default_atmosphere_pressure(grid, times), @@ -388,6 +396,7 @@ function PrescribedAtmosphere(grid, times; boundary_layer_height = convert(eltype(grid), 600), thermodynamics_parameters = nothing, auxiliary_freshwater_flux = nothing, + tidal_potential = nothing, velocities = default_atmosphere_velocities(grid, times), tracers = default_atmosphere_tracers(grid, times), pressure = default_atmosphere_pressure(grid, times), @@ -406,6 +415,7 @@ function PrescribedAtmosphere(grid, times; tracers, freshwater_flux, auxiliary_freshwater_flux, + tidal_potential, downwelling_radiation, thermodynamics_parameters, times, diff --git a/src/OceanSimulations/barotropic_potential_forcing.jl b/src/OceanSimulations/barotropic_potential_forcing.jl index 2efa84b84..6f600dbf5 100644 --- a/src/OceanSimulations/barotropic_potential_forcing.jl +++ b/src/OceanSimulations/barotropic_potential_forcing.jl @@ -24,6 +24,15 @@ const YDirectionBPF = BarotropicPotentialForcing{<:YDirection} forcing_barotropic_potential(something) = nothing forcing_barotropic_potential(f::BarotropicPotentialForcing) = f.potential.data +function forcing_barotropic_potential(tf::Tuple) + n = findfirst(f -> f isa BarotropicPotentialForcing, tf) + if isnothing(n) + return nothing + else + return forcing_barotropic_potential(tf[n]) + end +end + function forcing_barotropic_potential(mf::MultipleForcings) n = findfirst(f -> f isa BarotropicPotentialForcing, mf.forcings) if isnothing(n) diff --git a/wget-log b/wget-log new file mode 100644 index 000000000..6179a42b2 --- /dev/null +++ b/wget-log @@ -0,0 +1,20 @@ +--2025-03-08 10:21:53-- https://www.dropbox.com/scl/fi/5qu30pcuy1z5q0s5xpwaj/tidal_potential_jra55.jld2?rlkey=2597z4vkiuq3stjsry45rpfyd +Resolving www.dropbox.com (www.dropbox.com)... 162.125.4.18, 2620:100:6019:18::a27d:412 +Connecting to www.dropbox.com (www.dropbox.com)|162.125.4.18|:443... connected. +HTTP request sent, awaiting response... 302 Found +Location: https://uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com/cd/0/inline/ClfLrTKQhBHESug0JKTI1hyr40xHlYU9S4WM0GCrqC3rIhM-a-GmgeLryJNtYvtWdIDCvF1mbp8RFJcoYxEkVHYsENlbHfaivegCqYPR6WmGqTe0ZL9qjGNzs3bxYLa9sVq3IfbgRoBeRuile4agy-lb/file# [following] +--2025-03-08 10:21:54-- https://uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com/cd/0/inline/ClfLrTKQhBHESug0JKTI1hyr40xHlYU9S4WM0GCrqC3rIhM-a-GmgeLryJNtYvtWdIDCvF1mbp8RFJcoYxEkVHYsENlbHfaivegCqYPR6WmGqTe0ZL9qjGNzs3bxYLa9sVq3IfbgRoBeRuile4agy-lb/file +Resolving uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com (uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com)... 162.125.4.15, 2620:100:6019:15::a27d:40f +Connecting to uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com (uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com)|162.125.4.15|:443... connected. +HTTP request sent, awaiting response... 302 Found +Location: /cd/0/inline2/Cld_346b77Sc5nVdBZf8JOhT0-3Ro9eBlcCMGMOp265gdcppGuAA0E8MqYx2isCau5pgUYwEtJjd3vtNznpMEBV2IMCXpX2WC2KigJ68-pQKmbkhH4zBrZhFQ_xfO5uKq29qqYKlNRG0NgJhZCiLA_8keSNnyUsZeIvVHoOSHc5fdieDqkfuUVndDmsfribJdEeVsELJ0cJLDRCOGwttYZhgv0BXUwolzQJT3EbHtjbMitgTx38pEHb2HfZ9elbbpo0jfnw7gOmBYtpX6ouYUttzGFbukgo0r1_n_5tIOxnhi_HWaOXyNDd3piCriMeRBKSpP6Ol0OAXLDey87GBvwPvUH8HNmfMXwW1FkSqy_NbgtxvuRp8KgC4VSOdZ8wmj_o/file [following] +--2025-03-08 10:21:55-- https://uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com/cd/0/inline2/Cld_346b77Sc5nVdBZf8JOhT0-3Ro9eBlcCMGMOp265gdcppGuAA0E8MqYx2isCau5pgUYwEtJjd3vtNznpMEBV2IMCXpX2WC2KigJ68-pQKmbkhH4zBrZhFQ_xfO5uKq29qqYKlNRG0NgJhZCiLA_8keSNnyUsZeIvVHoOSHc5fdieDqkfuUVndDmsfribJdEeVsELJ0cJLDRCOGwttYZhgv0BXUwolzQJT3EbHtjbMitgTx38pEHb2HfZ9elbbpo0jfnw7gOmBYtpX6ouYUttzGFbukgo0r1_n_5tIOxnhi_HWaOXyNDd3piCriMeRBKSpP6Ol0OAXLDey87GBvwPvUH8HNmfMXwW1FkSqy_NbgtxvuRp8KgC4VSOdZ8wmj_o/file +Reusing existing connection to uc0a3e77b875f374539eb47cc5d4.dl.dropboxusercontent.com:443. +HTTP request sent, awaiting response... 200 OK +Length: 2467387176 (2.3G) [application/octet-stream] +Saving to: ‘tidal_potential_jra55.jld2?rlkey=2597z4vkiuq3stjsry45rpfyd’ + + tidal_potential 0%[ ] 0 --.-KB/s tidal_potential_ 0%[ ] 4.01M 13.6MB/s tidal_potential_j 0%[ ] 15.01M 30.3MB/s tidal_potential_jr 1%[ ] 28.01M 40.3MB/s tidal_potential_jra 2%[> ] 51.82M 57.8MB/s tidal_potential_jra5 2%[> ] 57.29M 52.3MB/s tidal_potential_jra55 3%[> ] 72.76M 55.7MB/s tidal_potential_jra55. 3%[=> ] 89.94M 59.8MB/s tidal_potential_jra55.j 4%[=> ] 96.01M 52.0MB/s tidal_potential_jra55.jl 5%[=> ] 131.27M 64.1MB/s tidal_potential_jra55.jld 5%[==> ] 140.26M 62.0MB/s tidal_potential_jra55.jld2 5%[==> ] 141.01M 55.6MB/s tidal_potential_jra55.jld2? 6%[==> ] 142.51M 52.1MB/s tidal_potential_jra55.jld2?r 6%[==> ] 150.63M 51.3MB/s tidal_potential_jra55.jld2?rl 6%[==> ] 157.76M 50.0MB/s eta 44s tidal_potential_jra55.jld2?rlk 6%[==> ] 164.63M 49.1MB/s eta 44s tidal_potential_jra55.jld2?rlke 7%[==> ] 173.51M 48.8MB/s eta 44s idal_potential_jra55.jld2?rlkey 7%[===> ] 180.03M 47.9MB/s eta 44s dal_potential_jra55.jld2?rlkey= 7%[===> ] 185.26M 48.6MB/s eta 44s al_potential_jra55.jld2?rlkey=2 8%[===> ] 193.63M 47.4MB/s eta 47s l_potential_jra55.jld2?rlkey=25 8%[===> ] 202.26M 43.5MB/s eta 47s _potential_jra55.jld2?rlkey=259 8%[===> ] 210.76M 44.0MB/s eta 47s potential_jra55.jld2?rlkey=2597 9%[===> ] 218.88M 42.2MB/s eta 47s otential_jra55.jld2?rlkey=2597z 9%[====> ] 226.13M 41.4MB/s eta 47s tential_jra55.jld2?rlkey=2597z4 9%[====> ] 234.70M 32.8MB/s eta 47s ential_jra55.jld2?rlkey=2597z4v 10%[====> ] 244.13M 33.4MB/s eta 47s ntial_jra55.jld2?rlkey=2597z4vk 10%[====> ] 252.76M 36.4MB/s eta 47s tial_jra55.jld2?rlkey=2597z4vki 11%[====> ] 265.26M 40.0MB/s eta 47s ial_jra55.jld2?rlkey=2597z4vkiu 11%[=====> ] 276.96M 40.9MB/s eta 47s al_jra55.jld2?rlkey=2597z4vkiuq 12%[=====> ] 291.88M 43.7MB/s eta 44s l_jra55.jld2?rlkey=2597z4vkiuq3 13%[=====> ] 308.30M 47.0MB/s eta 44s _jra55.jld2?rlkey=2597z4vkiuq3s 13%[======> ] 327.26M 49.7MB/s eta 44s jra55.jld2?rlkey=2597z4vkiuq3st 14%[======> ] 337.63M 51.1MB/s eta 44s ra55.jld2?rlkey=2597z4vkiuq3stj 15%[=======> ] 355.21M 54.8MB/s eta 44s a55.jld2?rlkey=2597z4vkiuq3stjs 15%[=======> ] 365.76M 55.8MB/s eta 39s 55.jld2?rlkey=2597z4vkiuq3stjsr 16%[=======> ] 380.76M 57.9MB/s eta 39s 5.jld2?rlkey=2597z4vkiuq3stjsry 16%[=======> ] 389.80M 58.3MB/s eta 39s .jld2?rlkey=2597z4vkiuq3stjsry4 17%[========> ] 403.01M 59.7MB/s eta 39s jld2?rlkey=2597z4vkiuq3stjsry45 17%[========> ] 414.51M 61.1MB/s eta 39s ld2?rlkey=2597z4vkiuq3stjsry45r 17%[========> ] 423.01M 61.2MB/s eta 38s d2?rlkey=2597z4vkiuq3stjsry45rp 18%[========> ] 442.10M 63.2MB/s eta 38s 2?rlkey=2597z4vkiuq3stjsry45rpf 19%[=========> ] 452.13M 64.0MB/s eta 38s ?rlkey=2597z4vkiuq3stjsry45rpfy 19%[=========> ] 466.51M 65.3MB/s eta 38s rlkey=2597z4vkiuq3stjsry45rpfyd 20%[=========> ] 485.18M 68.1MB/s eta 38s lkey=2597z4vkiuq3stjsry45rpfyd 21%[==========> ] 495.01M 65.7MB/s eta 35s key=2597z4vkiuq3stjsry45rpfyd 21%[==========> ] 509.26M 66.8MB/s eta 35s ey=2597z4vkiuq3stjsry45rpfyd 22%[==========> ] 522.01M 63.2MB/s eta 35s y=2597z4vkiuq3stjsry45rpfyd 23%[===========> ] 541.26M 65.7MB/s eta 35s =2597z4vkiuq3stjsry45rpfyd 23%[===========> ] 554.13M 64.6MB/s eta 35s 2597z4vkiuq3stjsry45rpfyd 24%[===========> ] 567.76M 63.8MB/s eta 33s 597z4vkiuq3stjsry45rpfyd 24%[============> ] 581.88M 65.1MB/s eta 33s 97z4vkiuq3stjsry45rpfyd 25%[============> ] 598.26M 67.2MB/s eta 33s 7z4vkiuq3stjsry45rpfyd 26%[============> ] 612.26M 68.1MB/s eta 33s z4vkiuq3stjsry45rpfyd 27%[=============> ] 646.63M 74.5MB/s eta 33s 4vkiuq3stjsry45rpfyd 28%[==============> ] 667.94M 77.7MB/s eta 29s vkiuq3stjsry45rpfyd 29%[==============> ] 686.01M 78.9MB/s eta 29s kiuq3stjsry45rpfyd 29%[==============> ] 700.38M 79.7MB/s eta 29s iuq3stjsry45rpfyd 30%[===============> ] 727.13M 83.0MB/s eta 29s uq3stjsry45rpfyd 31%[===============> ] 742.38M 82.4MB/s eta 29s q3stjsry45rpfyd 32%[================> ] 760.76M 85.1MB/s eta 26s 3stjsry45rpfyd 33%[================> ] 788.46M 89.7MB/s eta 26s stjsry45rpfyd 34%[=================> ] 812.02M 91.8MB/s eta 26s tjsry45rpfyd 34%[=================> ] 818.38M 90.8MB/s eta 26s jsry45rpfyd 35%[=================> ] 839.37M 91.4MB/s eta 26s sry45rpfyd 36%[==================> ] 849.50M 91.4MB/s eta 24s ry45rpfyd 37%[==================> ] 871.49M 93.1MB/s eta 24s y45rpfyd 37%[==================> ] 876.38M 89.3MB/s eta 24s 45rpfyd 37%[==================> ] 883.76M 86.7MB/s eta 24s 5rpfyd 37%[===================> ] 893.23M 85.1MB/s eta 24s rpfyd 38%[===================> ] 903.88M 80.0MB/s eta 23s pfyd 39%[===================> ] 924.26M 81.5MB/s eta 23s fyd 39%[====================> ] 940.13M 77.9MB/s eta 23s yd 40%[====================> ] 957.01M 79.1MB/s eta 23s d 41%[====================> ] 970.94M 75.9MB/s eta 23s 41%[=====================> ] 984.01M 73.8MB/s eta 22s t 42%[=====================> ] 1006M 74.6MB/s eta 22s ti 43%[=====================> ] 1013M 63.5MB/s eta 22s tid 43%[======================> ] 1.01G 67.2MB/s eta 22s tida 44%[======================> ] 1.02G 67.0MB/s eta 22s tidal 45%[======================> ] 1.04G 66.7MB/s eta 20s tidal_ 45%[=======================> ] 1.05G 64.9MB/s eta 20s tidal_p 46%[=======================> ] 1.07G 66.1MB/s eta 20s tidal_po 46%[=======================> ] 1.08G 68.0MB/s eta 20s tidal_pot 47%[========================> ] 1.10G 71.1MB/s eta 20s tidal_pote 48%[========================> ] 1.10G 69.0MB/s eta 19s tidal_poten 48%[========================> ] 1.12G 68.1MB/s eta 19s tidal_potent 49%[=========================> ] 1.13G 67.9MB/s eta 19s tidal_potenti 50%[=========================> ] 1.16G 73.0MB/s eta 19s tidal_potentia 51%[==========================> ] 1.18G 72.9MB/s eta 19s tidal_potential 52%[==========================> ] 1.21G 76.9MB/s eta 17s tidal_potential_ 52%[===========================> ] 1.22G 75.3MB/s eta 17s tidal_potential_j 54%[===========================> ] 1.24G 83.6MB/s eta 17s tidal_potential_jr 54%[============================> ] 1.26G 81.2MB/s eta 17s tidal_potential_jra 55%[============================> ] 1.27G 81.3MB/s eta 17s tidal_potential_jra5 56%[============================> ] 1.30G 86.3MB/s eta 15s tidal_potential_jra55 57%[=============================> ] 1.31G 86.2MB/s eta 15s tidal_potential_jra55. 57%[=============================> ] 1.32G 83.8MB/s eta 15s tidal_potential_jra55.j 58%[==============================> ] 1.35G 91.5MB/s eta 15s tidal_potential_jra55.jl 59%[==============================> ] 1.38G 93.6MB/s eta 15s tidal_potential_jra55.jld 60%[===============================> ] 1.39G 96.8MB/s eta 13s tidal_potential_jra55.jld2 61%[===============================> ] 1.42G 98.7MB/s eta 13s tidal_potential_jra55.jld2? 62%[===============================> ] 1.43G 97.4MB/s eta 13s tidal_potential_jra55.jld2?r 62%[================================> ] 1.44G 96.5MB/s eta 13s tidal_potential_jra55.jld2?rl 63%[================================> ] 1.47G 96.0MB/s eta 13s tidal_potential_jra55.jld2?rlk 64%[=================================> ] 1.49G 92.6MB/s eta 12s tidal_potential_jra55.jld2?rlke 65%[=================================> ] 1.51G 97.4MB/s eta 12s idal_potential_jra55.jld2?rlkey 66%[==================================> ] 1.52G 94.9MB/s eta 12s dal_potential_jra55.jld2?rlkey= 67%[==================================> ] 1.54G 93.8MB/s eta 12s al_potential_jra55.jld2?rlkey=2 67%[===================================> ] 1.56G 95.3MB/s eta 12s l_potential_jra55.jld2?rlkey=25 69%[===================================> ] 1.59G 97.0MB/s eta 10s _potential_jra55.jld2?rlkey=259 69%[===================================> ] 1.60G 95.9MB/s eta 10s potential_jra55.jld2?rlkey=2597 70%[====================================> ] 1.63G 101MB/s eta 10s otential_jra55.jld2?rlkey=2597z 71%[====================================> ] 1.64G 97.1MB/s eta 10s tential_jra55.jld2?rlkey=2597z4 72%[=====================================> ] 1.66G 95.2MB/s eta 10s ential_jra55.jld2?rlkey=2597z4v 73%[=====================================> ] 1.68G 94.8MB/s eta 9s ntial_jra55.jld2?rlkey=2597z4vk 74%[======================================> ] 1.70G 97.2MB/s eta 9s tial_jra55.jld2?rlkey=2597z4vki 74%[======================================> ] 1.72G 97.1MB/s eta 9s ial_jra55.jld2?rlkey=2597z4vkiu 75%[=======================================> ] 1.74G 98.5MB/s eta 9s al_jra55.jld2?rlkey=2597z4vkiuq 76%[=======================================> ] 1.76G 98.5MB/s eta 9s l_jra55.jld2?rlkey=2597z4vkiuq3 77%[=======================================> ] 1.77G 95.7MB/s eta 7s _jra55.jld2?rlkey=2597z4vkiuq3s 77%[========================================> ] 1.79G 94.1MB/s eta 7s jra55.jld2?rlkey=2597z4vkiuq3st 78%[========================================> ] 1.81G 96.9MB/s eta 7s ra55.jld2?rlkey=2597z4vkiuq3stj 79%[=========================================> ] 1.82G 92.2MB/s eta 7s a55.jld2?rlkey=2597z4vkiuq3stjs 80%[=========================================> ] 1.85G 95.5MB/s eta 7s 55.jld2?rlkey=2597z4vkiuq3stjsr 80%[=========================================> ] 1.86G 89.8MB/s eta 6s 5.jld2?rlkey=2597z4vkiuq3stjsry 81%[==========================================> ] 1.88G 76.4MB/s eta 6s .jld2?rlkey=2597z4vkiuq3stjsry4 83%[===========================================> ] 1.91G 79.0MB/s eta 5s jld2?rlkey=2597z4vkiuq3stjsry45 83%[===========================================> ] 1.92G 77.6MB/s eta 5s ld2?rlkey=2597z4vkiuq3stjsry45r 84%[===========================================> ] 1.94G 80.1MB/s eta 5s d2?rlkey=2597z4vkiuq3stjsry45rp 84%[===========================================> ] 1.95G 72.8MB/s eta 5s 2?rlkey=2597z4vkiuq3stjsry45rpf 85%[============================================> ] 1.97G 72.7MB/s eta 5s ?rlkey=2597z4vkiuq3stjsry45rpfy 86%[============================================> ] 1.99G 71.8MB/s eta 4s rlkey=2597z4vkiuq3stjsry45rpfyd 87%[=============================================> ] 2.00G 71.9MB/s eta 4s lkey=2597z4vkiuq3stjsry45rpfyd 88%[=============================================> ] 2.03G 75.0MB/s eta 4s key=2597z4vkiuq3stjsry45rpfyd 89%[==============================================> ] 2.05G 75.5MB/s eta 4s ey=2597z4vkiuq3stjsry45rpfyd 89%[==============================================> ] 2.05G 72.3MB/s eta 4s y=2597z4vkiuq3stjsry45rpfyd 90%[===============================================> ] 2.08G 74.4MB/s eta 3s =2597z4vkiuq3stjsry45rpfyd 91%[===============================================> ] 2.10G 77.6MB/s eta 3s 2597z4vkiuq3stjsry45rpfyd 92%[================================================> ] 2.13G 79.4MB/s eta 3s 597z4vkiuq3stjsry45rpfyd 93%[================================================> ] 2.15G 79.1MB/s eta 3s 97z4vkiuq3stjsry45rpfyd 94%[=================================================> ] 2.17G 79.8MB/s eta 3s 7z4vkiuq3stjsry45rpfyd 95%[=================================================> ] 2.19G 92.3MB/s eta 1s z4vkiuq3stjsry45rpfyd 95%[=================================================> ] 2.20G 88.4MB/s eta 1s 4vkiuq3stjsry45rpfyd 96%[==================================================> ] 2.23G 92.3MB/s eta 1s vkiuq3stjsry45rpfyd 97%[==================================================> ] 2.25G 99.3MB/s eta 1s kiuq3stjsry45rpfyd 98%[===================================================> ] 2.26G 97.1MB/s eta 1s tidal_potential_jra55.jld2?rlke 100%[====================================================>] 2.30G 104MB/s in 31s + +2025-03-08 10:22:26 (75.9 MB/s) - ‘tidal_potential_jra55.jld2?rlkey=2597z4vkiuq3stjsry45rpfyd’ saved [2467387176/2467387176] +