Template Class CoupledElasticityProblem¶
Defined in File coupled_elasticity.h
Inheritance Relationships¶
Base Type¶
public ImmersX::ElasticityProblem< dim, dim >(Template Class ElasticityProblem)
Class Documentation¶
-
template<int dim, int spacedim = dim>
class CoupledElasticityProblem : public ImmersX::ElasticityProblem<dim, dim>¶ Public Functions
-
CoupledElasticityProblem(const ElasticityProblemParameters<dim, spacedim> &par)¶
-
void run()¶
-
void run_timestep0()¶
-
void run_timestep()¶
-
void run_timestep(const double physical_time)¶
Solve at the supplied physical time, refreshing mechanical boundary data and affine lifting when that time changes.
-
void compute_pressure_at_immersed_surface()¶
Compute tissue pressure from physical wall samples with fixed overlap flags.
Missing tissue contributes zero; normalization always uses the complete nominal section. Every selected multiplier mode enters the physical traction before taking its normal component.
For point coupling the coefficients are forces. Inclusion k uses its own multiplier block b(k), or its segment’s block when clustering: \(\mathbf t_q=|S_k|^{-1}\sum_c\lambda_{b(k),c} \boldsymbol\phi_c(q)\). The inclusion and vessel values are
On a complete circle with resolved Fourier products, only the radial moments cos(theta) e_x and sin(theta) e_y survive, each with mean 1/2. These have coefficient indices 3 and 7 in 3D, or 2 and 5 in 2D. Their cancellation with other modes does not hold on a partial section.\[ p_k=\frac{\sum_{q\in S_k}w_q\chi_q\sigma_q}{|S_k|},\qquad p_v=\frac{\sum_{k\in v}\sum_{q\in S_k}w_q\chi_q\sigma_q} {\sum_{k\in v}|S_k|},\qquad \sigma_q=\mathbf t_q\cdot\mathbf n_q+\sigma^-_{nn,q}. \]For tensor-product coupling, coefficients are traction densities: \(\mathbf t_{j\ell}=\sum_c\Lambda_c(s_j) \boldsymbol\phi_c(j,\ell)\). First compute the covered-section mean using all nominal section weights in its denominator:
Preserve the centerline averaging convention, including for a variable radius. If v_j are the representative quadrature weights, then \(p_v=\sum_{j\in\gamma_v}v_j p_{\rm cov}(s_j)/ \sum_{j\in\gamma_v}v_j\). The values stored per reduced support point are coefficients of a scalar L2 projection with the nominal centerline mass:\[ p_{\rm cov}(s_j)= \frac{\sum_\ell w_{j\ell}\chi_{j\ell}\sigma_{j\ell}} {\sum_\ell w_{j\ell}}. \]Vessel values are stored in pressure_at_immersed_surface; inclusion values or projected coefficients are stored in pressure_at_immersed_surface_by_inclusion.\[ M_{ik}=\sum_jv_j\psi_i(s_j)\psi_k(s_j),\qquad b_i=\sum_jv_j p_{\rm cov}(s_j)\psi_i(s_j),\qquad Mp=b. \]If ElasticityProblemParameters::remove_interior_stress_from_pressure is true, retain the axisymmetric plane-strain correction \(\sigma^-_{nn,q}=\overline K\bar a_n(s_q)/r(s_q)\). Here \(\overline K\) is the arithmetic mean of 2(lambda_L+mu) over the located particles of the inclusion or reduced cell; it is zero when there are no such particles. No default material is assigned outside. The radius and mean radial datum use the nominal geometry. Point coupling uses the full nominal rhs moments, averaged over a segment’s inclusions when clustering. Tensor coupling first projects the original datum into the modal FE space using the full nominal Gram and rhs, independently of overlap and without changing the accepted multiplier. On a resolved circle the radial mean is \(\bar a_n=(a_d+a_{2d+1})/2\). Only these radial modes enter the interior correction. A rigid translation contributes no interior stress, including on a partial wall. This closure retains the previous mean radial model and does not infer a general angular interior stress.
See doc/how-to/support-aware-weak-terms.md for the fixed quadrature support and geometry convention.
-
void update_vessel_radius_data(std::vector<double> new_data)¶
-
void update_vessel_radius_data(std::vector<double> new_data, std::vector<int> cells_per_vessel)¶
-
std::vector<std::vector<double>> split_pressure_over_inclusions(std::vector<int>, Vector<double>) const¶
Interpolate gathered inclusion pressures to vessel samples.
A single inclusion supplies a constant pressure; a single requested sample receives the vessel mean. Each vessel needs at least one sample. This callback performs no MPI operations and may run only on rank zero after the caller gathers the pressure vector.
-
void make_vessel_index_of_a_cell()¶
Fill vessel_index_of_a_cell from the “vessel_id” input file field and set n_vessels().
Throws if the ids are not 0, 1, …, n_vessels() - 1.
-
inline const std::vector<unsigned int> &get_vessel_index_of_a_cell() const¶
Vessel id of each reduced cell, indexed by active_cell_index().
Entries of cells not owned by this rank are numbers::invalid_unsigned_int.
-
inline unsigned int n_vessels() const¶
Public Members
-
TrilinosWrappers::MPI::Vector pressure_at_immersed_surface¶
Mean normal stress on the wall of each vessel, \(p_v\), indexed by vessel id.
-
TrilinosWrappers::MPI::Vector pressure_at_immersed_surface_by_inclusion¶
With point coupling: mean normal stress on the wall of each inclusion, \(p_k\), indexed by inclusion id.
With tensor-product coupling: the pressure \(p(s)\) at each support point of the reduced grid, in the order of the degrees of freedom of the first component of the reduced DoFHandler. See compute_pressure_at_immersed_surface().
-
CoupledElasticityProblem(const ElasticityProblemParameters<dim, spacedim> &par)¶