Comments (7)
Another solution, slightly more complex but that allows us to keep the current execution model is to separate the sides only on communicating boundary conditions
from oceananigans.jl.
Ok, and to clarify, the issue is cropping up now because we are trying to distribute a model / grid along a Bounded
direction. If we only distribute in Periodic
directions, this problem never crops up. But if we distributed in a Bounded
direction, then we run into the issue where one "side" may have a bounded condition like flux, value, gradient, and the other side may be communicating.
If we don't consider distributed problems, this issue never occurs: either both sides are Periodic, or bounded.
from oceananigans.jl.
exactly this is the issue with communication that pops up also in shared cases (multi-region)
from oceananigans.jl.
So how do you eliminate ordering requirements? (Why do we have ordering requirements in the first place?)
from oceananigans.jl.
ordering requirements are necessary for filling corner halos.
This is done by Periodic
boundary conditions in non-distributed simulations.
Additionally, since communication boundary conditions can be asynchronous, distributed (and multi-region) BCS need to be filled last.
To remove order requirements we would need to fill the halo for flux, value, and gradient also in the corners.
I thought that might be a good idea but we hit a problem when having an AbstractArray
boundary condition because we would need to construct the associated OffsetArray
.
This can be prevented by wrapping the array in a Field
and filling the halo regions but it seems like a heavy requirement to do it, and generally, a large API change that we might want to think about a little more. In #3338 I fixed the problem by separating out communicating boundary conditions which wasn't that complicated and maintained the current logic.
Maybe in the future, we might want to eliminate the order requirement though. So we can keep this issue open.
from oceananigans.jl.
Why don't we discontinue support for array boundary conditions and only support Field?
from oceananigans.jl.
It's better practice to use Field
, because then user scripts are more likely to port to GPU and distributed architectures. I think we want to discourage using Array
--- if it makes development easier, we might as well discontinue support altogether.
from oceananigans.jl.
Related Issues (20)
- `@eval` considered harmful HOT 3
- Noise below the mixed layer when using `AnisotropicMinimumDissipation` HOT 7
- `Clock` and `QuasiAdamsBashforth2` both have a property representing the previous time-step
- What's the point of neglecting the computation of tendencies when taking a time-step?
- Boundary conditions and diffusion with background fields HOT 17
- Bug in determination of indices of parent array by `parent_index_range` HOT 14
- Broadcasting over regions for `MultiRegionField`s HOT 2
- Forcing functions that depend on internal model fields besides velocities and tracers HOT 18
- Typo in docs on callbacks
- Call it "Simulation setup" in the docs, not "Model setup"
- `BackgroundField` is a confusing name HOT 2
- Derivatives of a reduced field over an Immersed boundary HOT 5
- Pressure has extremely high gradients in random chunks of simulation using `NonhydrostaticModel` with `ImmersedBoundaryGrid` and `BuoyancyTracer` HOT 17
- Simulation tips may be a little misleading
- Lagrangian_particles (tracked_fields and using immersed boundaries) HOT 9
- boundary condition and output questions HOT 1
- Potential 'output_writers' saving bug? HOT 6
- Issue with out-of-bounds access and windowed field indexing HOT 5
- Huge memory use of Average associated with compilation HOT 13
- Halo inflation + restriction on halo size makes it impossible to run some problems HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from oceananigans.jl.