@@ -2,7 +2,14 @@ using Logging
2
2
using Test
3
3
4
4
import ClimaCore:
5
- Domains, Fields, Geometry, Meshes, Operators, Spaces, Topologies
5
+ Domains,
6
+ Fields,
7
+ Geometry,
8
+ Meshes,
9
+ Operators,
10
+ Spaces,
11
+ Topologies,
12
+ DataLayouts
6
13
7
14
using ClimaComms
8
15
const device = ClimaComms. device ()
@@ -39,6 +46,9 @@ function distributed_space(
39
46
return (space, context)
40
47
end
41
48
49
+ init_state_scalar (local_geometry, p) = (; ρ = 1.0 )
50
+ init_state_vector (local_geometry, p) = Geometry. Covariant12Vector (1.0 , - 1.0 )
51
+
42
52
#=
43
53
_
44
54
|1|
61
71
@test Topologies. local_neighboring_elements (space. topology, 3 ) == [2 , 4 ]
62
72
@test Topologies. local_neighboring_elements (space. topology, 4 ) == [1 , 3 ]
63
73
64
- init_state (local_geometry, p) = (ρ = 1.0 )
65
- y0 = init_state .(Fields. local_geometry_field (space), Ref (nothing ))
74
+ y0 = init_state_scalar .(Fields. local_geometry_field (space), Ref (nothing ))
66
75
nel = Topologies. nlocalelems (Spaces. topology (space))
67
76
yarr = parent (y0)
68
77
yarr .= reshape (1 : (Nq * Nq * nel), (Nq, Nq, 1 , nel))
69
78
70
- dss2_buffer = Spaces. create_dss_buffer (y0)
71
- Spaces. weighted_dss! (y0, dss2_buffer ) # DSS2
79
+ dss_buffer = Spaces. create_dss_buffer (y0)
80
+ Spaces. weighted_dss! (y0, dss_buffer ) # DSS2
72
81
# ! format: off
73
82
@test Array (yarr[:]) == [18.5 , 5.0 , 9.5 , 18.5 , 5.0 , 9.5 , 18.5 , 5.0 , 9.5 , 9.5 ,
74
83
14.0 , 18.5 , 9.5 , 14.0 , 18.5 , 9.5 , 14.0 , 18.5 , 18.5 ,
75
84
23.0 , 27.5 , 18.5 , 23.0 , 27.5 , 18.5 , 23.0 , 27.5 , 27.5 ,
76
85
32.0 , 18.5 , 27.5 , 32.0 , 18.5 , 27.5 , 32.0 , 18.5 ]
77
86
# ! format: on
78
87
79
- p = @allocated Spaces. weighted_dss! (y0, dss2_buffer )
88
+ p = @allocated Spaces. weighted_dss! (y0, dss_buffer )
80
89
@show p
81
90
#=
82
91
@test p == 0
83
92
=#
84
93
end
85
94
86
- @testset " 4x1 element mesh on 2 processes - vector field" begin
95
+ @testset " test if dss is no-op on an empty field" begin
96
+ Nq = 3
97
+ space, comms_ctx = distributed_space ((4 , 1 ), (true , true ), (Nq, 1 , 1 ))
98
+ y0 = init_state_scalar .(Fields. local_geometry_field (space), Ref (nothing ))
99
+
100
+ dims = (Nq, Nq, 0 , 4 )
101
+ array = similar (parent (y0), dims)
102
+ data = DataLayouts. rebuild (Fields. field_values (y0), array)
103
+ space = axes (y0)
104
+ empty_field = similar (y0, Tuple{})
105
+ dss_buffer = Spaces. create_dss_buffer (empty_field)
106
+ @test empty_field == Spaces. weighted_dss! (empty_field)
107
+ end
108
+
109
+
110
+ @testset " 4x1 element mesh on 1 process - vector field" begin
87
111
Nq = 3
88
112
space, comms_ctx = distributed_space ((4 , 1 ), (true , true ), (Nq, 1 , 2 ))
89
- init_state (local_geometry, p) = Geometry. Covariant12Vector (1.0 , - 1.0 )
90
- y0 = init_state .(Fields. local_geometry_field (space), Ref (nothing ))
113
+ y0 = init_state_vector .(Fields. local_geometry_field (space), Ref (nothing ))
91
114
yx = copy (y0)
92
115
93
- dss2_buffer = Spaces. create_dss_buffer (y0)
94
- Spaces. weighted_dss! (y0, dss2_buffer )
116
+ dss_buffer = Spaces. create_dss_buffer (y0)
117
+ Spaces. weighted_dss! (y0, dss_buffer )
95
118
96
119
@test parent (yx) ≈ parent (y0)
97
120
98
- p = @allocated Spaces. weighted_dss! (y0, dss2_buffer )
121
+ p = @allocated Spaces. weighted_dss! (y0, dss_buffer )
99
122
@show p
100
123
# @test p == 0
101
124
end
0 commit comments