PolyFEM
Loading...
Searching...
No Matches
FSIInterfaceForm.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "Form.hpp"
4
6
7namespace polyfem::solver
8{
13 class FSIInterfaceForm : public Form
14 {
15 public:
17 int total_size,
18 int velocity_offset,
19 int mesh_displacement_offset,
20 int solid_displacement_offset,
21 int fluid_multiplier_offset,
22 int mesh_multiplier_offset,
23 StiffnessMatrix fluid_velocity_trace,
24 StiffnessMatrix fluid_solid_trace,
25 StiffnessMatrix mesh_trace,
26 StiffnessMatrix mesh_solid_trace,
27 const time_integrator::ImplicitTimeIntegrator &fluid_integrator,
28 const time_integrator::ImplicitTimeIntegrator &solid_integrator);
29
30 std::string name() const override { return "fsi-interface"; }
31
32 int fluid_multiplier_size() const { return fluid_velocity_trace_.rows(); }
33 int mesh_multiplier_size() const { return mesh_trace_.rows(); }
36 Eigen::VectorXd physical_constraint(
37 const Eigen::VectorXd &velocity, const Eigen::VectorXd &solid_velocity) const;
38 Eigen::VectorXd mesh_constraint(
39 const Eigen::VectorXd &mesh_displacement,
40 const Eigen::VectorXd &solid_displacement) const;
41
42 protected:
43 double value_unweighted(const Eigen::VectorXd &x) const override;
44 void first_derivative_unweighted(const Eigen::VectorXd &x, Eigen::VectorXd &residual) const override;
45 void second_derivative_unweighted(const Eigen::VectorXd &x, StiffnessMatrix &jacobian) const override;
46
47 private:
49
50 const int total_size_;
64 };
65} // namespace polyfem::solver
int x
Residual-only coupling of the physical fluid/solid interface and of the computational ALE mesh to the...
const StiffnessMatrix fluid_solid_trace_
std::string name() const override
const time_integrator::ImplicitTimeIntegrator & solid_integrator_
const StiffnessMatrix fluid_velocity_trace_
const StiffnessMatrix mesh_multiplier_mass_
const StiffnessMatrix & mesh_multiplier_mass() const
const StiffnessMatrix fluid_multiplier_mass_
void first_derivative_unweighted(const Eigen::VectorXd &x, Eigen::VectorXd &residual) const override
Compute the first derivative of the value wrt x.
Eigen::VectorXd physical_constraint(const Eigen::VectorXd &velocity, const Eigen::VectorXd &solid_velocity) const
double value_unweighted(const Eigen::VectorXd &x) const override
Compute the value of the form.
Eigen::VectorXd mesh_constraint(const Eigen::VectorXd &mesh_displacement, const Eigen::VectorXd &solid_displacement) const
const StiffnessMatrix & fluid_multiplier_mass() const
const time_integrator::ImplicitTimeIntegrator & fluid_integrator_
static StiffnessMatrix make_multiplier_mass(const StiffnessMatrix &trace)
void second_derivative_unweighted(const Eigen::VectorXd &x, StiffnessMatrix &jacobian) const override
Compute the second derivative of the value wrt x.
const StiffnessMatrix mesh_solid_trace_
Implicit time integrator of a second order ODE (equivently a system of coupled first order ODEs).
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix
Definition Types.hpp:24