Replies: 2 comments 2 replies
-
There is nothing "special" about a closure --- anything that can be implemented as a forcing can be implemented as a closure and vice versa. The definition of a "closure" involves specifying the tendencies, eg: as well as, optionally, a function called This encompasses all explicitly computed closures, including the one you've written. In addition to the generic closure interface, which consists of tendency functions + But note this is a convenience. It's not required to use Turning to the question at hand, I guess you are interested in implementing a kind of closure which involves two terms: one involving a term computed from a typical LES closure, and a second term which involves horizontal reductions. This suggests that you want to use a design that's something like struct BridgingTurbulenceClosure
isotropic_closure
horizontally_averaged_closure
isotropy_factor
end You also need to design a corresponding object to hold the Then you can write your tendency kernel function as something like function ∂ⱼ_τ₁ⱼ(i, j, k, grid, bridging::BridgingTurbulenceClosure, diffusivities, args...)
∂ⱼ_τ₁ⱼ_isotropic = ∂ⱼ_τ₁ⱼ(i, j, k, grid, bridging.isotropic_closure, diffusivities.isotropic_closure, args...)
∂ⱼ_τ₁ⱼ_averaged = ∂ⱼ_τ₁ⱼ(i, j, k, grid, bridging.horizontally_averaged_closure, diffusivities.horizontally_averaged_closure, args...)
return ∂ⱼ_τ₁ⱼ_isotropic + ∂ⱼ_τ₁ⱼ_averaged
end You can also probably re-use the Here are some additional thoughts:
|
Beta Was this translation helpful? Give feedback.
-
Thank you! You gave me a lot to think about. I have updated my Smagorinsky forcing function and I am now matching the closure model version. I updated my forcing function to calculate at the faces of the grid cell for the respective direction like Oceananigan's Smagorinsky does in Quick clarifying question, which aspect of the SGS model are you referring to does more harm than good? From my preliminary search, I have not found much in the literature as to why. Sullivan et al., 1994 does acknowledge that closures can be too dissipative (they reference Moin and Kim, 1982) and they try to correct this in their paper. However, they do not compare to a DNS or field data, but to Monin-Obukhov similarity forms. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi developers,
I am hoping to add a new SGS model into Oceananigans developed by Peter Sullivan et al., 1994. However, from what I can understand, Oceananigans only manipulates the viscosity, not the entire term. In this paper, the SGS closure is defined as follows:

γ = isotropy factor (accounts for theoretical SGS constant due to anisotropy of the mean flow and controls the transition between SGS and averaged turbulence parameterizations)
ν_t = fluctuating eddy viscosity
ν_T = mean-field eddy viscosity
S_ij = resolved strain rate tensor
⟨S_ij⟩ = horizontal average of the resolved strain rate tensor
How should I implement this model? This can be a modified version of Smagorinsky or a one equation model like Deardorff (NCAR LES lets you chose between these two for this SGS). If we just think about it as a modified version of Smagorinsky, I think that the first term can be incorporated into the current Smagorinsky model like it is for the Smagorinsky-Lily model and then the SGS model adds the second term as a forcing function to the velocities and scalars.
On my own, I have been applying the classic Smagorinsky closure model as a forcing function to get a better understanding of how I can apply Sullivan's version in the future. It runs on GPUs, but have not confirmed if I did it correctly yet. Here is my work so far. I tried to mimic the closure model as much as possible for the forcing functions (
∂ⱼ_τ₁ⱼ
,∂ⱼ_τ₂ⱼ
,∂ⱼ_τ₃ⱼ
, and∇_dot_qᶜ
assuming Pr = 1):In main script:
I would like advice on how to implement Sullivan's SGS model. If this is not feasible to incorporate it into the current version of Oceananigans, is there a clean way to do this with discrete forcing functions? I need help on how to incorporate this for my own research because my current idea ignores the Deardorff option. Do you have any suggestions? Thanks!
Beta Was this translation helpful? Give feedback.
All reactions