@@ -28,9 +28,10 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
28
28
Ixy! (Diag. Vorticity. h_q,Diag. VolumeFluxes. h)
29
29
30
30
# calculate PV terms for initial conditions
31
- urhs = convert (Diag. PrognosticVarsRHS. u,u)
32
- vrhs = convert (Diag. PrognosticVarsRHS. v,v)
33
- ηrhs = convert (Diag. PrognosticVarsRHS. η,η)
31
+ urhs = Diag. PrognosticVarsRHS. u .= u
32
+ vrhs = Diag. PrognosticVarsRHS. v .= v
33
+ ηrhs = Diag. PrognosticVarsRHS. η .= η
34
+
34
35
advection_coriolis! (urhs,vrhs,ηrhs,Diag,S)
35
36
PVadvection! (Diag,S)
36
37
@@ -71,9 +72,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
71
72
end
72
73
73
74
# type conversion for mixed precision
74
- u1rhs = convert ( Diag. PrognosticVarsRHS. u,u1)
75
- v1rhs = convert ( Diag. PrognosticVarsRHS. v,v1)
76
- η1rhs = convert ( Diag. PrognosticVarsRHS. η,η1)
75
+ u1rhs = Diag. PrognosticVarsRHS. u . = u1
76
+ v1rhs = Diag. PrognosticVarsRHS. v . = v1
77
+ η1rhs = Diag. PrognosticVarsRHS. η . = η1
77
78
78
79
rhs! (u1rhs,v1rhs,η1rhs,Diag,S,t) # momentum only
79
80
continuity! (u1rhs,v1rhs,η1rhs,Diag,S,t) # continuity equation
@@ -118,9 +119,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
118
119
end
119
120
120
121
# type conversion for mixed precision
121
- u1rhs = convert ( Diag. PrognosticVarsRHS. u,u1)
122
- v1rhs = convert ( Diag. PrognosticVarsRHS. v,v1)
123
- η1rhs = convert ( Diag. PrognosticVarsRHS. η,η1)
122
+ u1rhs = Diag. PrognosticVarsRHS. u . = u1
123
+ v1rhs = Diag. PrognosticVarsRHS. v . = v1
124
+ η1rhs = Diag. PrognosticVarsRHS. η . = η1
124
125
125
126
rhs! (u1rhs,v1rhs,η1rhs,Diag,S,t) # momentum only
126
127
@@ -130,8 +131,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
130
131
131
132
# semi-implicit for continuity equation, use new u1,v1 to calcualte dη
132
133
ghost_points_uv! (u1,v1,S)
133
- u1rhs = convert (Diag. PrognosticVarsRHS. u,u1)
134
- v1rhs = convert (Diag. PrognosticVarsRHS. v,v1)
134
+ u1rhs = Diag. PrognosticVarsRHS. u .= u1
135
+ v1rhs = Diag. PrognosticVarsRHS. v .= v1
136
+
135
137
continuity! (u1rhs,v1rhs,η1rhs,Diag,S,t)
136
138
axb! (η1,Δt_Δs,dη) # η1 = η1 + Δt/(s-1)*RHS(u1)
137
139
end
@@ -158,9 +160,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
158
160
end
159
161
160
162
# type conversion for mixed precision
161
- u1rhs = convert ( Diag. PrognosticVarsRHS. u,u1)
162
- v1rhs = convert ( Diag. PrognosticVarsRHS. v,v1)
163
- η1rhs = convert ( Diag. PrognosticVarsRHS. η,η1)
163
+ u1rhs = Diag. PrognosticVarsRHS. u . = u1
164
+ v1rhs = Diag. PrognosticVarsRHS. v . = v1
165
+ η1rhs = Diag. PrognosticVarsRHS. η . = η1
164
166
165
167
rhs! (u1rhs,v1rhs,η1rhs,Diag,S,t)
166
168
@@ -179,8 +181,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
179
181
180
182
# semi-implicit for continuity equation, use new u1,v1 to calcualte dη
181
183
ghost_points_uv! (u1,v1,S)
182
- u1rhs = convert (Diag. PrognosticVarsRHS. u,u1)
183
- v1rhs = convert (Diag. PrognosticVarsRHS. v,v1)
184
+ u1rhs = Diag. PrognosticVarsRHS. u .= u1
185
+ v1rhs = Diag. PrognosticVarsRHS. v .= v1
186
+
184
187
continuity! (u1rhs,v1rhs,η1rhs,Diag,S,t)
185
188
186
189
if rki == kn
@@ -210,9 +213,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
210
213
end
211
214
212
215
# type conversion for mixed precision
213
- u1rhs = convert ( Diag. PrognosticVarsRHS. u,u1)
214
- v1rhs = convert ( Diag. PrognosticVarsRHS. v,v1)
215
- η1rhs = convert ( Diag. PrognosticVarsRHS. η,η1)
216
+ u1rhs = Diag. PrognosticVarsRHS. u . = u1
217
+ v1rhs = Diag. PrognosticVarsRHS. v . = v1
218
+ η1rhs = Diag. PrognosticVarsRHS. η . = η1
216
219
217
220
rhs! (u1rhs,v1rhs,η1rhs,Diag,S,t)
218
221
@@ -223,8 +226,10 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
223
226
224
227
# semi-implicit for continuity equation, use u1,v1 to calcualte dη
225
228
ghost_points_uv! (u1,v1,S)
226
- u1rhs = convert (Diag. PrognosticVarsRHS. u,u1)
227
- v1rhs = convert (Diag. PrognosticVarsRHS. v,v1)
229
+
230
+ u1rhs = Diag. PrognosticVarsRHS. u .= u1
231
+ v1rhs = Diag. PrognosticVarsRHS. v .= v1
232
+
228
233
continuity! (u1rhs,v1rhs,η1rhs,Diag,S,t)
229
234
230
235
caxb! (η0,η1,Δt_Δ,dη) # store Euler update into η0
@@ -245,9 +250,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
245
250
ghost_points! (u0,v0,η0,S)
246
251
247
252
# type conversion for mixed precision
248
- u0rhs = convert ( Diag. PrognosticVarsRHS. u,u0)
249
- v0rhs = convert ( Diag. PrognosticVarsRHS. v,v0)
250
- η0rhs = convert ( Diag. PrognosticVarsRHS. η,η0)
253
+ u0rhs = Diag. PrognosticVarsRHS. u . = u0
254
+ v0rhs = Diag. PrognosticVarsRHS. v . = v0
255
+ η0rhs = Diag. PrognosticVarsRHS. η . = η0
251
256
252
257
# ADVECTION and CORIOLIS TERMS
253
258
# although included in the tendency of every RK substep,
@@ -270,8 +275,9 @@ function time_integration(S::ModelSetup{T,Tprog}) where {T<:AbstractFloat,Tprog<
270
275
t += dtint
271
276
272
277
# TRACER ADVECTION
273
- u0rhs = convert (Diag. PrognosticVarsRHS. u,u0) # copy back as add_drag_diff_tendencies changed u0,v0
274
- v0rhs = convert (Diag. PrognosticVarsRHS. v,v0)
278
+ u0rhs = Diag. PrognosticVarsRHS. u .= u0
279
+ v0rhs = Diag. PrognosticVarsRHS. v .= v0
280
+
275
281
tracer! (i,u0rhs,v0rhs,Prog,Diag,S)
276
282
277
283
# feedback and output
@@ -391,25 +397,4 @@ function dxaybzc!( d::Array{T,2},
391
397
d[i,j] = xT* a[i,j] + yT* b[i,j] + zT* c[i,j]
392
398
end
393
399
end
394
- end
395
-
396
- """ Convert function for two arrays, X1, X2, in case their eltypes differ.
397
- Convert every element from X1 and store it in X2."""
398
- function Base. convert (X2:: Array{T2,N} ,X1:: Array{T1,N} ) where {T1,T2,N}
399
-
400
- @boundscheck size (X2) == size (X1) || throw (BoundsError ())
401
-
402
- @inbounds for i in eachindex (X1)
403
- X2[i] = convert (T2,X1[i])
404
- end
405
-
406
- return X2
407
- end
408
-
409
-
410
- """ Convert function for two arrays, X1, X2, in case their eltypes are identical.
411
- Just pass X1, such that X2 is pointed to the same place in memory."""
412
- function Base. convert (X2:: Array{T,N} ,X1:: Array{T,N} ) where {T,N}
413
- @boundscheck size (X2) == size (X1) || throw (BoundsError ())
414
- return X1
415
- end
400
+ end
0 commit comments