@@ -24,13 +24,13 @@ const AMD = AnisotropicMinimumDissipation
24
24
25
25
Base. show (io:: IO , closure:: AMD{TD} ) where TD =
26
26
print (io, " AnisotropicMinimumDissipation{$TD } turbulence closure with:\n " ,
27
- " Poincaré constant for momentum eddy viscosity Cν: " , closure. Cν, " \n " ,
28
- " Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: " , closure. Cκ, " \n " ,
27
+ " Poincaré constant for momentum eddy viscosity Cν: " , closure. Cν, " \n " ,
28
+ " Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: " , closure. Cκ, " \n " ,
29
29
" Buoyancy modification multiplier Cb: " , closure. Cb)
30
30
31
31
"""
32
32
AnisotropicMinimumDissipation([time_discretization = ExplicitTimeDiscretization, FT = Float64;]
33
- C = 1/12 , Cν = nothing, Cκ = nothing, Cb = nothing)
33
+ C = 1/3 , Cν = nothing, Cκ = nothing, Cb = nothing)
34
34
35
35
36
36
Return parameters of type `FT` for the `AnisotropicMinimumDissipation`
@@ -49,24 +49,29 @@ Arguments
49
49
50
50
Keyword arguments
51
51
=================
52
- * `C`: Poincaré constant for both eddy viscosity and eddy diffusivities. `C` is overridden
53
- for eddy viscosity or eddy diffusivity if `Cν` or `Cκ` are set, respecitvely .
52
+ * `C`: Poincaré constant for both eddy viscosity and eddy diffusivities. `C` is overridden
53
+ for eddy viscosity or eddy diffusivity if `Cν` or `Cκ` are set, respectively .
54
54
55
- * `Cν`: Poincaré constant for momentum eddy viscosity.
55
+ * `Cν`: Poincaré constant for momentum eddy viscosity.
56
56
57
- * `Cκ`: Poincaré constant for tracer eddy diffusivities. If one number or function, the same
57
+ * `Cκ`: Poincaré constant for tracer eddy diffusivities. If one number or function, the same
58
58
number or function is applied to all tracers. If a `NamedTuple`, it must possess
59
- a field specifying the Poncaré constant for every tracer.
59
+ a field specifying the Poncaré constant for every tracer.
60
60
61
61
* `Cb`: Buoyancy modification multiplier (`Cb = nothing` turns it off, `Cb = 1` was used by [Abkar16](@citet)).
62
62
*Note*: that we _do not_ subtract the horizontally-average component before computing this
63
63
buoyancy modification term. This implementation differs from [Abkar16](@citet)'s proposal
64
64
and the impact of this approximation has not been tested or validated.
65
65
66
- By default: `C = Cν = Cκ = 1/12`, which is appropriate for a finite-volume method employing a
67
- second-order advection scheme, and `Cb = nothing`, which turns off the buoyancy modification term.
66
+ By default: `C = Cν = Cκ = 1/3`, and `Cb = nothing`, which turns off the buoyancy modification term.
67
+ The default Poincaré constant is found by discretizing subgrid scale energy production, assuming a
68
+ second-order advection scheme. [Verstappen14](@citeo) shows that the Poincaré constant
69
+ should be 4 times larger than for straightforward (spectral) discretisation, resulting in `C = 1/3`
70
+ in our formulation. They also empirically demonstrated that this coefficient produces the correct
71
+ discrete production-dissipation balance. We further demonstrated this in
72
+ https://github.com/CliMA/Oceananigans.jl/issues/4367.
68
73
69
- `Cν` or `Cκ` may be numbers, or functions of `x, y, z`.
74
+ `C`, ` Cν` and `Cκ` may be numbers, or functions of `x, y, z`.
70
75
71
76
Examples
72
77
========
@@ -76,8 +81,8 @@ julia> using Oceananigans
76
81
77
82
julia> pretty_diffusive_closure = AnisotropicMinimumDissipation(C=1/2)
78
83
AnisotropicMinimumDissipation{ExplicitTimeDiscretization} turbulence closure with:
79
- Poincaré constant for momentum eddy viscosity Cν: 0.5
80
- Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: 0.5
84
+ Poincaré constant for momentum eddy viscosity Cν: 0.5
85
+ Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: 0.5
81
86
Buoyancy modification multiplier Cb: nothing
82
87
```
83
88
@@ -90,8 +95,8 @@ julia> surface_enhanced_tracer_C(x, y, z) = 1/12 * (1 + exp((z + Δz/2) / 8Δz))
90
95
91
96
julia> fancy_closure = AnisotropicMinimumDissipation(Cκ=surface_enhanced_tracer_C)
92
97
AnisotropicMinimumDissipation{ExplicitTimeDiscretization} turbulence closure with:
93
- Poincaré constant for momentum eddy viscosity Cν: 0.08333333333333333
94
- Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: surface_enhanced_tracer_C
98
+ Poincaré constant for momentum eddy viscosity Cν: 0.3333333333333333
99
+ Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: surface_enhanced_tracer_C
95
100
Buoyancy modification multiplier Cb: nothing
96
101
```
97
102
@@ -100,23 +105,27 @@ julia> using Oceananigans
100
105
101
106
julia> tracer_specific_closure = AnisotropicMinimumDissipation(Cκ=(c₁=1/12, c₂=1/6))
102
107
AnisotropicMinimumDissipation{ExplicitTimeDiscretization} turbulence closure with:
103
- Poincaré constant for momentum eddy viscosity Cν: 0.08333333333333333
104
- Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: (c₁ = 0.08333333333333333, c₂ = 0.16666666666666666)
108
+ Poincaré constant for momentum eddy viscosity Cν: 0.3333333333333333
109
+ Poincaré constant for tracer(s) eddy diffusivit(ies) Cκ: (c₁ = 0.08333333333333333, c₂ = 0.16666666666666666)
105
110
Buoyancy modification multiplier Cb: nothing
106
111
```
107
112
108
113
References
109
114
==========
110
115
116
+ Verstappen, R. & Rozema, W. & Bae, J.H. (2014), "Numerical scale separation in large-eddy
117
+ simulation", Center for Turbulence ResearchProceedings of the Summer Program 2014.
118
+
111
119
Vreugdenhil C., and Taylor J. (2018), "Large-eddy simulations of stratified plane Couette
112
120
flow using the anisotropic minimum-dissipation model", Physics of Fluids 30, 085104.
113
121
114
122
Verstappen, R. (2018), "How much eddy dissipation is needed to counterbalance the nonlinear
115
123
production of small, unresolved scales in a large-eddy simulation of turbulence?",
116
124
Computers & Fluids 176, pp. 276-284.
125
+ }
117
126
"""
118
127
function AnisotropicMinimumDissipation (time_disc:: TD = ExplicitTimeDiscretization (), FT = Oceananigans. defaults. FloatType;
119
- C = FT (1 / 12 ), Cν = nothing , Cκ = nothing , Cb = nothing ) where TD
128
+ C = FT (1 / 3 ), Cν = nothing , Cκ = nothing , Cb = nothing ) where TD
120
129
121
130
Cν = Cν === nothing ? C : Cν
122
131
Cκ = Cκ === nothing ? C : Cκ
0 commit comments