Warning
You are reading a version of the website built against the unstable main
branch. This content is liable to change without notice and may be inappropriate for your use case.
You can find the documentation for the current stable release here.
firedrake.ensemble package¶
Submodules¶
firedrake.ensemble.ensemble module¶
- class firedrake.ensemble.ensemble.Ensemble(comm, M, **kwargs)[source]¶
Bases:
object
Create a set of space and ensemble subcommunicators.
- Parameters:
comm – The communicator to split.
M – the size of the communicators used for spatial parallelism.
- Keyword Arguments:
ensemble_name – string used as communicator name prefix, for debugging.
- Raises:
ValueError – if
M
does not dividecomm.size
exactly.
- allreduce(f, f_reduced, op=<mpi4py.MPI.Op object>)[source]¶
Allreduce a function f into f_reduced over
ensemble_comm
.- Parameters:
f – The a
Function
to allreduce.f_reduced – the result of the reduction.
op – MPI reduction operator. Defaults to MPI.SUM.
- Raises:
ValueError – if function communicators mismatch each other or the ensemble spatial communicator, or if the functions are in different spaces
- bcast(f, root=0)[source]¶
Broadcast a function f over
ensemble_comm
from rank root- Parameters:
f – The
Function
to broadcast.root – rank to broadcast from. Defaults to 0.
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
- property ensemble_rank¶
The rank of the local ensemble member.
- property ensemble_size¶
The number of ensemble members.
- iallreduce(f, f_reduced, op=<mpi4py.MPI.Op object>)[source]¶
Allreduce (non-blocking) a function f into f_reduced over
ensemble_comm
.- Parameters:
f – The a
Function
to allreduce.f_reduced – the result of the reduction.
op – MPI reduction operator. Defaults to MPI.SUM.
- Returns:
list of MPI.Request objects (one for each of f.subfunctions).
- Raises:
ValueError – if function communicators mismatch each other or the ensemble spatial communicator, or if the functions are in different spaces
- ibcast(f, root=0)[source]¶
Broadcast (non-blocking) a function f over
ensemble_comm
from rank root- Parameters:
f – The
Function
to broadcast.root – rank to broadcast from. Defaults to 0.
- Returns:
list of MPI.Request objects (one for each of f.subfunctions).
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
- irecv(f, source=-1, tag=-1)[source]¶
Receive (non-blocking) a function f over
ensemble_comm
from another ensemble rank.- Parameters:
f – The a
Function
to receive intosource – the rank to receive from. Defaults to MPI.ANY_SOURCE.
tag – the tag of the message. Defaults to MPI.ANY_TAG.
- Returns:
list of MPI.Request objects (one for each of f.subfunctions).
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
- ireduce(f, f_reduced, op=<mpi4py.MPI.Op object>, root=0)[source]¶
Reduce (non-blocking) a function f into f_reduced over
ensemble_comm
to rank root- Parameters:
f – The a
Function
to reduce.f_reduced – the result of the reduction on rank root.
op – MPI reduction operator. Defaults to MPI.SUM.
root – rank to reduce to. Defaults to 0.
- Returns:
list of MPI.Request objects (one for each of f.subfunctions).
- Raises:
ValueError – if function communicators mismatch each other or the ensemble spatial communicator, or is the functions are in different spaces
- isend(f, dest, tag=0)[source]¶
Send (non-blocking) a function f over
ensemble_comm
to another ensemble rank.- Parameters:
f – The a
Function
to senddest – the rank to send to
tag – the tag of the message. Defaults to 0.
- Returns:
list of MPI.Request objects (one for each of f.subfunctions).
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
- isendrecv(fsend, dest, sendtag=0, frecv=None, source=-1, recvtag=-1)[source]¶
Send a function fsend and receive a function frecv over
ensemble_comm
to another ensemble rank.- Parameters:
- Returns:
list of MPI.Request objects (one for each of fsend.subfunctions and frecv.subfunctions).
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
- recv(f, source=-1, tag=-1, statuses=None)[source]¶
Receive (blocking) a function f over
ensemble_comm
from another ensemble rank.- Parameters:
f – The a
Function
to receive intosource – the rank to receive from. Defaults to MPI.ANY_SOURCE.
tag – the tag of the message. Defaults to MPI.ANY_TAG.
statuses – MPI.Status objects (one for each of f.subfunctions or None).
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
- reduce(f, f_reduced, op=<mpi4py.MPI.Op object>, root=0)[source]¶
Reduce a function f into f_reduced over
ensemble_comm
to rank root- Parameters:
f – The a
Function
to reduce.f_reduced – the result of the reduction on rank root.
op – MPI reduction operator. Defaults to MPI.SUM.
root – rank to reduce to. Defaults to 0.
- Raises:
ValueError – if function communicators mismatch each other or the ensemble spatial communicator, or is the functions are in different spaces
- send(f, dest, tag=0)[source]¶
Send (blocking) a function f over
ensemble_comm
to another ensemble rank.- Parameters:
f – The a
Function
to senddest – the rank to send to
tag – the tag of the message. Defaults to 0
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
- sendrecv(fsend, dest, sendtag=0, frecv=None, source=-1, recvtag=-1, status=None)[source]¶
Send (blocking) a function fsend and receive a function frecv over
ensemble_comm
to another ensemble rank.- Parameters:
fsend – The a
Function
to send.dest – the rank to send to.
sendtag – the tag of the send message. Defaults to 0.
frecv – The a
Function
to receive into.source – the rank to receive from. Defaults to MPI.ANY_SOURCE.
recvtag – the tag of the received message. Defaults to MPI.ANY_TAG.
status – MPI.Status object or None.
- Raises:
ValueError – if function communicator mismatches the ensemble spatial communicator.
firedrake.ensemble.ensemble_function module¶
- class firedrake.ensemble.ensemble_function.EnsembleCofunction(function_space: EnsembleDualSpace)[source]¶
Bases:
EnsembleFunctionBase
A mixed finite element Cofunction distributed over an ensemble.
- Parameters:
function_space (
EnsembleDualSpace
) – The function space of the cofunction.
- class firedrake.ensemble.ensemble_function.EnsembleFunction(function_space: EnsembleFunctionSpaceBase)[source]¶
Bases:
EnsembleFunctionBase
A mixed Function defined on a
Ensemble
. The subcomponents are distributed over the ensemble members, and are specified locally in aEnsembleFunctionSpace
.- Parameters:
function_space (
EnsembleFunctionSpace
.) – The function space of the Function.
Notes
Passing an
EnsembleDualSpace
toEnsembleFunction
will return an instance ofEnsembleCofunction
.This class does not carry UFL symbolic information, unlike a
Function
. UFL expressions can only be defined locally on each ensemble member using aFunction
fromEnsembleFunction.subfunctions
.
firedrake.ensemble.ensemble_functionspace module¶
- class firedrake.ensemble.ensemble_functionspace.EnsembleDualSpace(local_spaces: Collection, ensemble: Ensemble)[source]¶
Bases:
EnsembleFunctionSpaceBase
A mixed dual function space defined on an
ensemble.Ensemble
. The subcomponents are distributed over the ensemble members, but are specified locally on each ensemble member.- Parameters:
local_spaces (Collection) – The list of dual function spaces on the local ensemble.comm.
ensemble (.ensemble.Ensemble) – The communicator that the function space is defined over.
Notes
Passing a list of dual local_spaces to
EnsembleFunctionSpace
will return an instance ofEnsembleDualSpace
.This class does not carry UFL symbolic information, unlike a
FiredrakeDualSpace
. UFL expressions can only be defined locally on each ensemble member using aFiredrakeDualSpace
from EnsembleDualSpace.local_spaces.Examples
If U=CG1, V=DG0, and W=U*V, we can have the nested mixed dual space U*xV*xV*xW*xU*. This can be distributed over an
ensemble.Ensemble
with two ensemble members by splitting into [U*xV*]x[V*xW*xU*]. The following code creates the correspondingEnsembleDualSpace
:ensemble = Ensemble(COMM_WORLD, COMM_WORLD.size//2) mesh = UnitIntervalMesh(8, comm=ensemble.comm) U = FunctionSpace(mesh, "CG", 1) V = FunctionSpace(mesh, "DG", 0) W = U*V if ensemble.ensemble_rank == 0: local_spaces = [U.dual(), V.dual()] else: local_spaces = [V.dual(), W.dual(), U.dual()] efs0 = EnsembleDualSpace(local_spaces, ensemble) efs1 = EnsembleFunctionSpace(local_spaces, ensemble)
- class firedrake.ensemble.ensemble_functionspace.EnsembleFunctionSpace(local_spaces: Collection, ensemble: Ensemble)[source]¶
Bases:
EnsembleFunctionSpaceBase
A mixed primal function space defined on an
Ensemble
. The subcomponents are distributed over the ensemble members, but are specified locally on each ensemble member.- Parameters:
local_spaces (Collection) – The list of primal function spaces on the local
Ensemble.comm
.ensemble (
Ensemble
) – The communicator that the function space is defined over.
Notes
Passing a list of dual local_spaces to
EnsembleFunctionSpace
will return an instance ofEnsembleDualSpace
.This class does not carry UFL symbolic information, unlike a
FunctionSpace
. UFL expressions can only be defined locally on each ensemble member using aFunctionSpace
from EnsembleFunctionSpace.local_spaces.Examples
If U=CG1, V=DG0, and W=UxV, we can have the nested mixed space UxVxVxWxU. This can be distributed over an
ensemble.Ensemble
with two ensemble members by splitting into [UxV]x[VxWxU]. The following code creates the correspondingEnsembleFunctionSpace
:ensemble = Ensemble(COMM_WORLD, COMM_WORLD.size//2) mesh = UnitIntervalMesh(8, comm=ensemble.comm) U = FunctionSpace(mesh, "CG", 1) V = FunctionSpace(mesh, "DG", 0) W = U*V if ensemble.ensemble_rank == 0: local_spaces = [U, V] else: local_spaces = [V, W, U] efs = EnsembleFunctionSpace(local_spaces, ensemble)