@@ -14,44 +14,47 @@ abstract type AbstractSteadyFlowParams <: AbstractParams end
14
14
15
15
Construct a constant diffusivity problem with steady or time-varying flow.
16
16
"""
17
+ noflow (args... ) = 0.0
18
+
17
19
Problem (; kwargs... ) = ConstDiffProblem (; kwargs... ) # only problem defined for now
18
20
21
+ function flowargs (u)
22
+ umethods = methods (u)
23
+ length (umethods. ms) == 1 ? umethods. ms[1 ]. nargs- 1 : error (" Either define steadyflow or use a flow function
24
+ with only one argument." )
25
+ end
26
+
19
27
function ConstDiffProblem (;
20
- grid = nothing ,
21
28
nx = 128 ,
22
29
Lx = 2 π,
23
30
ny = nx,
24
31
Ly = Lx,
32
+ grid = TwoDGrid (nx, Lx, ny, Ly),
25
33
kap = 0.1 ,
26
34
eta = kap,
27
- u = nothing ,
28
- v = nothing ,
35
+ u = noflow ,
36
+ v = noflow ,
29
37
dt = 0.01 ,
30
38
stepper = " RK4" ,
31
- steadyflow = false
39
+ steadyflow = nothing
32
40
)
33
41
34
- zerofunction (args... ) = 0.0
35
-
36
- # Defaults
37
- if u != nothing ; uin = u
38
- else ; uin = zerofunction
39
- end
40
-
41
- if v != nothing ; vin = v
42
- else ; vin = zerofunction
43
- end
44
-
45
- if grid == nothing ; g = TwoDGrid (nx, Lx, ny, Ly)
46
- else ; g = grid
42
+ if steadyflow== nothing # deduce whether flow is time-dependent
43
+ if (typeof (u) <: Function && flowargs (u) > 2 ) || (typeof (v) <: Function && flowargs (v) > 2 )
44
+ steadyflow = false
45
+ else
46
+ steadyflow = true
47
+ end
47
48
end
48
49
49
- vs = TracerAdvDiff. Vars (g)
50
50
if steadyflow; pr = TracerAdvDiff. ConstDiffSteadyFlowParams (eta, kap, uin, vin, g)
51
51
else ; pr = TracerAdvDiff. ConstDiffParams (eta, kap, uin, vin)
52
52
end
53
+
54
+ vs = TracerAdvDiff. Vars (g)
53
55
eq = TracerAdvDiff. Equation (pr, g)
54
56
ts = FourierFlows. autoconstructtimestepper (stepper, dt, eq. LC, g)
57
+
55
58
FourierFlows. Problem (g, vs, pr, eq, ts)
56
59
end
57
60
@@ -91,14 +94,16 @@ struct ConstDiffSteadyFlowParams{T} <: AbstractSteadyFlowParams
91
94
v:: Array{T,2} # Advecting y-velocity
92
95
end
93
96
94
- function ConstDiffSteadyFlowParams (eta, kap, kaph, nkaph, u:: Function , v:: Function , g)
95
- ugrid = u .(g. X, g. Y)
96
- vgrid = v .(g. X, g. Y)
97
+ function ConstDiffSteadyFlowParams (eta, kap, kaph, nkaph, u, v, g)
98
+ if typeof (u) <: Function ; ugrid = u .(g. X, g. Y)
99
+ else ; ugrid = u
100
+ end
101
+ if typeof (v) <: Function ; vgrid = v .(g. X, g. Y)
102
+ else ; vgrid = v
103
+ end
97
104
ConstDiffSteadyFlowParams (eta, kap, kaph, nkaph, ugrid, vgrid)
98
105
end
99
106
100
- ConstDiffSteadyFlowParams (eta, kap, kaph, nkaph, u, v,
101
- g) = ConstDiffSteadyFlowParams {typeof(eta)} (eta, kap, kaph, nkaph, u, v)
102
107
ConstDiffSteadyFlowParams (eta, kap, u, v, g) = ConstDiffSteadyFlowParams (eta, kap, 0 eta, 0 , u, v, g)
103
108
104
109
0 commit comments