interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc File Reference
#include "generic.h"
#include "solid.h"
#include "constitutive.h"
#include "navier_stokes.h"
#include "multi_physics.h"
#include "meshes/simple_cubic_mesh.h"
#include "meshes/quarter_tube_mesh.h"

Classes

class  oomph::PseudoElasticBulkElement< ELEMENT >
 
class  oomph::FaceGeometry< PseudoElasticBulkElement< ELEMENT > >
 FaceGeometry of wrapped element is the same as the underlying element. More...
 
class  WallMesh< ELEMENT >
 
class  FluidMesh< ELEMENT >
 
class  PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >
 

Namespaces

 oomph
 DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
 
 Global_Parameters
 Namespace for global parameters.
 

Typedefs

typedef PseudoElasticCollapsibleChannelProblem< RefineablePseudoSolidNodeUpdateElement< RefineableQTaylorHoodElement< 3 >, PseudoElasticBulkElement< RefineableQPVDElement< 3, 3 > > >, RefineableQPVDElement< 3, 3 > > PseudoElasticFSIProblem
 

Functions

void Global_Parameters::press_load (const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
 Load function for wall. More...
 
void set_pseudo_elastic_fsi_solver (PseudoElasticFSIProblem &problem)
 
int main (int argc, char *argv[])
 

Variables

double Global_Parameters::L =12.0
 tube length More...
 
double Global_Parameters::Lup =1.5
 upstream length More...
 
double Global_Parameters::Ldown =3.0
 downstream length More...
 
double Global_Parameters::H =0.15
 wall thickness More...
 
unsigned Global_Parameters::N_slice =4
 number of axial slices in fluid mesh More...
 
ConstitutiveLawGlobal_Parameters::Constitutive_law_wall_pt =0
 Pointer to constitutive law for the wall. More...
 
ConstitutiveLawGlobal_Parameters::Constitutive_law_pseudo_elastic_pt =0
 Pointer to constitutive law for the pseudo elastic node update elements. More...
 
double Global_Parameters::Nu_wall =0.3
 
double Global_Parameters::Nu_pseudo_elastic =0.1
 
double Global_Parameters::Pcos = 2.0e-4
 Perturbation pressure. More...
 
double Global_Parameters::Lambda_sq =0.0
 Timescale ratio (non-dim density) for solid. More...
 
double Global_Parameters::T =1.0
 Period of periodic variation in inflow pressure. More...
 
double Global_Parameters::Dt =0.01
 Timestep. More...
 
unsigned Global_Parameters::Nstep_per_period =40
 Number of steps per period. More...
 
unsigned Global_Parameters::Nperiod =5
 Number of periods. More...
 

Typedef Documentation

◆ PseudoElasticFSIProblem

Function Documentation

◆ main()

int main ( int argc  ,
char argv[] 
)

Demonstrate how to solve a 3D FSI problem with pseudo-solid node update for the fluid mesh.

1674 {
1675  // Store command line arguments
1676  CommandLineArgs::setup(argc,argv);
1677 
1678  // Create generalised Hookean constitutive equations
1681 
1684 
1685  //Set up the problem
1687 
1688  // Doc info
1689  DocInfo doc_info;
1690  doc_info.set_directory("RESLT");
1691 
1692  // Doc initial configuration
1693  problem.doc_solution(doc_info);
1694  oomph_info << "Before manual refine: doc_info.number()="
1695  << doc_info.number() << std::endl;
1696  doc_info.number()++;
1697 
1698  // Do manual non-uniform refinement
1699  if (CommandLineArgs::Argc!=1)
1700  {
1701  problem.adapt();
1702  }
1703 
1704  // Doc afterwards
1705  problem.doc_solution(doc_info);
1706  oomph_info << "After manual refine: doc_info.number()="
1707  << doc_info.number() << std::endl;
1708  doc_info.number()++;
1709 
1710  // Setup timestepping
1713  problem.initialise_dt(dt);
1714  problem.set_initial_condition();
1715 
1716  // set
1717  if (CommandLineArgs::Argc>2)
1718  {
1720  }
1721 
1722  // Steady run
1723  problem.steady_run(doc_info);
1724 
1725  // Unteady run
1726  problem.unsteady_run(doc_info);
1727 
1728  // clean up
1729  if (CommandLineArgs::Argc>2)
1730  {
1731  IterativeLinearSolver* solver_pt = dynamic_cast<IterativeLinearSolver*>(problem.linear_solver_pt());
1732  delete solver_pt->preconditioner_pt();
1733  delete solver_pt;
1734  }
1735 } // end_of_main
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:436
Definition: oomph_utilities.h:499
void set_directory(const std::string &directory)
Definition: oomph_utilities.cc:298
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554
Definition: constitutive_laws.h:699
Definition: iterative_linear_solver.h:54
Preconditioner *& preconditioner_pt()
Access function to preconditioner.
Definition: iterative_linear_solver.h:95
void set_pseudo_elastic_fsi_solver(PseudoElasticFSIProblem &problem)
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:1597
void setup(Time *time_pt)
Create all GeomObjects needed to define the cylinder and the flag.
Definition: turek_flag_non_fsi.cc:277
double Nu_pseudo_elastic
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:376
ConstitutiveLaw * Constitutive_law_pseudo_elastic_pt
Pointer to constitutive law for the pseudo elastic node update elements.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:368
double Dt
Timestep.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:415
ConstitutiveLaw * Constitutive_law_wall_pt
Pointer to constitutive law for the wall.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:365
double Nu_wall
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:372
unsigned Nstep_per_period
Number of steps per period.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:418
double T
Period of periodic variation in inflow pressure.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:412
int Argc
Number of arguments + 1.
Definition: oomph_utilities.cc:407
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213

References oomph::CommandLineArgs::Argc, Global_Parameters::Constitutive_law_pseudo_elastic_pt, Global_Parameters::Constitutive_law_wall_pt, Global_Parameters::Dt, Global_Parameters::Nstep_per_period, Global_Parameters::Nu_pseudo_elastic, Global_Parameters::Nu_wall, oomph::DocInfo::number(), oomph::oomph_info, oomph::IterativeLinearSolver::preconditioner_pt(), problem, oomph::DocInfo::set_directory(), set_pseudo_elastic_fsi_solver(), Flag_definition::setup(), and Global_Parameters::T.

◆ set_pseudo_elastic_fsi_solver()

void set_pseudo_elastic_fsi_solver ( PseudoElasticFSIProblem problem)

helper method to return GMRES preconditioned with the pseudo-elastic FSI preconditioner

1598 {
1599 // setup the solver
1600 //#ifdef OOMPH_HAS_TRILINOS
1601 // TrilinosAztecOOSolver* solver_pt = new
1602 // TrilinosAztecOOSolver;
1603 // solver_pt->solver_type() = TrilinosAztecOOSolver::GMRES;
1604 //#else
1606 //#endif
1607  solver_pt->tolerance()=1e-8;
1608 
1609  // preconditioner
1610  PseudoElasticFSIPreconditioner* prec_pt = new
1612 
1613  // meshes
1614  prec_pt->set_fluid_and_pseudo_elastic_mesh_pt(problem.fluid_mesh_pt());
1615  prec_pt->set_solid_mesh_pt(problem.wall_mesh_pt());
1617  problem.lagrange_multiplier_mesh_pt());
1618 
1619 /*
1620  // inexact pseudo-solid preconditioning
1621  prec_pt->pseudo_elastic_preconditioner_pt()->elastic_preconditioner_type()
1622  = PseudoElasticPreconditioner::
1623  Block_upper_triangular_preconditioner;
1624  prec_pt->pseudo_elastic_preconditioner_pt()
1625  ->set_elastic_subsidiary_preconditioner
1626  (Pseudo_Elastic_Preconditioner_Subsidiary_Operator_Helper
1627  ::get_elastic_preconditioner);
1628  prec_pt->pseudo_elastic_preconditioner_pt()
1629  ->set_lagrange_multiplier_subsidiary_preconditioner
1630  (Pseudo_Elastic_Preconditioner_Subsidiary_Operator_Helper
1631  ::get_lagrange_multiplier_preconditioner);
1632 
1633  // inexact "real" solid preconditioning
1634  BlockTriangularPreconditioner<CRDoubleMatrix>*
1635  solid_prec_pt = new BlockTriangularPreconditioner<CRDoubleMatrix>;
1636  solid_prec_pt->set_subsidiary_preconditioner_function
1637  (Real_Solid_Preconditioner_Helper::get_preconditioner);
1638 
1639  // inexact navier stokes preconditioning
1640  NavierStokesSchurComplementPreconditioner*
1641  ns_prec_pt = prec_pt->navier_stokes_schur_complement_preconditioner_pt();
1642  prec_pt->enable_navier_stokes_schur_complement_preconditioner();
1643 
1644  // ns momentum
1645  BlockDiagonalPreconditioner<CRDoubleMatrix>*
1646  f_prec_pt = new BlockDiagonalPreconditioner<CRDoubleMatrix>;
1647  f_prec_pt->set_subsidiary_preconditioner_function
1648  (LSC_Preconditioner_Helper::set_hypre_preconditioner);
1649  ns_prec_pt->set_f_preconditioner(f_prec_pt);
1650 
1651  // ns pressure poisson
1652  HyprePreconditioner* p_prec_pt = new HyprePreconditioner;
1653  p_prec_pt->set_amg_iterations(2);
1654  p_prec_pt->amg_using_simple_smoothing();
1655  p_prec_pt->amg_simple_smoother() = 3;
1656  p_prec_pt->hypre_method() = HyprePreconditioner::BoomerAMG;
1657  p_prec_pt->amg_strength() = 0.25;
1658  // Use 6 for parallel (Falgout) or 3 (Ruge Stuben)or serial
1659  p_prec_pt->amg_coarsening() = 6;
1660  p_prec_pt->disable_doc_time();
1661  ns_prec_pt->set_p_preconditioner(p_prec_pt);
1662 */
1663 
1664  // and pass prec to solver and solver to problem
1665  solver_pt->preconditioner_pt() = prec_pt;
1666  problem.linear_solver_pt() = solver_pt;
1667 }
Array< double, 1, 3 > e(1./3., 0.5, 2.)
The GMRES method.
Definition: iterative_linear_solver.h:1227
double & tolerance()
Access to convergence tolerance.
Definition: iterative_linear_solver.h:107
Definition: pseudo_elastic_fsi_preconditioner.h:62
void set_fluid_and_pseudo_elastic_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the combined fluid/pseudo solid elements
Definition: pseudo_elastic_fsi_preconditioner.h:150
void set_lagrange_multiplier_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the lagrange multiplier elements
Definition: pseudo_elastic_fsi_preconditioner.h:162
void set_solid_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the solid elements
Definition: pseudo_elastic_fsi_preconditioner.h:156

References e(), oomph::IterativeLinearSolver::preconditioner_pt(), problem, oomph::PseudoElasticFSIPreconditioner::set_fluid_and_pseudo_elastic_mesh_pt(), oomph::PseudoElasticFSIPreconditioner::set_lagrange_multiplier_mesh_pt(), oomph::PseudoElasticFSIPreconditioner::set_solid_mesh_pt(), and oomph::IterativeLinearSolver::tolerance().

Referenced by main().