Skip to content

Commit 6ce000b

Browse files
committed
Implementation of get_cellfield, get_derivative and get_derivatives functions for distributed transient cell fields
1 parent 19056c6 commit 6ce000b

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

src/ODEs.jl

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,40 @@ function ODEs.TransientCellField(f::DistributedCellField,derivatives::Tuple)
7575
DistributedCellField(fields,get_triangulation(f),f.metadata)
7676
end
7777

78+
function ODEs.TransientCellField(f::DistributedCellField,derivatives::AbstractArray)
79+
fields = map(local_views(f),local_views(derivatives)) do f, derivatives
80+
ODEs.TransientCellField(f,derivatives)
81+
end
82+
DistributedCellField(fields,get_triangulation(f),f.metadata)
83+
end
84+
7885
function ODEs.time_derivative(f::DistributedTransientSingleFieldCellField)
7986
fields = map(local_views(f)) do field
8087
ODEs.time_derivative(field)
8188
end
8289
DistributedCellField(fields,get_triangulation(f))
8390
end
8491

92+
function ODEs.get_cellfield(f::DistributedTransientSingleFieldCellField)
93+
cellfields = map(local_views(f)) do field
94+
ODEs.get_cellfield(field)
95+
end
96+
DistributedCellField(cellfields,get_triangulation(f))
97+
end
98+
99+
function ODEs.get_derivative(f::DistributedTransientSingleFieldCellField, k::Int)
100+
derivatives = map(local_views(f)) do field
101+
ODEs.get_derivative(field, k)
102+
end
103+
DistributedCellField(derivatives,get_triangulation(f))
104+
end
105+
106+
function ODEs.get_derivatives(f::DistributedTransientSingleFieldCellField)
107+
derivatives = map(local_views(f)) do field
108+
ODEs.get_derivatives(field)
109+
end
110+
end
111+
85112
# MultiField FESpace
86113

87114
function ODEs.has_transient(space::DistributedMultiFieldFESpace)
@@ -161,3 +188,23 @@ function ODEs.time_derivative(f::DistributedTransientMultiFieldCellField)
161188
part_fe_fun = map(ODEs.TransientMultiFieldCellField,fields)
162189
DistributedMultiFieldCellField(field_fe_fun,part_fe_fun)
163190
end
191+
192+
function ODEs.get_cellfield(f::DistributedTransientMultiFieldCellField)
193+
field_cellfield = map(ODEs.get_cellfield,f.field_fe_fun)
194+
cellfields = to_parray_of_arrays(map(local_views,field_cellfield))
195+
part_cellfields = map(MultiFieldCellField,cellfields)
196+
DistributedMultiFieldCellField(field_cellfield,part_cellfields)
197+
end
198+
199+
function ODEs.get_derivative(f::DistributedTransientMultiFieldCellField, k::Int)
200+
field_derivative = map(df -> ODEs.get_derivative(df, k), f.field_fe_fun)
201+
derivatives = to_parray_of_arrays(map(local_views,field_derivative))
202+
part_derivatives = map(MultiFieldCellField,derivatives)
203+
DistributedMultiFieldCellField(field_derivative,part_derivatives)
204+
end
205+
206+
function ODEs.get_derivatives(f::DistributedTransientMultiFieldCellField)
207+
derivatives = map(local_views(f)) do field
208+
ODEs.get_derivatives(field)
209+
end
210+
end

0 commit comments

Comments
 (0)