From c41ec7c5c46d3168615f985f082bccb79d2d1a4d Mon Sep 17 00:00:00 2001 From: Charles Kawczynski Date: Wed, 10 Nov 2021 10:52:52 -0800 Subject: [PATCH] Add ClimaCore perf patch --- src/Fields.jl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Fields.jl b/src/Fields.jl index 7e83ec556..263c32a3d 100644 --- a/src/Fields.jl +++ b/src/Fields.jl @@ -54,3 +54,16 @@ function FieldFromNamedTuple(space, nt::NamedTuple) cmv(z) = nt return cmv.(CC.Fields.coordinate_field(space)) end + +# https://github.com/CliMA/ClimaCore.jl/issues/275 +transform_broadcasted(bc::Base.Broadcast.Broadcasted{CC.Fields.FieldVectorStyle}, symb, axes) = + Base.Broadcast.Broadcasted(bc.f, map(arg -> transform_broadcasted(arg, symb, axes), bc.args), axes) +transform_broadcasted(fv::CC.Fields.FieldVector, symb, axes) = parent(getproperty(fv, symb)) +transform_broadcasted(x, symb, axes) = x +@inline function Base.copyto!(dest::CC.Fields.FieldVector, bc::Base.Broadcast.Broadcasted{CC.Fields.FieldVectorStyle}) + for symb in propertynames(dest) + p = parent(getproperty(dest, symb)) + Base.copyto!(p, transform_broadcasted(bc, symb, axes(p))) + end + return dest +end