@@ -216,6 +216,51 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_bottom_bc!(
216
216
return nothing
217
217
end
218
218
219
+ function compute_u³ʲ_u³ʲ (
220
+ u³ʲ_prev_halflevel,
221
+ J_prev_halflevel,
222
+ J_halflevel,
223
+ J_prev_level,
224
+ ∇Φ³_data_prev_level,
225
+ ρʲ_prev_level,
226
+ ρ_prev_level,
227
+ entrʲ_prev_level,
228
+ turb_entrʲ_prev_level,
229
+ u³⁰_data_prev_halflevel,
230
+ nh_pressure³ʲ_data_prev_halflevel,
231
+ )
232
+ u³ʲ_u³ʲ =
233
+ (1 / (J_halflevel^ 2 )) *
234
+ (J_prev_halflevel^ 2 * u³ʲ_prev_halflevel * u³ʲ_prev_halflevel)
235
+
236
+ u³ʲ_u³ʲ -=
237
+ (1 / (J_halflevel^ 2 )) * (
238
+ J_prev_level^ 2 *
239
+ 2 *
240
+ (
241
+ ∇Φ³_data_prev_level * (ρʲ_prev_level - ρ_prev_level) /
242
+ ρʲ_prev_level
243
+ )
244
+ )
245
+
246
+ u³ʲ_u³ʲ +=
247
+ (1 / (J_halflevel^ 2 )) * (
248
+ J_prev_level^ 2 *
249
+ 2 *
250
+ (
251
+ (entrʲ_prev_level + turb_entrʲ_prev_level) *
252
+ u³⁰_data_prev_halflevel -
253
+ (entrʲ_prev_level + turb_entrʲ_prev_level) * u³ʲ_prev_halflevel
254
+ )
255
+ )
256
+
257
+ u³ʲ_u³ʲ -=
258
+ (1 / (J_halflevel^ 2 )) *
259
+ (J_prev_level^ 2 * 2 * nh_pressure³ʲ_data_prev_halflevel)
260
+ return u³ʲ_u³ʲ
261
+ end
262
+
263
+
219
264
NVTX. @annotate function set_diagnostic_edmf_precomputed_quantities_do_integral! (
220
265
Y,
221
266
p,
@@ -490,60 +535,19 @@ NVTX.@annotate function set_diagnostic_edmf_precomputed_quantities_do_integral!(
490
535
end
491
536
492
537
u³ʲ_datau³ʲ_data = p. scratch. temp_data_level
493
- # Using constant exponents in broadcasts allocate, so we use
494
- # local_geometry_halflevel.J * local_geometry_halflevel.J instead.
495
- # See ClimaCore.jl issue #1126.
496
- @. u³ʲ_datau³ʲ_data =
497
- (
498
- 1 /
499
- (local_geometry_halflevel. J * local_geometry_halflevel. J)
500
- ) * (
501
- local_geometry_prev_halflevel. J *
502
- local_geometry_prev_halflevel. J *
503
- u³ʲ_data_prev_halflevel *
504
- u³ʲ_data_prev_halflevel
505
- )
506
-
507
- @. u³ʲ_datau³ʲ_data -=
508
- (
509
- 1 /
510
- (local_geometry_halflevel. J * local_geometry_halflevel. J)
511
- ) * (
512
- local_geometry_prev_level. J *
513
- local_geometry_prev_level. J *
514
- 2 *
515
- (
516
- ∇Φ³_data_prev_level * (ρʲ_prev_level - ρ_prev_level) /
517
- ρʲ_prev_level
518
- )
519
- )
520
-
521
- @. u³ʲ_datau³ʲ_data +=
522
- (
523
- 1 /
524
- (local_geometry_halflevel. J * local_geometry_halflevel. J)
525
- ) * (
526
- local_geometry_prev_level. J *
527
- local_geometry_prev_level. J *
528
- 2 *
529
- (
530
- (entrʲ_prev_level + turb_entrʲ_prev_level) *
531
- u³⁰_data_prev_halflevel -
532
- (entrʲ_prev_level + turb_entrʲ_prev_level) *
533
- u³ʲ_data_prev_halflevel
534
- )
535
- )
536
-
537
- @. u³ʲ_datau³ʲ_data -=
538
- (
539
- 1 /
540
- (local_geometry_halflevel. J * local_geometry_halflevel. J)
541
- ) * (
542
- local_geometry_prev_level. J *
543
- local_geometry_prev_level. J *
544
- 2 *
545
- nh_pressure³ʲ_data_prev_halflevel
546
- )
538
+ @. u³ʲ_datau³ʲ_data = compute_u³ʲ_u³ʲ (
539
+ u³ʲ_data_prev_halflevel,
540
+ local_geometry_prev_halflevel. J,
541
+ local_geometry_halflevel. J,
542
+ local_geometry_prev_level. J,
543
+ ∇Φ³_data_prev_level,
544
+ ρʲ_prev_level,
545
+ ρ_prev_level,
546
+ entrʲ_prev_level,
547
+ turb_entrʲ_prev_level,
548
+ u³⁰_data_prev_halflevel,
549
+ nh_pressure³ʲ_data_prev_halflevel,
550
+ )
547
551
548
552
# get u³ʲ to calculate divergence term for detrainment,
549
553
# u³ʲ will be clipped later after we get area fraction
0 commit comments