feec.polar.conga_projections#
CONGA projectors (as matrix-free LinearOperator objects) which allow using
standard tensor-product B-splines in 2D mapped domains with a polar singularity.
The domain is disk-like and parametrized by polar-like coordinates \((s, \theta)\). Usually, the pole is at \(s = 0\), while the boundary is at \(s = L\). The \(\theta\) coordinate is \(2\pi\)-periodic. We assume that the logical (a.k.a. parametric) domain is the strip
where tensor-product B-splines are defined. The physical (a.k.a. computational) domain is \(\Omega = F(\hat{\Omega})\), where \(F: (s, \theta) \mapsto (x_1, x_2)\) is the singular mapping which collapses the side \(s = 0\) to a single point which we call the “pole”.
The application of these projectors to a vector of B-spline coefficients
forces the corresponding spline function to belong to the proper continuous
space in the de Rham complex, after the push-forward. Two different families
of projectors are available: C0PolarProjection_V[0|1|2] enforce \(C^0\)
continuity at the pole, while C1PolarProjection_U[0|1|2] enforce \(C^1\).
Additionally, these operator can enforce homogeneous Dirichlet boundary conditions at \(s = L\). The exact meaning of these boundary conditions depends on the space in the de Rham complex.
References#
The CONGA projectors are part of the “broken-FEEC” approach detailed here:
Y. Güçlü, F. Patrizi, M. Campos Pinto, “A broken-FEEC framework for structure-preserving discretizations of polar domains with tensor-product splines”, https://doi.org/10.48550/arXiv.2505.15996.
Functions#
|
Compute weighted averages in parallel: sum (2/n2) * cos(theta_k) * x_ik sum (2/n2) * sin(theta_k) * x_ik over all k belonging to the process, for fixed i (0 or 1) then sum over all processes |
|
Classes#

|
Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^0\). |
|
Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^1\). |
|
Matrix-free representation of the upper left block of the CONGA projection matrix \(\mathbb{P}_V^1\). |
|
Matrix-free representation of the lower left block of the CONGA projection matrix \(\mathbb{P}_V^1\). |
|
Matrix-free representation of the lower right block of the CONGA projection matrix \(\mathbb{P}_V^1\). |
|
Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^2\). |
|
Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^0\). |
|
Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^1\). |
|
Matrix-free representation of the upper left block of the CONGA projection matrix \(\mathbb{P}_U^1\). |
|
Matrix-free representation of the lower left block of the CONGA projection matrix \(\mathbb{P}_U^1\). |
|
Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^2\). |
Details#
CONGA projectors (as matrix-free LinearOperator objects) which allow using
standard tensor-product B-splines in 2D mapped domains with a polar singularity.
The domain is disk-like and parametrized by polar-like coordinates \((s, \theta)\). Usually, the pole is at \(s = 0\), while the boundary is at \(s = L\). The \(\theta\) coordinate is \(2\pi\)-periodic. We assume that the logical (a.k.a. parametric) domain is the strip
where tensor-product B-splines are defined. The physical (a.k.a. computational) domain is \(\Omega = F(\hat{\Omega})\), where \(F: (s, \theta) \mapsto (x_1, x_2)\) is the singular mapping which collapses the side \(s = 0\) to a single point which we call the “pole”.
The application of these projectors to a vector of B-spline coefficients
forces the corresponding spline function to belong to the proper continuous
space in the de Rham complex, after the push-forward. Two different families
of projectors are available: C0PolarProjection_V[0|1|2] enforce \(C^0\)
continuity at the pole, while C1PolarProjection_U[0|1|2] enforce \(C^1\).
Additionally, these operator can enforce homogeneous Dirichlet boundary conditions at \(s = L\). The exact meaning of these boundary conditions depends on the space in the de Rham complex.
References#
The CONGA projectors are part of the “broken-FEEC” approach detailed here:
Y. Güçlü, F. Patrizi, M. Campos Pinto, “A broken-FEEC framework for structure-preserving discretizations of polar domains with tensor-product splines”, https://doi.org/10.48550/arXiv.2505.15996.
- class C0PolarProjection_V0(W0, *, transposed=False, hbc=False)[source]#
Bases:
LinearOperatorMatrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^0\).
This matrix acts on coefficient vectors in the full tensor-product spline basis of \(\mathbb{S}_{p_1, p_2}(\hat{\Omega})\). It enforces the coefficient relations required for the corresponding spline, after push-forward, to be in the conforming spline space \(V_h^0\).
- Parameters:
- W0TensorFemSpace
The full tensor product spline space \(\mathbb{S}_{p_1, p_2}(\hat{\Omega})\).
- transposedbool, default=False
If
True, create the transposed projection matrix \((\mathbb{P}_V^0)^T\).- hbcbool, default=False
If
True, impose homogeneous Dirichlet boundary conditions.
- property domain#
The domain of the linear operator - an element of Vectorspace
- property codomain#
The codomain of the linear operator - an element of Vectorspace
- property dtype#
The data type of the coefficients of the linear operator, upon convertion to matrix.
- dot(x, out=None)[source]#
Apply the LinearOperator self to the Vector v.
The result is written to the Vector out, if provided.
- Parameters:
- vVector
The vector to which the linear operator (self) is applied. It must belong to the domain of self.
- outVector
The vector in which the result of the operation is stored. It must belong to the codomain of self. If out is None, a new vector is created and returned.
- Returns:
- Vector
The result of the operation. If out is None, a new vector is returned. Otherwise, the result is stored in out and out is returned.
- class C0PolarProjection_V1(W1, transposed=False, hbc=False)[source]#
Bases:
BlockLinearOperatorMatrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^1\).
This matrix acts on coefficient vectors in the full tensor-product spline basis of \(\mathbb{S}_{p_1-1, p_2}(\hat{\Omega}) \times \mathbb{S}_{p_1, p_2-1}(\hat{\Omega})\). It enforces the coefficient relations required for the corresponding spline, after push-forward, to be in the conforming spline space \(V_h^1\).
- Parameters:
- W1VectorFemSpace
The full tensor product spline space of 1-forms \(\mathbb{S}_{p_1-1, p_2}(\hat{\Omega}) \times \mathbb{S}_{p_1, p_2-1}(\hat{\Omega})\).
- transposedbool, default=False
If
True, create the transposed projection matrix \((\mathbb{P}_V^1)^T\).- hbcBoolean
If
True, impose homogeneous Dirichlet boundary conditions on the tangential (angular) component of the field.
- class C0PolarProjection_V2(W2, transposed=False)[source]#
Bases:
LinearOperatorMatrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^2\).
This matrix acts on coefficient vectors in the full tensor-product spline basis of \(\mathbb{S}_{p_1-1, p_2-1}(\hat{\Omega})\). It enforces the coefficient relations required for the corresponding spline, after push-forward, to be in the conforming spline space \(V_h^2\).
- Parameters:
- W2TensorFemSpace
The full tensor product spline space of 2-forms \(\mathbb{S}_{p_1-1, p_2-1}(\hat{\Omega})\).
- transposedbool, default=False
If
True, create the transposed projection matrix \((\mathbb{P}_V^2)^T\).
- property domain#
The domain of the linear operator - an element of Vectorspace
- property codomain#
The codomain of the linear operator - an element of Vectorspace
- property dtype#
The data type of the coefficients of the linear operator, upon convertion to matrix.
- dot(x, out=None)[source]#
Apply the LinearOperator self to the Vector v.
The result is written to the Vector out, if provided.
- Parameters:
- vVector
The vector to which the linear operator (self) is applied. It must belong to the domain of self.
- outVector
The vector in which the result of the operation is stored. It must belong to the codomain of self. If out is None, a new vector is created and returned.
- Returns:
- Vector
The result of the operation. If out is None, a new vector is returned. Otherwise, the result is stored in out and out is returned.
- class C1PolarProjection_U0(W0, *, transposed=False, hbc=False)[source]#
Bases:
LinearOperatorMatrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^0\).
This matrix acts on coefficient vectors in the full tensor-product spline basis of \(\mathbb{S}_{p_1, p_2}(\hat{\Omega})\). It enforces the coefficient relations required for the corresponding spline, after push-forward, to be in the conforming spline space \(U_h^0\).
- Parameters:
- W0TensorFemSpace
The full tensor product spline space \(\mathbb{S}_{p_1, p_2}(\hat{\Omega})\).
- transposedbool, default=False
If
True, create the transposed projection matrix \((\mathbb{P}_U^0)^T\).- hbcbool, default=False
If
True, impose homogeneous Dirichlet boundary conditions.
- property domain#
The domain of the linear operator - an element of Vectorspace
- property codomain#
The codomain of the linear operator - an element of Vectorspace
- property dtype#
The data type of the coefficients of the linear operator, upon convertion to matrix.
- dot(x, out=None)[source]#
Apply the LinearOperator self to the Vector v.
The result is written to the Vector out, if provided.
- Parameters:
- vVector
The vector to which the linear operator (self) is applied. It must belong to the domain of self.
- outVector
The vector in which the result of the operation is stored. It must belong to the codomain of self. If out is None, a new vector is created and returned.
- Returns:
- Vector
The result of the operation. If out is None, a new vector is returned. Otherwise, the result is stored in out and out is returned.
- class C1PolarProjection_U1(W1, transposed=False, hbc=False)[source]#
Bases:
BlockLinearOperatorMatrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^1\).
This matrix acts on coefficient vectors in the full tensor-product spline basis of \(\mathbb{S}_{p_1-1, p_2}(\hat{\Omega}) \times \mathbb{S}_{p_1, p_2-1}(\hat{\Omega})\). It enforces the coefficient relations required for the corresponding spline, after push-forward, to be in the conforming spline space \(U_h^1\).
- Parameters:
- W1VectorFemSpace
The full tensor product spline space of 1-forms \(\mathbb{S}_{p_1-1, p_2}(\hat{\Omega}) \times \mathbb{S}_{p_1, p_2-1}(\hat{\Omega})\).
- transposedbool, default=False
If
True, create the transposed projection matrix \((\mathbb{P}_U^1)^T\).- hbcbool, default=False
If
True, impose homogeneous Dirichlet boundary conditions on the tangential (angular) component of the field.
- class C1PolarProjection_U2(W2, transposed=False)[source]#
Bases:
C0PolarProjection_V2Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^2\).
This matrix acts on coefficient vectors in the full tensor-product spline basis of \(\mathbb{S}_{p_1-1, p_2-1}(\hat{\Omega})\). It enforces the coefficient relations required for the corresponding spline, after push-forward, to be in the conforming spline space \(U_h^2\).
- Parameters:
- W2TensorFemSpace
The full tensor product spline space of 2-forms \(\mathbb{S}_{p_1-1, p_2-1}(\hat{\Omega})\).
- transposedbool, default=False
If
True, create the transposed projection matrix \((\mathbb{P}_U^2)^T\).