PolyFEM
Loading...
Searching...
No Matches
polyfem::solver::NavierStokesForm Class Reference

Residual form for the viscous and convective velocity terms of Navier–Stokes. More...

#include <NavierStokesForm.hpp>

Inheritance diagram for polyfem::solver::NavierStokesForm:
[legend]
Collaboration diagram for polyfem::solver::NavierStokesForm:
[legend]

Public Member Functions

 NavierStokesForm (int n_bases, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &geom_bases, std::shared_ptr< assembler::Assembler > stokes_assembler, assembler::NavierStokesVelocity &navier_stokes_assembler, const assembler::AssemblyValsCache &ass_vals_cache, double t, bool is_volume)
 
std::string name () const override
 
void update_quantities (double t, const Eigen::VectorXd &x) override
 Update time-dependent fields.
 
- Public Member Functions inherited from polyfem::solver::Form
virtual ~Form ()
 
virtual void init (const Eigen::VectorXd &x)
 Initialize the form.
 
virtual void finish ()
 
virtual double value (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied with the weigth.
 
Eigen::VectorXd value_per_element (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied with the weigth.
 
virtual void first_derivative (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const
 Compute the first derivative of the value wrt x multiplied with the weigth.
 
void second_derivative (const Eigen::VectorXd &x, StiffnessMatrix &hessian) const
 Compute the second derivative of the value wrt x multiplied with the weigth.
 
virtual bool is_step_valid (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Determine if a step from solution x0 to solution x1 is allowed.
 
virtual double max_step_size (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Determine the maximum step size allowable between the current and next solution.
 
virtual void line_search_begin (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1)
 Initialize variables used during the line search.
 
virtual void line_search_end ()
 Clear variables used during the line search.
 
virtual void post_step (const polysolve::nonlinear::PostStepData &data)
 Update fields after a step in the optimization.
 
virtual void solution_changed (const Eigen::VectorXd &new_x)
 Update cached fields upon a change in the solution.
 
virtual void init_lagging (const Eigen::VectorXd &x)
 Initialize lagged fields TODO: more than one step.
 
virtual void update_lagging (const Eigen::VectorXd &x, const int iter_num)
 Update lagged fields.
 
virtual int max_lagging_iterations () const
 Get the maximum number of lagging iteration allowable.
 
virtual bool uses_lagging () const
 Does this form require lagging?
 
virtual void set_project_to_psd (bool val)
 Set project to psd.
 
bool is_project_to_psd () const
 Get if the form's second derivative is projected to psd.
 
void enable ()
 Enable the form.
 
void disable ()
 Disable the form.
 
void set_enabled (const bool enabled)
 Set if the form is enabled.
 
bool enabled () const
 Determine if the form is enabled.
 
virtual double weight () const
 Get the form's multiplicative constant weight.
 
void set_weight (const double weight)
 Set the form's multiplicative constant weight.
 
virtual bool is_step_collision_free (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Checks if the step is collision free.
 
void set_output_dir (const std::string &output_dir)
 
virtual void set_scale (const double scale)
 sets the scale for the form
 

Protected Member Functions

double value_unweighted (const Eigen::VectorXd &x) const override
 Compute the value of the form.
 
void first_derivative_unweighted (const Eigen::VectorXd &x, Eigen::VectorXd &residual) const override
 Compute the first derivative of the value wrt x.
 
void second_derivative_unweighted (const Eigen::VectorXd &x, StiffnessMatrix &jacobian) const override
 Compute the second derivative of the value wrt x.
 
- Protected Member Functions inherited from polyfem::solver::Form
std::string resolve_output_path (const std::string &path) const
 
virtual Eigen::VectorXd value_per_element_unweighted (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied per element.
 

Private Member Functions

void assemble_stokes (double t)
 
void assemble_convection (const Eigen::VectorXd &x, bool picard, StiffnessMatrix &jacobian) const
 

Private Attributes

int n_bases_
 
const std::vector< basis::ElementBases > & bases_
 
const std::vector< basis::ElementBases > & geom_bases_
 
std::shared_ptr< assembler::Assemblerstokes_assembler_
 
assembler::NavierStokesVelocitynavier_stokes_assembler_
 
const assembler::AssemblyValsCacheass_vals_cache_
 
double t_
 
bool is_volume_
 
StiffnessMatrix stokes_stiffness_
 

Additional Inherited Members

- Protected Attributes inherited from polyfem::solver::Form
bool project_to_psd_ = false
 If true, the form's second derivative is projected to be positive semidefinite.
 
double weight_ = 1
 weight of the form (e.g., AL penalty weight or Δt²)
 
bool enabled_ = true
 If true, the form is enabled.
 
std::string output_dir_
 

Detailed Description

Residual form for the viscous and convective velocity terms of Navier–Stokes.

Definition at line 16 of file NavierStokesForm.hpp.

Constructor & Destructor Documentation

◆ NavierStokesForm()

polyfem::solver::NavierStokesForm::NavierStokesForm ( int  n_bases,
const std::vector< basis::ElementBases > &  bases,
const std::vector< basis::ElementBases > &  geom_bases,
std::shared_ptr< assembler::Assembler stokes_assembler,
assembler::NavierStokesVelocity navier_stokes_assembler,
const assembler::AssemblyValsCache ass_vals_cache,
double  t,
bool  is_volume 
)

Definition at line 10 of file NavierStokesForm.cpp.

References assemble_stokes(), and t_.

Here is the call graph for this function:

Member Function Documentation

◆ assemble_convection()

void polyfem::solver::NavierStokesForm::assemble_convection ( const Eigen::VectorXd &  x,
bool  picard,
StiffnessMatrix jacobian 
) const
private

Definition at line 37 of file NavierStokesForm.cpp.

References ass_vals_cache_, polyfem::assembler::NavierStokesVelocity::assemble_hessian(), bases_, cache, geom_bases_, is_volume_, n_bases_, navier_stokes_assembler_, polyfem::assembler::NavierStokesVelocity::set_picard(), t_, and x.

Referenced by first_derivative_unweighted(), and second_derivative_unweighted().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ assemble_stokes()

void polyfem::solver::NavierStokesForm::assemble_stokes ( double  t)
private

Definition at line 31 of file NavierStokesForm.cpp.

References ass_vals_cache_, bases_, geom_bases_, is_volume_, n_bases_, stokes_assembler_, and stokes_stiffness_.

Referenced by NavierStokesForm(), and update_quantities().

Here is the caller graph for this function:

◆ first_derivative_unweighted()

void polyfem::solver::NavierStokesForm::first_derivative_unweighted ( const Eigen::VectorXd &  x,
Eigen::VectorXd &  gradv 
) const
overrideprotectedvirtual

Compute the first derivative of the value wrt x.

Parameters
[in]xCurrent solution
[out]gradvOutput gradient of the value wrt x

Implements polyfem::solver::Form.

Definition at line 53 of file NavierStokesForm.cpp.

References assemble_convection(), stokes_stiffness_, and x.

Here is the call graph for this function:

◆ name()

std::string polyfem::solver::NavierStokesForm::name ( ) const
inlineoverridevirtual

Implements polyfem::solver::Form.

Definition at line 29 of file NavierStokesForm.hpp.

◆ second_derivative_unweighted()

void polyfem::solver::NavierStokesForm::second_derivative_unweighted ( const Eigen::VectorXd &  x,
StiffnessMatrix hessian 
) const
overrideprotectedvirtual

Compute the second derivative of the value wrt x.

Parameters
[in]xCurrent solution
[out]hessianOutput Hessian of the value wrt x

Implements polyfem::solver::Form.

Definition at line 61 of file NavierStokesForm.cpp.

References assemble_convection(), polyfem::solver::Form::project_to_psd_, stokes_stiffness_, and x.

Here is the call graph for this function:

◆ update_quantities()

void polyfem::solver::NavierStokesForm::update_quantities ( double  t,
const Eigen::VectorXd &  x 
)
overridevirtual

Update time-dependent fields.

Parameters
tCurrent time
xCurrent solution at time t

Reimplemented from polyfem::solver::Form.

Definition at line 70 of file NavierStokesForm.cpp.

References assemble_stokes(), and t_.

Here is the call graph for this function:

◆ value_unweighted()

double polyfem::solver::NavierStokesForm::value_unweighted ( const Eigen::VectorXd &  x) const
overrideprotectedvirtual

Compute the value of the form.

Parameters
xCurrent solution
Returns
Computed value

Implements polyfem::solver::Form.

Definition at line 48 of file NavierStokesForm.cpp.

References polyfem::log_and_throw_error().

Here is the call graph for this function:

Member Data Documentation

◆ ass_vals_cache_

const assembler::AssemblyValsCache& polyfem::solver::NavierStokesForm::ass_vals_cache_
private

Definition at line 47 of file NavierStokesForm.hpp.

Referenced by assemble_convection(), and assemble_stokes().

◆ bases_

const std::vector<basis::ElementBases>& polyfem::solver::NavierStokesForm::bases_
private

Definition at line 43 of file NavierStokesForm.hpp.

Referenced by assemble_convection(), and assemble_stokes().

◆ geom_bases_

const std::vector<basis::ElementBases>& polyfem::solver::NavierStokesForm::geom_bases_
private

Definition at line 44 of file NavierStokesForm.hpp.

Referenced by assemble_convection(), and assemble_stokes().

◆ is_volume_

bool polyfem::solver::NavierStokesForm::is_volume_
private

Definition at line 49 of file NavierStokesForm.hpp.

Referenced by assemble_convection(), and assemble_stokes().

◆ n_bases_

int polyfem::solver::NavierStokesForm::n_bases_
private

Definition at line 42 of file NavierStokesForm.hpp.

Referenced by assemble_convection(), and assemble_stokes().

◆ navier_stokes_assembler_

assembler::NavierStokesVelocity& polyfem::solver::NavierStokesForm::navier_stokes_assembler_
private

Definition at line 46 of file NavierStokesForm.hpp.

Referenced by assemble_convection().

◆ stokes_assembler_

std::shared_ptr<assembler::Assembler> polyfem::solver::NavierStokesForm::stokes_assembler_
private

Definition at line 45 of file NavierStokesForm.hpp.

Referenced by assemble_stokes().

◆ stokes_stiffness_

StiffnessMatrix polyfem::solver::NavierStokesForm::stokes_stiffness_
private

◆ t_

double polyfem::solver::NavierStokesForm::t_
private

Definition at line 48 of file NavierStokesForm.hpp.

Referenced by assemble_convection(), NavierStokesForm(), and update_quantities().


The documentation for this class was generated from the following files: