@@ -52,49 +52,58 @@ cpu_artifacts_dir = joinpath(output_dir, joinpath(mode_name, cpu_run_name)) * "_
52
52
gpu_artifacts_dir = joinpath (output_dir, joinpath (mode_name, gpu_run_name)) * " _artifacts"
53
53
54
54
55
- # Read in and compare atmos state variables
55
+ # Read in and compare atmos state variables on centers and on faces
56
56
cpu_atmos_state_center = DLM. readdlm (joinpath (cpu_artifacts_dir, " atmos_state_center_tend_cpu.txt" ), ' ,' )
57
57
gpu_atmos_state_center = DLM. readdlm (joinpath (gpu_artifacts_dir, " atmos_state_center_tend_gpu.txt" ), ' ,' )
58
58
59
- @show abs (maximum (cpu_atmos_state_center .- gpu_atmos_state_center))
60
- @show abs (median (cpu_atmos_state_center .- gpu_atmos_state_center))
61
- @show abs (mean (cpu_atmos_state_center .- gpu_atmos_state_center))
62
- @assert isapprox (cpu_atmos_state_center, gpu_atmos_state_center)
59
+ print ( abs (maximum (cpu_atmos_state_center .- gpu_atmos_state_center) ))
60
+ print ( abs (median (cpu_atmos_state_center .- gpu_atmos_state_center) ))
61
+ print ( abs (mean (cpu_atmos_state_center .- gpu_atmos_state_center) ))
62
+ atmos_center_approx = isapprox (cpu_atmos_state_center, gpu_atmos_state_center)
63
63
64
64
cpu_atmos_state_face = DLM. readdlm (joinpath (cpu_artifacts_dir, " atmos_state_face_tend_cpu.txt" ), ' ,' )
65
65
gpu_atmos_state_face = DLM. readdlm (joinpath (gpu_artifacts_dir, " atmos_state_face_tend_gpu.txt" ), ' ,' )
66
66
67
- @show abs (maximum (cpu_atmos_state_face .- gpu_atmos_state_face))
68
- @show abs (median (cpu_atmos_state_face .- gpu_atmos_state_face))
69
- @show abs (mean (cpu_atmos_state_face .- gpu_atmos_state_face))
70
- @assert isapprox (cpu_atmos_state_face, gpu_atmos_state_face)
67
+ print ( abs (maximum (cpu_atmos_state_face .- gpu_atmos_state_face) ))
68
+ print ( abs (median (cpu_atmos_state_face .- gpu_atmos_state_face) ))
69
+ println ( abs (mean (cpu_atmos_state_face .- gpu_atmos_state_face) ))
70
+ atmos_face_approx = isapprox (cpu_atmos_state_face, gpu_atmos_state_face)
71
71
72
72
73
- # Read in and compare land state variables
73
+ # Read in and compare land state variables on 3D space and 2D space
74
74
cpu_land_state_3d = DLM. readdlm (joinpath (cpu_artifacts_dir, " land_state_3d_tend_cpu.txt" ), ' ,' )
75
75
gpu_land_state_3d = DLM. readdlm (joinpath (gpu_artifacts_dir, " land_state_3d_tend_gpu.txt" ), ' ,' )
76
76
77
- @show abs (maximum (cpu_land_state_3d .- gpu_land_state_3d))
78
- @show abs (median (cpu_land_state_3d .- gpu_land_state_3d))
79
- @show abs (mean (cpu_land_state_3d .- gpu_land_state_3d))
80
- @assert isapprox (cpu_land_state_3d, gpu_land_state_3d)
77
+ print ( abs (maximum (cpu_land_state_3d .- gpu_land_state_3d) ))
78
+ print ( abs (median (cpu_land_state_3d .- gpu_land_state_3d) ))
79
+ print ( abs (mean (cpu_land_state_3d .- gpu_land_state_3d) ))
80
+ land_3d_approx = isapprox (cpu_land_state_3d, gpu_land_state_3d)
81
81
82
82
cpu_land_state_2d = DLM. readdlm (joinpath (cpu_artifacts_dir, " land_state_2d_tend_cpu.txt" ), ' ,' )
83
83
gpu_land_state_2d = DLM. readdlm (joinpath (gpu_artifacts_dir, " land_state_2d_tend_gpu.txt" ), ' ,' )
84
84
85
- @show abs (maximum (cpu_land_state_2d .- gpu_land_state_2d))
86
- @show abs (median (cpu_land_state_2d .- gpu_land_state_2d))
87
- @show abs (mean (cpu_land_state_2d .- gpu_land_state_2d))
88
- @assert isapprox (cpu_land_state_2d, gpu_land_state_2d)
85
+ print ( abs (maximum (cpu_land_state_2d .- gpu_land_state_2d) ))
86
+ print ( abs (median (cpu_land_state_2d .- gpu_land_state_2d) ))
87
+ println ( abs (mean (cpu_land_state_2d .- gpu_land_state_2d) ))
88
+ land_2d_approx = isapprox (cpu_land_state_2d, gpu_land_state_2d)
89
89
90
90
91
91
# Read in ocean state variables (if not AMIP)
92
+ ocean_approx = true
92
93
if ! (mode_name == " amip" )
93
- cpu_land_state = DLM. readdlm (joinpath (cpu_artifacts_dir, " land_state_tend_cpu .txt" ), ' ,' )
94
- gpu_land_state = DLM. readdlm (joinpath (gpu_artifacts_dir, " land_state_tend_gpu .txt" ), ' ,' )
94
+ cpu_ocean_state = DLM. readdlm (joinpath (cpu_artifacts_dir, " ocean_state_tend_cpu .txt" ), ' ,' )
95
+ gpu_ocean_state = DLM. readdlm (joinpath (gpu_artifacts_dir, " ocean_state_tend_gpu .txt" ), ' ,' )
95
96
96
- @show abs (maximum (cpu_ocean_state .- gpu_ocean_state))
97
- @show abs (median (cpu_ocean_state .- gpu_ocean_state))
98
- @show abs (mean (cpu_ocean_state .- gpu_ocean_state))
99
- @assert isapprox (cpu_ocean_state, gpu_ocean_state)
97
+ print ( abs (maximum (cpu_ocean_state .- gpu_ocean_state) ))
98
+ print ( abs (median (cpu_ocean_state .- gpu_ocean_state) ))
99
+ print ( abs (mean (cpu_ocean_state .- gpu_ocean_state) ))
100
+ ocean_approx = isapprox (cpu_ocean_state, gpu_ocean_state)
100
101
end
102
+
103
+ # Output warning for each component model if not equal
104
+ ! atmos_center_approx || ! atmos_face_approx ? @warn (" atmos states not equal" ) : nothing
105
+ ! land_2d_approx || ! land_3d_approx ? @warn (" land states not equal" ) : nothing
106
+ ! ocean_approx ? @warn (" ocean states not equal" ) : nothing
107
+
108
+ # Assert all states are equal at the end so we still check all of them
109
+ @assert atmos_center_approx && atmos_face_approx && land_3d_approx && land_2d_approx && ocean_approx
0 commit comments