Program Listing for File coupled_elasticity.h

↰ Return to documentation for file (include/immersx/physics/coupled_elasticity.h)

/* ---------------------------------------------------------------------
 */
#ifndef immersx_coupled_elasticity_h
#define immersx_coupled_elasticity_h

#include <immersx/physics/elasticity.h>



namespace ImmersX
{
  template <int dim, int spacedim = dim>
  class CoupledElasticityProblem : public ElasticityProblem<dim, spacedim>
  {
  public:
    CoupledElasticityProblem(
      const ElasticityProblemParameters<dim, spacedim> &par);

    void
    run();
    void
    run_timestep0();
    void
    run_timestep();

    void
    run_timestep(const double physical_time);

    void
    compute_pressure_at_immersed_surface();

    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;

    void
    make_vessel_index_of_a_cell();

    const std::vector<unsigned int> &
    get_vessel_index_of_a_cell() const
    {
      return vessel_index_of_a_cell;
    }

    unsigned int
    n_vessels() const
    {
      if (!this->uses_tensor_product_coupling())
        return this->inclusions.get_n_vessels();
      else
        return n_vessels_from_input;
    };

    TrilinosWrappers::MPI::Vector pressure_at_immersed_surface;

    TrilinosWrappers::MPI::Vector pressure_at_immersed_surface_by_inclusion;

  private:
    void
    refine_and_transfer_around_inclusions();

    void
    output_pressure_at_immersed_surface(bool) const;

    std::vector<unsigned int> vessel_index_of_a_cell;

    unsigned int n_vessels_from_input = 0;
    // unsigned int n_vessels;
  };

} // namespace ImmersX

#endif