From cb3552a7c00f8617ed6eaaa4f91315f4a695d993 Mon Sep 17 00:00:00 2001 From: gaelforget Date: Tue, 27 Aug 2024 20:44:07 -0400 Subject: [PATCH 1/3] add methods (*,ones,zeros,fill) --- src/Types.jl | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/Types.jl b/src/Types.jl index ce9e79b9..8d32e474 100644 --- a/src/Types.jl +++ b/src/Types.jl @@ -131,6 +131,8 @@ function fill(val::Any,a::AbstractMeshArray) return c end +fill(val::Any,a::gcmgrid,args...) = val .* ones(a,args...) + function fill!(a::AbstractMeshArray,val::Any) for I in eachindex(a.f) fill!(a.f[I],val) @@ -171,3 +173,37 @@ function *(a::AbstractMeshArray,b::AbstractMeshArray) end return c end + +function *(a::AbstractMeshArray,b::Union{AbstractMatrix,AbstractVector}) + c=MeshArray(a.grid,eltype(a[eachindex(a.f)[1]]),size(b)...) + for I in eachindex(IndexCartesian(),b) + c[:,I.I...].=b[I]*a + end + return c +end + +import Base: ones, zeros + +function zeros(a::gcmgrid,args...) + b=MeshArray(a) + [b.f[c].=1.0 for c in eachindex(b.f)] + (length(args)>0 ? b*ones(args...) : b) +end + +function ones(a::gcmgrid,args...) + b=MeshArray(a) + [b.f[c].=1.0 for c in eachindex(b.f)] + (length(args)>0 ? b*ones(args...) : b) +end + +function zeros(a::AbstractMeshArray) + b=similar(a) + [b.f[c].=0.0 for c in eachindex(b.f)] + b +end + +function ones(a::AbstractMeshArray) + b=similar(a) + [b.f[c].=1.0 for c in eachindex(b.f)] + b +end From 2ef549ce3a98b4a251b849e426474da08148b315 Mon Sep 17 00:00:00 2001 From: gaelforget Date: Tue, 27 Aug 2024 23:35:53 -0400 Subject: [PATCH 2/3] fix edge cases --- src/Type_gcmarray.jl | 4 ++-- src/Types.jl | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Type_gcmarray.jl b/src/Type_gcmarray.jl index f8d56c19..857fcb00 100644 --- a/src/Type_gcmarray.jl +++ b/src/Type_gcmarray.jl @@ -243,7 +243,7 @@ function Base.similar(A::gcmarray;m::varmeta=defaultmeta) if ndims(A)==1 B=gcmarray(similar(A.grid),eltype(A),copy(A.fSize),copy(A.fIndex); meta=m) else - B=gcmarray(similar(A.grid),eltype(A),copy(A.fSize),copy(A.fIndex),size(A,2); meta=m) + B=gcmarray(similar(A.grid),eltype(A),copy(A.fSize),copy(A.fIndex),size(A)[2:end]...; meta=m) end return B end @@ -259,7 +259,7 @@ function Base.similar(bc::Broadcast.Broadcasted{Broadcast.ArrayStyle{gcmarray}}, if ndims(A)==1 B=gcmarray(similar(A.grid),ElType,copy(A.fSize),copy(A.fIndex)) else - B=gcmarray(similar(A.grid),ElType,copy(A.fSize),copy(A.fIndex),size(A,2)) + B=gcmarray(similar(A.grid),ElType,copy(A.fSize),copy(A.fIndex),size(A)[2:end]...) end return B end diff --git a/src/Types.jl b/src/Types.jl index 8d32e474..44c91b8d 100644 --- a/src/Types.jl +++ b/src/Types.jl @@ -174,10 +174,12 @@ function *(a::AbstractMeshArray,b::AbstractMeshArray) return c end -function *(a::AbstractMeshArray,b::Union{AbstractMatrix,AbstractVector}) +function *(a::AbstractMeshArray,b::Array) c=MeshArray(a.grid,eltype(a[eachindex(a.f)[1]]),size(b)...) - for I in eachindex(IndexCartesian(),b) - c[:,I.I...].=b[I]*a + for f in 1:length(a.f) + for bb in eachindex(IndexCartesian(),b) + c.f[f,bb.I...].=b[bb.I...]*a[f] + end end return c end From 3dba89d38f387db0fb15dc6330ac4226960451ab Mon Sep 17 00:00:00 2001 From: gaelforget Date: Tue, 27 Aug 2024 23:36:19 -0400 Subject: [PATCH 3/3] bump version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 1527d7d5..90c54c12 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "MeshArrays" uuid = "cb8c808f-1acf-59a3-9d2b-6e38d009f683" authors = ["gaelforget "] -version = "0.3.10" +version = "0.3.11" [deps] CatViews = "81a5f4ea-a946-549a-aa7e-2a7f63a27d31"