@@ -50,7 +50,7 @@ convergence_rate(err, Δh) =
50
50
mesh = Meshes. IntervalMesh (domain, stretch_fn, nelems = n)
51
51
52
52
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
53
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
53
+ fs = Spaces. face_space (cs)
54
54
55
55
cent_field_exact = zeros (FT, cs)
56
56
face_field = zeros (FT, fs)
98
98
mesh = Meshes. IntervalMesh (domain, stretch_fn, nelems = n)
99
99
100
100
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
101
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
101
+ fs = Spaces. face_space (cs)
102
102
103
103
face_field_exact = zeros (FT, fs)
104
104
cent_field = zeros (FT, cs)
150
150
mesh = Meshes. IntervalMesh (domain, stretch_fn, nelems = n)
151
151
152
152
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
153
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
153
+ fs = Spaces. face_space (cs)
154
154
155
155
face_field_exact = Geometry. Covariant3Vector .(zeros (FT, fs))
156
156
cent_field = zeros (FT, cs)
202
202
mesh = Meshes. IntervalMesh (domain, stretch_fn, nelems = n)
203
203
204
204
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
205
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
205
+ fs = Spaces. face_space (cs)
206
206
207
207
cent_field_exact = Geometry. Covariant3Vector .(zeros (FT, cs))
208
208
cent_field = Geometry. Covariant3Vector .(zeros (FT, cs))
258
258
mesh = Meshes. IntervalMesh (domain; nelems = n)
259
259
260
260
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
261
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
261
+ fs = Spaces. face_space (cs)
262
262
263
263
centers = getproperty (Fields. coordinate_field (cs), :z )
264
264
faces = getproperty (Fields. coordinate_field (fs), :z )
409
409
@test conv_curl_sin_f[1 ] ≤ conv_curl_sin_f[2 ] ≤ conv_curl_sin_f[3 ]
410
410
end
411
411
412
+ @testset " UpwindBiasedGradient on (uniform) periodic mesh, random w" begin
413
+ FT = Float64
414
+ device = ClimaComms. device ()
415
+
416
+ n_elems_seq = 2 .^ (5 , 6 , 7 , 8 )
417
+ center_errors = zeros (FT, length (n_elems_seq))
418
+ face_errors = zeros (FT, length (n_elems_seq))
419
+ Δh = zeros (FT, length (n_elems_seq))
420
+
421
+ for (k, n) in enumerate (n_elems_seq)
422
+ domain = Domains. IntervalDomain (
423
+ Geometry. ZPoint {FT} (- pi ),
424
+ Geometry. ZPoint {FT} (pi );
425
+ periodic = true ,
426
+ )
427
+ mesh = Meshes. IntervalMesh (domain; nelems = n)
428
+
429
+ center_space = Spaces. CenterFiniteDifferenceSpace (device, mesh)
430
+ face_space = Spaces. face_space (center_space)
431
+
432
+ ᶜw = Geometry. WVector .(map (_ -> 2 * rand () - 1 , ones (center_space)))
433
+ ᶠw = Geometry. WVector .(map (_ -> 2 * rand () - 1 , ones (face_space)))
434
+
435
+ ᶜz = Fields. coordinate_field (center_space). z
436
+ ᶠz = Fields. coordinate_field (face_space). z
437
+
438
+ upwind_biased_grad = Operators. UpwindBiasedGradient ()
439
+ ᶜ∇sinz = Geometry. WVector .(upwind_biased_grad .(ᶜw, sin .(ᶜz)))
440
+ ᶠ∇sinz = Geometry. WVector .(upwind_biased_grad .(ᶠw, sin .(ᶠz)))
441
+
442
+ center_errors[k] = norm (ᶜ∇sinz .- Geometry. WVector .(cos .(ᶜz)))
443
+ face_errors[k] = norm (ᶠ∇sinz .- Geometry. WVector .(cos .(ᶠz)))
444
+ Δh[k] = Spaces. local_geometry_data (face_space). J[vindex (1 )]
445
+ end
446
+
447
+ @test all (error -> error < 0.1 , center_errors)
448
+ @test all (error -> error < 0.1 , face_errors)
449
+
450
+ center_convergence_rates = convergence_rate (center_errors, Δh)
451
+ face_convergence_rates = convergence_rate (face_errors, Δh)
452
+ @test all (rate -> isapprox (rate, 1 ; atol = 0.01 ), center_convergence_rates)
453
+ @test all (rate -> isapprox (rate, 1 ; atol = 0.01 ), face_convergence_rates)
454
+ end
412
455
413
456
@testset " Upwind3rdOrderBiasedProductC2F + DivergenceF2C on (uniform) periodic mesh, constant w" begin
414
457
FT = Float64
428
471
mesh = Meshes. IntervalMesh (domain; nelems = n)
429
472
430
473
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
431
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
474
+ fs = Spaces. face_space (cs)
432
475
433
476
centers = getproperty (Fields. coordinate_field (cs), :z )
434
477
479
522
mesh = Meshes. IntervalMesh (domain; nelems = n)
480
523
481
524
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
482
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
525
+ fs = Spaces. face_space (cs)
483
526
484
527
centers = getproperty (Fields. coordinate_field (cs), :z )
485
528
faces = getproperty (Fields. coordinate_field (fs), :z )
531
574
mesh = Meshes. IntervalMesh (domain, stretch_fn; nelems = n)
532
575
533
576
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
534
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
577
+ fs = Spaces. face_space (cs)
535
578
536
579
centers = getproperty (Fields. coordinate_field (cs), :z )
537
580
593
636
mesh = Meshes. IntervalMesh (domain; nelems = n)
594
637
595
638
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
596
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
639
+ fs = Spaces. face_space (cs)
597
640
598
641
centers = getproperty (Fields. coordinate_field (cs), :z )
599
642
faces = getproperty (Fields. coordinate_field (fs), :z )
650
693
mesh = Meshes. IntervalMesh (domain; nelems = n)
651
694
652
695
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
653
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
696
+ fs = Spaces. face_space (cs)
654
697
655
698
centers = getproperty (Fields. coordinate_field (cs), :z )
656
699
C = FT (1.0 ) # flux-correction coefficient (falling back to third-order upwinding)
706
749
mesh = Meshes. IntervalMesh (domain; nelems = n)
707
750
708
751
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
709
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
752
+ fs = Spaces. face_space (cs)
710
753
711
754
centers = getproperty (Fields. coordinate_field (cs), :z )
712
755
761
804
mesh = Meshes. IntervalMesh (domain; nelems = n)
762
805
763
806
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
764
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
807
+ fs = Spaces. face_space (cs)
765
808
766
809
centers = getproperty (Fields. coordinate_field (cs), :z )
767
810
C = FT (1.0 ) # flux-correction coefficient (falling back to third-order upwinding)
817
860
mesh = Meshes. IntervalMesh (domain; nelems = n)
818
861
819
862
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
820
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
863
+ fs = Spaces. face_space (cs)
821
864
822
865
centers = getproperty (Fields. coordinate_field (cs), :z )
823
866
C = FT (1.0 ) # flux-correction coefficient (falling back to third-order upwinding)
873
916
mesh = Meshes. IntervalMesh (domain, stretch_fn; nelems = n)
874
917
875
918
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
876
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
919
+ fs = Spaces. face_space (cs)
877
920
878
921
centers = getproperty (Fields. coordinate_field (cs), :z )
879
922
C = FT (1.0 ) # flux-correction coefficient (falling back to third-order upwinding)
944
987
mesh = Meshes. IntervalMesh (domain; nelems = n)
945
988
946
989
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
947
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
990
+ fs = Spaces. face_space (cs)
948
991
949
992
centers = getproperty (Fields. coordinate_field (cs), :z )
950
993
C = FT (1.0 ) # flux-correction coefficient (falling back to third-order upwinding)
@@ -1016,7 +1059,7 @@ end
1016
1059
mesh = Meshes. IntervalMesh (domain; nelems = n)
1017
1060
1018
1061
cs = Spaces. CenterFiniteDifferenceSpace (device, mesh)
1019
- fs = Spaces. FaceFiniteDifferenceSpace (cs)
1062
+ fs = Spaces. face_space (cs)
1020
1063
1021
1064
# advective velocity
1022
1065
c = Geometry. WVector .(ones (Float64, fs),)
0 commit comments