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

\[\hat{\Omega} := [0, L] \times (\mathbb{R}/2\pi\mathbb{Z})\]

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:

[1]

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#

cos_sin_avg(theta, x, angle_comm, s2, e2, n2, i)

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

toeplitz_columns_sym(t, s2, e2, n2)

Classes#

Inheritance diagram of psydac.feec.polar.conga_projections

C0PolarProjection_V0(W0, *[, transposed, hbc])

Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^0\).

C0PolarProjection_V1(W1[, transposed, hbc])

Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^1\).

C0PolarProjection_V1_00(W1)

Matrix-free representation of the upper left block of the CONGA projection matrix \(\mathbb{P}_V^1\).

C0PolarProjection_V1_10(W1[, transposed])

Matrix-free representation of the lower left block of the CONGA projection matrix \(\mathbb{P}_V^1\).

C0PolarProjection_V1_11(W1[, transposed, hbc])

Matrix-free representation of the lower right block of the CONGA projection matrix \(\mathbb{P}_V^1\).

C0PolarProjection_V2(W2[, transposed])

Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_V^2\).

C1PolarProjection_U0(W0, *[, transposed, hbc])

Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^0\).

C1PolarProjection_U1(W1[, transposed, hbc])

Matrix-free representation of the CONGA projection matrix \(\mathbb{P}_U^1\).

C1PolarProjection_U1_00(W1[, transposed])

Matrix-free representation of the upper left block of the CONGA projection matrix \(\mathbb{P}_U^1\).

C1PolarProjection_U1_10(W1[, transposed])

Matrix-free representation of the lower left block of the CONGA projection matrix \(\mathbb{P}_U^1\).

C1PolarProjection_U2(W2[, transposed])

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

\[\hat{\Omega} := [0, L] \times (\mathbb{R}/2\pi\mathbb{Z})\]

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:

[1]

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: LinearOperator

Matrix-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.

transpose(conjugate=False)[source]#

Transpose the LinearOperator .

If conjugate is True, return the Hermitian transpose.

tosparse()[source]#

Convert to a sparse matrix in any of the formats supported by scipy.sparse.

toarray()[source]#

Convert to Numpy 2D array.

class C0PolarProjection_V1(W1, transposed=False, hbc=False)[source]#

Bases: BlockLinearOperator

Matrix-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: LinearOperator

Matrix-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.

transpose(conjugate=False)[source]#

Transpose the LinearOperator .

If conjugate is True, return the Hermitian transpose.

tosparse()[source]#

Convert to a sparse matrix in any of the formats supported by scipy.sparse.

toarray()[source]#

Convert to Numpy 2D array.

class C1PolarProjection_U0(W0, *, transposed=False, hbc=False)[source]#

Bases: LinearOperator

Matrix-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.

transpose(conjugate=False)[source]#

Transpose the LinearOperator .

If conjugate is True, return the Hermitian transpose.

tosparse()[source]#

Convert to a sparse matrix in any of the formats supported by scipy.sparse.

toarray()[source]#

Convert to Numpy 2D array.

class C1PolarProjection_U1(W1, transposed=False, hbc=False)[source]#

Bases: BlockLinearOperator

Matrix-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_V2

Matrix-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\).

transpose(conjugate=False)[source]#

Transpose the LinearOperator .

If conjugate is True, return the Hermitian transpose.