From 20377b03c902605b03616ccbde3cee36a1fdb674 Mon Sep 17 00:00:00 2001 From: gaelforget Date: Fri, 23 May 2025 03:16:47 -0700 Subject: [PATCH 1/3] define grid for NWA model example --- examples/NWA/NWA_viz.jl | 58 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 examples/NWA/NWA_viz.jl diff --git a/examples/NWA/NWA_viz.jl b/examples/NWA/NWA_viz.jl new file mode 100644 index 00000000..a3a20a04 --- /dev/null +++ b/examples/NWA/NWA_viz.jl @@ -0,0 +1,58 @@ + + +using NCDatasets, GLMakie + +file="ocean_daily.static.nc" +ds=Dataset(file) + +#list below should be double checked (done quickly, likely to have errors) +variable_pairs=( +(:Coriolis, :Coriolis), +(:areacello, :RAC), +(:areacello_bu, :RAZ), +(:areacello_cu, :RAW), +(:areacello_cv, :RAS), +(:deptho, :Depth), +(:dxCu, :DXW), +(:dxCv, :DXS), +(:dxt, :DXC), +(:dyCu, :DYW), +(:dyCv, :DYS), +(:dyt, :DYC), +(:geolat, :YC), +(:geolat_c, :YC), +(:geolat_u, :YW), +(:geolat_v, :YS), +(:geolon, :XC), +(:geolon_c, :XC), +(:geolon_u, :XW), +(:geolon_v, :XS), +(:sftof, :SeaAreaFraction), +(:wet, :hFacC), +(:wet_c, :hFacC), +(:wet_u, :hFacW), +(:wet_v, :hFacS), +(:xh, :XC1d), +(:xq, :XZ1d), +(:yh, :YC1d), +(:yq, :XZ1d), +) + +G=NamedTuple[] + +preproc(x) = [(ismissing(i) ? NaN : i) for i in x] + +for i in 1:length(variable_pairs) + (n_in,n_out)=variable_pairs[i] + tmp=try + MeshArray(preproc(ds[n_in][:,:])) + catch +# println("skip $(n_in)") + ds[n_in][:] + end + push!(G,NamedTuple{(n_out,)}((tmp,))) +end + +G=merge(G...) +heatmap(G.Depth) + From 32acdd0f44ea50da40ca784fdf573efaf17cc910 Mon Sep 17 00:00:00 2001 From: gaelforget Date: Fri, 23 May 2025 03:25:08 -0700 Subject: [PATCH 2/3] fix, improve a bit --- examples/NWA/NWA_viz.jl | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/examples/NWA/NWA_viz.jl b/examples/NWA/NWA_viz.jl index a3a20a04..4968a179 100644 --- a/examples/NWA/NWA_viz.jl +++ b/examples/NWA/NWA_viz.jl @@ -1,11 +1,11 @@ -using NCDatasets, GLMakie +using NCDatasets, GLMakie, MeshArrays file="ocean_daily.static.nc" ds=Dataset(file) -#list below should be double checked (done quickly, likely to have errors) +#list below is draft (needs to be double checked; this is just a first guess) variable_pairs=( (:Coriolis, :Coriolis), (:areacello, :RAC), @@ -38,12 +38,11 @@ variable_pairs=( (:yq, :XZ1d), ) -G=NamedTuple[] - preproc(x) = [(ismissing(i) ? NaN : i) for i in x] -for i in 1:length(variable_pairs) - (n_in,n_out)=variable_pairs[i] +G=NamedTuple[] +for i in variable_pairs + (n_in,n_out)=i tmp=try MeshArray(preproc(ds[n_in][:,:])) catch From d28099d74ed8a3847d295fe7f34bbf49d1eaf24f Mon Sep 17 00:00:00 2001 From: gaelforget Date: Fri, 23 May 2025 14:18:17 -0700 Subject: [PATCH 3/3] example to use Drifters.jl --- examples/NWA/NWA_drift.jl | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 examples/NWA/NWA_drift.jl diff --git a/examples/NWA/NWA_drift.jl b/examples/NWA/NWA_drift.jl new file mode 100644 index 00000000..89d5966d --- /dev/null +++ b/examples/NWA/NWA_drift.jl @@ -0,0 +1,31 @@ + +begin + using Drifters + + s=size(G.DXC[1]) + u=MeshArray(fill(1.0,s))*G.DXC + v=MeshArray(fill(0.5,s))*G.DYC + + u=u/G.DXC; u[findall(isnan.(u))].=0; + v=v/G.DYC; v[findall(isnan.(v))].=0; +# (u,v)=exchange(u,v,1) + if !isdefined(Main,:func) + func=(u -> MeshArrays.update_location_dpdo!(u,Γ)) + end + + F=FlowFields(u,u,v,v,(0.,10.),func) + + x=s[1]*(0.4 .+ 0.2*rand(100)) + y=s[2]*(0.4 .+ 0.2*rand(100)) + I=Individuals(F,x,y,ones(size(x))) + + solve!(I) + + p=1:100; + scatter(I.🔴.x[p],I.🔴.y[p],color=:blue) + p=101:200; + scatter!(I.🔴.x[p],I.🔴.y[p],color=:red) + + current_figure() +end +