FEniCSx_ii is an extension of FEniCSx that allows users to work with non-conforming 3D-1D meshes.
The core algorithm is based on the framework proposed by Kuchta 2021 {cite}intro-Kuchta2021trace
and implemented in FEniCS_ii.
The new framework addresses the limitation of intro-Mardal2012 cbc.block, and instead
implements the matrix-matrix products in a non-lazy fashion, and uses PETSc Nest matrices
to set up the blocked system.
Given a 3D domain with a function
See for instance
D'Angelo & Quarteroni, 2008 {cite}intro-dangelo20083d1d,
Kuchta 2021 {cite}intro-Kuchta2021trace or
Masri, Kuchta & Riviere, 2024 {cite}intro-masri2024coupled3d1d.
Several (non-local) operators are implemented in {py:mod}fenicsx_ii:
- {py:class}
PointwiseTrace<fenicsx_ii.PointwiseTrace>, the operator:$\Pi(u)(\hat x)=u(\hat x)$ ,$\hat x \in \Gamma$ . - {py:class}
Circle<fenicsx_ii.Circle>, the operator$\Pi(u)(\hat x)=\frac{1}{\vert P_R \vert}\int_{P_{R}(\Gamma(\hat x))}u~\mathrm{d}s$ , where$P_R(\Gamma(\hat x))$ is the perimeter of a disk with radius$R$ , normal aligning with$\Gamma(\hat x)$ and origin at$\hat x$ . - {py:class}
Disk<fenicsx_ii.Disk>, the operator$\Pi(u)(\hat x)=\frac{1}{\vert D_R \vert}\int_{D_R(\Gamma(\hat x))} u~\mathrm{d}x$ , where$D_R(\Gamma(\hat x))$ is the disk with radius$R$ , normal aligining with$\Gamma(\hat x)$ and origin at$\hat x$ .
Any other operator can be implemented by following the {py:class}ReductionOperator<fenicsx_ii.ReductionOperator>-protocol.
The development of FEniCSx_ii has been funded by the Wellcome Trust, grant number: 313298/Z/24/Z
:filter: cited
:labelprefix:
:keyprefix: intro-