22
33
44
5- @testitem " velocities and mass transports" setup= [LocalBuiltMatrix] tags= [:skipci ] begin
5+ @testitem " velocities and mass transports" setup= [LocalBuiltMatrix] tags= [:skipci , :local_full ] begin
66
77 using NaNStatistics
88 using CairoMakie
1515
1616 # plot for sanity check
1717 # plot zonal average density
18- ρ2D = dropdims (nansum (ρ. data .* v3D, dims = 1 ) ./ nansum (v3D, dims = 1 ), dims = 1 )
18+ ρ2D = dropdims (nansum (ρ .* v3D, dims = 1 ) ./ nansum (v3D, dims = 1 ), dims = 1 )
1919 fig = Figure ()
2020 ax = Axis (fig[1 ,1 ], xlabel = " latitude (°)" , ylabel = " depth (m)" )
2121 # levels = 25:0.1:30
3232 @info " Saving density zonal average as image file:\n $(joinpath (" test" , outputfile)) "
3333 save (outputfile, fig)
3434
35- κGM = 600 # m^2/s
36- maxslope = 0.01
37- uGM, vGM = OceanTransportMatrixBuilder. bolus_GM_velocity (ρ, gridmetrics, indices; κGM, maxslope)
38-
3935 # Plot location of cell center for volcello, umo, vmo, uo, vo
4036 fig = Figure ()
4137 ax = Axis (fig[1 ,1 ], xlabel = " lon" , ylabel = " lat" )
4743 text! (ax, vo_lon[1 ], vo_lat[1 ]; text= " vo (i,j)" , align = (:center , :bottom ))
4844 fig
4945
46+
47+ κGM = 600 # m^2/s
48+ maxslope = 0.01
49+ uGM, vGM = OceanTransportMatrixBuilder. bolus_GM_velocity (ρ, gridmetrics, indices; κGM, maxslope)
50+
51+
5052 uo2, uo2_lon, uo2_lat, vo2, vo2_lon, vo2_lat = OceanTransportMatrixBuilder. interpolateontodefaultCgrid (uo, uo_lon, uo_lat, vo, vo_lon, vo_lat, gridmetrics)
5153 fig = Figure (size= (1500 , 800 ))
5254 ax = Axis (fig[1 ,1 ], xlabel = " lon" , ylabel = " lat" , xgridvisible = false , ygridvisible = false )
5355 i = 85 .+ (- 1 : 5 ); j = 2 .+ (- 1 : 4 ); k = 1
5456 [poly! (ax, lon_vertices[:,i,j] |> vec, lat_vertices[:,i,j] |> vec, color = (:blue , 0.1 )) for i in i for j in j if indices. wet3D[i,j,1 ]];
5557 [lines! (ax, lon_vertices[:,i,j] |> vec, lat_vertices[:,i,j] |> vec, color = (:black , 0.1 )) for i in i for j in j];
5658 # lines!(ax, lon_vertices[1,i,j] |> Array, lat_vertices[1,i,j] |> Array, color = :black)
57- arrows ! (ax, uo_lon[i,j,k] |> vec, uo_lat[i,j,k] |> vec, uo[i,j,k] |> vec, 0 uo [i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :darkblue , linecolor = :darkblue )
58- arrows ! (ax, vo_lon[i,j,k] |> vec, vo_lat[i,j,k] |> vec, 0 vo [i,j,k] |> vec, vo[i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :darkred , linecolor = :darkred )
59- arrows ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] |> vec, uo2[i,j,k] |> vec, 0 uo2 [i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :blue , linecolor = :blue )
60- arrows ! (ax, vo2_lon[i,j,k] |> vec, vo2_lat[i,j,k] |> vec, 0 vo2 [i,j,k] |> vec, vo2[i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :red , linecolor = :red )
61- arrows ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] .+ 0.02 |> vec, umo[i,j,k] |> vec, 0 umo [i,j,k] |> vec, arrowsize = 10 , lengthscale = 3e-8 , arrowcolor = (:blue , 0.3 ), linecolor = (:blue , 0.3 ))
62- arrows ! (ax, vo2_lon[i,j,k] .+ 0.02 |> vec, vo2_lat[i,j,k] |> vec, 0 vmo [i,j,k] |> vec, vmo[i,j,k] |> vec, arrowsize = 10 , lengthscale = 3e-8 , arrowcolor = (:red , 0.3 ), linecolor = (:red , 0.3 ))
59+ arrows2d ! (ax, uo_lon[i,j,k] |> vec, uo_lat[i,j,k] |> vec, uo[i,j,k] |> vec, 0 (uo [i,j,k] |> vec), lengthscale = 10 , tipcolor = :darkblue , shaftcolor = :darkblue )
60+ arrows2d ! (ax, vo_lon[i,j,k] |> vec, vo_lat[i,j,k] |> vec, 0 (vo [i,j,k] |> vec) , vo[i,j,k] |> vec, lengthscale = 10 , tipcolor = :darkred , shaftcolor = :darkred )
61+ arrows2d ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] |> vec, uo2[i,j,k] |> vec, 0 (uo2 [i,j,k] |> vec), lengthscale = 10 , tipcolor = :blue , shaftcolor = :blue )
62+ arrows2d ! (ax, vo2_lon[i,j,k] |> vec, vo2_lat[i,j,k] |> vec, 0 (vo2 [i,j,k] |> vec) , vo2[i,j,k] |> vec, lengthscale = 10 , tipcolor = :red , shaftcolor = :red )
63+ arrows2d ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] .+ 0.02 |> vec, umo[i,j,k] |> vec, 0 (umo [i,j,k] |> vec), lengthscale = 3e-8 , tipcolor = (:blue , 0.3 ), shaftcolor = (:blue , 0.3 ))
64+ arrows2d ! (ax, vo2_lon[i,j,k] .+ 0.02 |> vec, vo2_lat[i,j,k] |> vec, 0 (vmo [i,j,k] |> vec) , vmo[i,j,k] |> vec, lengthscale = 3e-8 , tipcolor = (:red , 0.3 ), shaftcolor = (:red , 0.3 ))
6365 fig
6466 ax = Axis (fig[1 ,2 ], xlabel = " lon" , ylabel = " lat" , xgridvisible = false , ygridvisible = false )
6567 i = 160 .+ (- 3 : 3 ); j = 200 .+ (- 2 : 2 ); k = 1
6668 [poly! (ax, lon_vertices[:,i,j] |> vec, lat_vertices[:,i,j] |> vec, color = (:blue , 0.1 )) for i in i for j in j if indices. wet3D[i,j,1 ]];
6769 [lines! (ax, lon_vertices[:,i,j] |> vec, lat_vertices[:,i,j] |> vec, color = (:black , 0.1 )) for i in i for j in j];
6870 # lines!(ax, lon_vertices[1,i,j] |> Array, lat_vertices[1,i,j] |> Array, color = :black)
69- arrows ! (ax, uo_lon[i,j,k] |> vec, uo_lat[i,j,k] |> vec, uo[i,j,k] |> vec, 0 uo [i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :darkblue , linecolor = :darkblue )
70- arrows ! (ax, vo_lon[i,j,k] |> vec, vo_lat[i,j,k] |> vec, 0 vo [i,j,k] |> vec, vo[i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :darkred , linecolor = :darkred )
71- arrows ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] |> vec, uo2[i,j,k] |> vec, 0 uo2 [i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :blue , linecolor = :blue )
72- arrows ! (ax, vo2_lon[i,j,k] |> vec, vo2_lat[i,j,k] |> vec, 0 vo2 [i,j,k] |> vec, vo2[i,j,k] |> vec, arrowsize = 10 , lengthscale = 10 , arrowcolor = :red , linecolor = :red )
73- arrows ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] .+ 0.02 |> vec, umo[i,j,k] |> vec, 0 umo [i,j,k] |> vec, arrowsize = 10 , lengthscale = 1e-8 , arrowcolor = (:blue , 0.3 ), linecolor = (:blue , 0.3 ))
74- arrows ! (ax, vo2_lon[i,j,k] .+ 0.02 |> vec, vo2_lat[i,j,k] |> vec, 0 vmo [i,j,k] |> vec, vmo[i,j,k] |> vec, arrowsize = 10 , lengthscale = 1e-8 , arrowcolor = (:red , 0.3 ), linecolor = (:red , 0.3 ))
71+ arrows2d ! (ax, uo_lon[i,j,k] |> vec, uo_lat[i,j,k] |> vec, uo[i,j,k] |> vec, 0 (uo [i,j,k] |> vec), lengthscale = 10 , tipcolor = :darkblue , shaftcolor = :darkblue )
72+ arrows2d ! (ax, vo_lon[i,j,k] |> vec, vo_lat[i,j,k] |> vec, 0 (vo [i,j,k] |> vec) , vo[i,j,k] |> vec, lengthscale = 10 , tipcolor = :darkred , shaftcolor = :darkred )
73+ arrows2d ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] |> vec, uo2[i,j,k] |> vec, 0 (uo2 [i,j,k] |> vec), lengthscale = 10 , tipcolor = :blue , shaftcolor = :blue )
74+ arrows2d ! (ax, vo2_lon[i,j,k] |> vec, vo2_lat[i,j,k] |> vec, 0 (vo2 [i,j,k] |> vec) , vo2[i,j,k] |> vec, lengthscale = 10 , tipcolor = :red , shaftcolor = :red )
75+ arrows2d ! (ax, uo2_lon[i,j,k] |> vec, uo2_lat[i,j,k] .+ 0.02 |> vec, umo[i,j,k] |> vec, 0 (umo [i,j,k] |> vec), lengthscale = 1e-8 , tipcolor = (:blue , 0.3 ), shaftcolor = (:blue , 0.3 ))
76+ arrows2d ! (ax, vo2_lon[i,j,k] .+ 0.02 |> vec, vo2_lat[i,j,k] |> vec, 0 (vmo [i,j,k] |> vec) , vmo[i,j,k] |> vec, lengthscale = 1e-8 , tipcolor = (:red , 0.3 ), shaftcolor = (:red , 0.3 ))
7577 fig
7678
7779 fig = Figure ()
143145 M_c = sparse (Diagonal (issrf_c))
144146 sΓ_c = LUMP * sΓ
145147 @time " Solving ideal mean age" Γ_c = (T_c + M_c) \ sΓ_c
148+ # Just some timings from machines I have used (ACCESS-ESM1-5 coarsened 2x2x1)
149+ # time machine proc. RAM
150+ # 3min MacBook Air 8 × M2 8GB
146151 Γ = SPRAY * Γ_c
147152 Γyr = ustrip .(yr, Γ .* s)
148153 Γ3D = OceanTransportMatrixBuilder. as3D (Γyr, wet3D)
220225 # Difference between the fluxes from velocities and mass transport
221226 (; uo, vo, umo, vmo, uo_lon, uo_lat, vo_lon, vo_lat, gridmetrics, ρ) = LocalBuiltMatrix
222227 umo_bis, vmo_bis = velocity2fluxes (uo, uo_lon, uo_lat, vo, vo_lon, vo_lat, gridmetrics, ρ)
228+ umo_arr = umo |> Array
229+ vmo_arr = vmo |> Array
223230 colorrange = 1e9 .* (- 1 , 1 )
224231 colormap = cgrad (:RdBu , rev= true )
225232 Δcolorrange = (- 5 , 5 )
@@ -239,22 +246,22 @@ end
239246 hidedecorations! (ax)
240247
241248 ax = Axis (fig[1 ,2 ], xlabel = " i" , ylabel = " j" )
242- heatmap! (ax, umo [:,:,k]; colormap, colorrange)
249+ heatmap! (ax, umo_arr [:,:,k]; colormap, colorrange)
243250 text! (ax, 0 , 1 ; text = " umo" , align = (:left , :top ), offset = (5 , - 5 ), space = :relative )
244251 hidedecorations! (ax)
245252
246253 ax = Axis (fig[2 ,2 ], xlabel = " i" , ylabel = " j" )
247- hm = heatmap! (ax, vmo [:,:,k]; colormap, colorrange)
254+ hm = heatmap! (ax, vmo_arr [:,:,k]; colormap, colorrange)
248255 text! (ax, 0 , 1 ; text = " vmo" , align = (:left , :top ), offset = (5 , - 5 ), space = :relative )
249256 hidedecorations! (ax)
250257
251258 ax = Axis (fig[1 ,3 ], xlabel = " i" , ylabel = " j" )
252- heatmap! (ax, 100 ((umo_bis - umo ) ./ umo )[:,:,k]; colormap = Δcolormap, colorrange = Δcolorrange)
259+ heatmap! (ax, 100 ((umo_bis - umo_arr ) ./ umo_arr )[:,:,k]; colormap = Δcolormap, colorrange = Δcolorrange)
253260 text! (ax, 0 , 1 ; text = " (umo_bis − umo) / umo" , align = (:left , :top ), offset = (5 , - 5 ), space = :relative )
254261 hidedecorations! (ax)
255262
256263 ax = Axis (fig[2 ,3 ], xlabel = " i" , ylabel = " j" )
257- Δhm = heatmap! (ax, 100 ((vmo_bis - vmo ) ./ vmo )[:,:,k]; colormap = Δcolormap, colorrange = Δcolorrange)
264+ Δhm = heatmap! (ax, 100 ((vmo_bis - vmo_arr ) ./ vmo_arr )[:,:,k]; colormap = Δcolormap, colorrange = Δcolorrange)
258265 text! (ax, 0 , 1 ; text = " (vmo_bis − vmo) / vmo" , align = (:left , :top ), offset = (5 , - 5 ), space = :relative )
259266 hidedecorations! (ax)
260267
0 commit comments