LifeV
FSIHandler.hpp
Go to the documentation of this file.
1 //@HEADER
2 /*
3 *******************************************************************************
4 
5 Copyright (C) 2004, 2005, 2007 EPFL, Politecnico di Milano, INRIA
6 Copyright (C) 2010 EPFL, Politecnico di Milano, Emory University
7 
8 This file is part of LifeV.
9 
10 LifeV is free software; you can redistribute it and/or modify
11 it under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
14 
15 LifeV is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19 
20 You should have received a copy of the GNU Lesser General Public License
21 along with LifeV. If not, see <http://www.gnu.org/licenses/>.
22 
23 *******************************************************************************
24 */
25 //@HEADER
26 
27 /*!
28 @file
29 @brief FSIHandler - File handling the solution of the FSI problem
30 
31 @author Davide Forti <davide.forti@epfl.ch>
32 @date 28-10-2014
33 
34 @maintainer Antonello Gerbi <antonello.gerbi@epfl.ch>
35 
36  This class implements a monolithic fully-implicit FSI solver. This solver features:
37  - ALE treatment of the moving fluid domain
38  - Linear/Nonlinear solid models can be used
39  - Conforming/Nonconforming discretizations can be used
40  - For the solid time discretizations one may use BDF of Newmark schemes
41  - FaCSI preconitioner
42  - In the fluid problem, if one chooses P1-P1 FE, a SUPG stabilization stemming from VMS approach can be used.
43  - Mesh motion algorithms based on harmonic extensions or linear elasticity.
44  - Multilayered structural model: a thin layer is considered underneath the thick 3D one. The thin layer is modeled
45  by a membrane model.
46 
47  In the testsuite folder, several examples which show how to properly use the solver are present.
48 
49  If you are using this solver to generate results for publication, please <b>cite</b>:
50  - S. Deparis, D. Forti, G. Grandperrin, A. Quarteroni. <i> FaCSI: a block parallel preconditioner for fluid
51  structure interaction in hemodynamics</i>. JCP (327), 700-718, 2016.
52  - D. Forti, L. Dede'. <i> Semi-implicit BDF time discretization of the Navier–Stokes equations with VMS-LES modeling in a High Performance
53  Computing framework</i>. Comput. Fluids. 197(1):168-182.
54  - S. Deparis, D. Forti, A. Quarteroni. <i> A fluid-structure interaction algorithm using radial basis function interpolation between non
55  conforming interfaces</i>. In Y. Bazilevs, K. Takizawa (eds.) Advances in Computational Fluid-Structure, Modeling and Simulation in Science,
56  Engineering and Technology. Birkhäuser Basel, 2016.
57  - S. Deparis, D. Forti, P. Gervasio, and A. Quarteroni. <i>INTERNODES: an accurate interpolation-based method for coupling the Galerkin
58  solutions of PDEs on subdomains featuring non-conforming interfaces</i>. Comput. Fluids. 2016
59  - D. Forti, M. Bukac, A. Quaini, S. Canic, S. Deparis. A monolithic approach to solving fluid-structure interaction between multilayered
60  structures and incompressible, viscous fluids. Accepted in JSC, 2017.
61 */
62 
63 
64 #ifndef FSIHANDLER_H
65 #define FSIHANDLER_H
66 
67 #include <lifev/core/LifeV.hpp>
68 
69 // datafile
70 #include <lifev/core/filter/GetPot.hpp>
71 
72 // includes for matrices and vector
73 #include <lifev/core/array/MatrixEpetra.hpp>
74 #include <lifev/core/array/VectorEpetra.hpp>
75 
76 // mesh and partitioner
77 #include <lifev/core/mesh/MeshData.hpp>
78 #include <lifev/core/mesh/MeshPartitioner.hpp>
79 
80 // solvers
81 #include <lifev/navier_stokes_blocks/solver/NavierStokesSolverBlocks.hpp>
82 #include <lifev/fsi_blocks/solver/LinearElasticity.hpp>
83 
84 #include <lifev/fsi_blocks/solver/ALESolver.hpp>
85 
86 // Expression template FE space
87 #include <lifev/eta/fem/ETFESpace.hpp>
88 
89 #include <lifev/core/fem/TimeAndExtrapolationHandler.hpp>
90 #include <lifev/core/fem/Newmark.hpp>
91 #include <lifev/core/fem/BDFSecondOrderDerivative.hpp>
92 
93 #include <lifev/core/fem/DOFInterface3Dto3D.hpp>
94 
95 #include <lifev/fsi_blocks/solver/FSIcouplingCE.hpp>
96 #include <lifev/fsi_blocks/solver/FSIApplyOperator.hpp>
97 
98 #include <lifev/core/filter/ExporterEnsight.hpp>
99 #include <lifev/core/filter/ExporterHDF5.hpp>
100 #include <lifev/core/filter/ExporterVTK.hpp>
101 
102 #include <Teuchos_ParameterList.hpp>
103 #include <Teuchos_XMLParameterListHelpers.hpp>
104 
105 #include <lifev/fsi_blocks/solver/BlockJacobiPreconditioner.hpp>
106 
107 #include <lifev/core/filter/PartitionIO.hpp>
108 #include <lifev/fsi_blocks/filter/DOFInterfaceIO.hpp>
109 
110 #include <Teuchos_ParameterList.hpp>
111 #include <Teuchos_XMLParameterListHelpers.hpp>
112 #include <Teuchos_RCP.hpp>
113 #include <lifev/core/interpolation/Interpolation.hpp>
114 
115 #include <lifev/core/algorithm/LinearSolver.hpp>
116 
117 #include <lifev/fsi_blocks/solver/FSIApplyOperatorNonConforming.hpp>
118 
119 #include <lifev/fsi_blocks/solver/NeoHookean.hpp>
120 
121 namespace LifeV
122 {
123 
124 //! FSIHandler - File handling the solution of the FSI problem
125 /*!
126 * @author Davide Forti
127 */
128 
130 {
131 public:
132 
133  // Public typedefs
134 
137 
139 
142 
144 
146 
149 
152 
155 
156  typedef BCHandler bc_Type;
158 
159  typedef VectorEpetra vector_Type;
161 
164 
167 
168  typedef Interpolation interpolation_Type;
170 
171  typedef LifeV::Preconditioner basePrec_Type;
173 
174  typedef LifeV::PreconditionerIfpack prec_Type;
176 
178 
179  //! Constructor
180  FSIHandler(const commPtr_Type& communicator);
181 
182  //! Destructor
183  ~FSIHandler();
184 
185  //! Set the datafile.
186  /*!
187  @param dataFile
188  */
189  void setDatafile(const GetPot& dataFile);
190 
191  //! Read the fluid and solid meshes.
192  void readMeshes( );
193 
194  //! Partitioning the fluid and solid meshes.
195  void partitionMeshes ( );
196 
197  //! Read fluid and solid meshes that have been already partitioned offline
198  void readPartitionedMeshes( );
199 
200  //! Setup the solver
201  void setup ( );
202 
203  //! Set the boundary conditions
204  /*!
205  @param fluidBC boundary conditions fluid problem
206  @param structureBC boundary conditions solid problem
207  @param aleBC boundary conditions ALE problem
208  */
209  void setBoundaryConditions ( const bcPtr_Type& fluidBC, const bcPtr_Type& structureBC, const bcPtr_Type& aleBC );
210 
211  //! Set the boundary conditions
212  /*!
213  @param interfaceFluidBC set dirichlet BC at the fluid interface for prec.
214  */
215  void setFluidInterfaceBoundaryConditions ( const bcPtr_Type& interfaceFluidBC ) { M_interfaceFluidBC = interfaceFluidBC; };
216 
217  //! Update all the bc handlers
218  void updateBoundaryConditions( );
219 
220  //! Update the time advancing schemes
221  void initializeTimeAdvance ( );
222 
223  //! Build the interface map
224  void buildInterfaceMaps ( );
225 
226  //! Assemble the coupling blocks
227  void assembleCoupling ( );
228 
229  //! Solves the time loop of the FSI problem
230  void solveFSIproblem();
231 
232  //! Form the residual of the FSI problem
233  /*!
234  @param residual residual of the FSI problem
235  @param solution current solution of FSI at certain Newton iteration
236  @param iter_newton iteration Newton
237  */
238  void evalResidual(vector_Type& residual, const vector_Type& solution, const UInt iter_newton);
239 
240  //! Solves J_{FSI} \delta = - R
241  /*!
242  @param increment increment computed by Newton
243  @param residual Rhs linear problem, residual FSI
244  @param linearRelTol tolerance linear solver
245  */
246  void solveJac( vector_Type& increment, const vector_Type& residual, const Real linearRelTol );
247 
248  //! Set the parameter list of the problem
249  void setParameterLists( );
250 
251  //! Set gravity, if considered
252  /*!
253  @param gravity value of the gravity
254  @param gravity_direction 0 if x, 1 for y, 2 for z
255  */
256  void setGravity ( const Real& gravity, const Real& gravity_direction);
257 
258  //! Get the current time
259  Real getTime () { return M_time; };
260 
261  //! Get initial time
262  Real getStartTime () { return M_t_zero; };
263 
264  //! Set the current time
265  void setTime (const Real& time ) { M_time = time; };
266 
267  //! Get the time step size
268  Real getTimeStep () { return M_dt; };
269 
270  //! Get the end time
271  Real getEndTime () { return M_t_end; };
272 
273  //! Get the fluid solver
275 
276  //! Method to be used before solveTimeStep. If one does not use
277  // the solveFSIproblem() method, the following methods have to called:
278  // intializeTimeLoop, solveTimeStep, postprocessResults and finalizeExporters.
279  void intializeTimeLoop ( );
280 
281  //! Solve one time step.
282  void solveTimeStep( );
283 
284  //! Save the results for post-processing.
285  /*!
286  @param time_step_count index of the time step
287  */
288  void postprocessResults( const int& time_step_count );
289 
290  //! Close the exporters
291  void finalizeExporters ( );
292 
293  //! Get the fluid velocity
295 
296  //! Get the fluid pressure
298 
299  //! Get the FSI solution
301 
302 //@}
303 
304 private:
305 
306  //! Moves the fluid mesh
307  /*!
308  @param displacement displacement fluid mesh
309  */
310  void moveMesh ( const VectorEpetra& displacement );
311 
312  //! Build the monolithic map
313  void buildMonolithicMap ( );
314 
315  //! Setup solid sub-problem
316  void setupStructure ( );
317 
318  //! Create ALE FE spaces
319  void createAleFESpace();
320 
321  //! Update the bc handler
322  void updateBCHandler( bcPtr_Type & bc );
323 
324  //! Build std map with local to global indexes dofs interface
325  void createInterfaceMaps ( std::map<ID, ID> const& locDofMap );
326 
327  //! Build epetra map dofs at the interface
328  void constructInterfaceMap ( const std::map<ID, ID>& locDofMap, const UInt subdomainMaxId);
329 
330  //! Setup the exporters of fluid and solid
331  void setupExporters( );
332 
333  //! Instantiate exporter
334  /*!
335  @param exporter exporter
336  @param localMesh mesh
337  @param outputFileName filename output file
338  */
339  void instantiateExporter( std::shared_ptr< Exporter<mesh_Type > > & exporter,
340  const meshPtr_Type& localMesh,
341  const std::string& outputFileName );
342 
343  //! Updates term due to coupling of velocities
344  void updateSystem ( );
345 
346  //! Operator apply for the Jacobian in the onforming case
348 
349  //! Get Jacobian matrix structure problem
350  void getMatrixStructure ( );
351 
352  //! Get vector coupling velocities at interface
354 
355  //! Apply BCs solid problem
356  void applyBCstructure ( );
357 
358  //! Apply BCs solution FSI problem
359  void applyBCsolution(vectorPtr_Type& M_solution);
360 
361  //! Apply BCs residual FSI problem
362  /*!
363  @param r_u residual momentum fluid
364  @param r_ds residual momentum solid
365  @param r_df residual ALE
366  */
367  void applyBCresidual(VectorEpetra& r_u, VectorEpetra& r_ds, VectorEpetra& r_df);
368 
369  //! Set options linear solver
370  void setSolversOptions(const Teuchos::ParameterList& solversOptions);
371 
372  //! Update coupling velocity vector in the conforming case
374 
375  //! Update coupling velocity vector in the nonconforming case
377 
378  //! Extract interface dofs from vector defined on the whole domain
379  void structureToInterface (vector_Type& VectorOnGamma, const vector_Type& VectorOnStructure);
380 
381  //! Initialize extrapolation for initial guess Newton
382  void initializeExtrapolation( );
383 
384  //! Assemble interface mass structure at the interface
386 
387  //! Apply inverse of interface mass matrix fluid
388  /*!
389  @param lambda residual weak form
390  @param strongLambda residual strong form
391  */
392  void applyInverseFluidMassOnGamma ( const vectorPtr_Type& lambda, vectorPtr_Type& strongLambda );
393 
394  //! communicator
396 
397  //! datafile
399 
400  // members for the fluid mesh
405 
406  // members for the structure mesh
411 
412  // members for the fluid, the structura and the ALE fineite element spaces
419 
421 
422  // navier-stokes solver
427 
428  // time advance for the structure
432 
433  // boundary conditions
444 
445 
446  //! Displayer to print in parallel (only PID 0 will print)
447  Displayer M_displayer;
448 
449  //! Variables for the time advancing
452 
453  //! Variables for the time advancing
458 
464 
466 
469 
470  // Vectors for the exporters
479 
480  // Monolithic map
482 
487 
490 
493 
494  // Operator to apply Jacobian of the FSI
496 
497  // Operator to compute the residual of the FSI
499 
500  // Operator to apply Jacobian of the FSI in the nonconforming case
502 
503  // Preconditioner operator
505 
506  // Epetra Operator needed to solve the linear system
508 
509  // Parameter list solver
511 
512  // output txt files
523 
524  // Extrapolation of the initial guess for Newton
528 
529  // paritioned meshes
532 
534 
538 
540 
544 
548 
550 
554 
556 
557  // Members for the restarter
558 
559  bool M_restart;
560 
561  std::shared_ptr<ExporterHDF5<mesh_Type > > M_importerFluid; // Import just from solution in hdf5 format! I do not know
562  std::shared_ptr<ExporterHDF5<mesh_Type > > M_importerStructure; // if the import with other filters works.
563 
564  // To handle the post-processing
567 
569 
573 
574  bool M_disregardRestart; // if true disregards correct exporter as function of BDF
577  bool M_useBDF;
580 };
581 
582 } // end namespace LifeV
583 
584 #endif // end SETTINGS_H
Real getTime()
Get the current time.
Definition: FSIHandler.hpp:259
void setupStructure()
Setup solid sub-problem.
Definition: FSIHandler.cpp:349
void setFluidInterfaceBoundaryConditions(const bcPtr_Type &interfaceFluidBC)
Set the boundary conditions.
Definition: FSIHandler.hpp:215
FESpacePtr_Type M_displacementFESpaceScalar
Definition: FSIHandler.hpp:417
vectorPtr_Type M_rhsCouplingVelocities
Definition: FSIHandler.hpp:485
bcPtr_Type M_structureBC_residual_essential
Definition: FSIHandler.hpp:439
commPtr_Type M_comm
communicator
Definition: FSIHandler.hpp:395
void setTime(const Real &time)
Set the current time.
Definition: FSIHandler.hpp:265
std::shared_ptr< Operators::InvertibleOperator > M_invOper
Definition: FSIHandler.hpp:507
void applyBCsolution(vectorPtr_Type &M_solution)
Apply BCs solution FSI problem.
void initializeExtrapolation()
Initialize extrapolation for initial guess Newton.
vectorPtr_Type M_beta
Definition: FSIHandler.hpp:488
Real M_relativeTolerance
Variables for the time advancing.
Definition: FSIHandler.hpp:454
std::shared_ptr< TimeAndExtrapolationHandler > M_aleTimeAdvance
Definition: FSIHandler.hpp:430
meshPartitionerPtr_Type M_structurePartitioner
Definition: FSIHandler.hpp:410
std::shared_ptr< Exporter< mesh_Type > > M_exporterStructure
Definition: FSIHandler.hpp:468
meshPtr_Type M_structureLocalMesh
Definition: FSIHandler.hpp:409
meshPtr_Type M_fluidMesh
Definition: FSIHandler.hpp:402
solidETFESpacePtr_Type M_displacementETFESpace
Definition: FSIHandler.hpp:420
std::shared_ptr< basePrec_Type > basePrecPtr_Type
Definition: FSIHandler.hpp:172
FESpace - Short description here please!
Definition: FESpace.hpp:78
std::shared_ptr< GetPot > datafilePtr_Type
Definition: FSIHandler.hpp:138
std::ofstream M_outputTimeStep
Definition: FSIHandler.hpp:517
vectorPtr_Type M_rhsStructure
Definition: FSIHandler.hpp:484
matrixPtr_Type M_interface_mass_structure_robin
Definition: FSIHandler.hpp:546
matrixPtr_Type M_interface_mass_structure
Definition: FSIHandler.hpp:545
LifeV::Preconditioner basePrec_Type
Definition: FSIHandler.hpp:171
bool M_prescribeInflowFlowrate
Definition: FSIHandler.hpp:575
std::shared_ptr< comm_Type > commPtr_Type
Definition: FSIHandler.hpp:136
vectorPtr_Type M_LagrangeRestart
Definition: FSIHandler.hpp:475
std::shared_ptr< BDFSecondOrderDerivative > M_structureTimeAdvanceBDF
Definition: FSIHandler.hpp:578
void instantiateExporter(std::shared_ptr< Exporter< mesh_Type > > &exporter, const meshPtr_Type &localMesh, const std::string &outputFileName)
Instantiate exporter.
Definition: FSIHandler.cpp:328
void importFromHDF5(std::string const &fileName, std::string const &matrixName="matrix")
Read a matrix from a HDF5 (.h5) file.
std::shared_ptr< MeshData > meshDataPtr_Type
Definition: FSIHandler.hpp:143
std::shared_ptr< vector_Type > vectorPtr_Type
Definition: FSIHandler.hpp:160
std::shared_ptr< BCHandler > bcPtr_Type
Definition: FSIHandler.hpp:157
void assembleCoupling()
Assemble the coupling blocks.
std::shared_ptr< NavierStokesSolverBlocks > M_fluid
Definition: FSIHandler.hpp:423
vectorPtr_Type M_fluidPressure
Definition: FSIHandler.hpp:472
FESpacePtr_Type M_displacementFESpaceSerial
Definition: FSIHandler.hpp:416
bool M_extrapolateInitialGuess
Definition: FSIHandler.hpp:525
std::shared_ptr< LinearElasticity > M_structure
Definition: FSIHandler.hpp:424
vectorPtr_Type M_dsk
Definition: FSIHandler.hpp:576
void getMatrixStructure()
Get Jacobian matrix structure problem.
FESpacePtr_Type M_aleFESpace
Definition: FSIHandler.hpp:418
vectorPtr_Type M_structureVelocity
Definition: FSIHandler.hpp:477
FESpacePtr_Type M_pressureFESpace
Definition: FSIHandler.hpp:414
void moveMesh(const VectorEpetra &displacement)
Moves the fluid mesh.
int32_type Int
Generic integer data.
Definition: LifeV.hpp:188
std::shared_ptr< FESpace_Type > FESpacePtr_Type
Definition: FSIHandler.hpp:151
void intializeTimeLoop()
Method to be used before solveTimeStep. If one does not use.
std::shared_ptr< map_Type > M_lagrangeMap
Definition: FSIHandler.hpp:462
void evalResidual(vector_Type &residual, const vector_Type &solution, const UInt iter_newton)
Form the residual of the FSI problem.
VectorEpetra vector_Type
Definition: FSIHandler.hpp:159
vectorPtr_Type M_numerationInterfaceStructure
Definition: FSIHandler.hpp:553
meshPtr_Type M_fluidLocalMesh
Definition: FSIHandler.hpp:403
~FSIHandler()
Destructor.
Definition: FSIHandler.cpp:76
matrixPtr_Type M_matrixStructure
Definition: FSIHandler.hpp:491
std::shared_ptr< map_Type > M_monolithicMap
Definition: FSIHandler.hpp:481
vectorPtr_Type getFluidVelocity()
Get the fluid velocity.
Definition: FSIHandler.hpp:294
void setup()
Setup the solver.
Definition: FSIHandler.cpp:165
std::shared_ptr< LifeV::Operators::FSIApplyOperator > M_applyOperatorResidual
Definition: FSIHandler.hpp:498
meshPartitionerPtr_Type M_fluidPartitioner
Definition: FSIHandler.hpp:404
vectorPtr_Type M_structureDisplacement
Definition: FSIHandler.hpp:476
void buildInterfaceMaps()
Build the interface map.
Definition: FSIHandler.cpp:803
vectorPtr_Type M_rhsStructureVelocity
Definition: FSIHandler.hpp:568
void structureToInterface(vector_Type &VectorOnGamma, const vector_Type &VectorOnStructure)
Extract interface dofs from vector defined on the whole domain.
void setupExporters()
Setup the exporters of fluid and solid.
Definition: FSIHandler.cpp:290
std::shared_ptr< prec_Type > precPtr_Type
Definition: FSIHandler.hpp:175
void setDatafile(const GetPot &dataFile)
Set the datafile.
Definition: FSIHandler.cpp:89
Epetra_Import const & importer()
Getter for the Epetra_Import.
Definition: MapEpetra.cpp:394
std::shared_ptr< map_Type > M_fluidInterfaceMap
Definition: FSIHandler.hpp:461
vectorPtr_Type M_Lagrange
Definition: FSIHandler.hpp:474
Real getEndTime()
Get the end time.
Definition: FSIHandler.hpp:271
void partitionMeshes()
Partitioning the fluid and solid meshes.
Definition: FSIHandler.cpp:135
Teuchos::ParameterList parameterList_Type
Definition: FSIHandler.hpp:165
std::shared_ptr< TimeAndExtrapolationHandler > M_extrapolationSolution
Definition: FSIHandler.hpp:527
vectorPtr_Type M_structureAcceleration
Definition: FSIHandler.hpp:478
vectorPtr_Type M_numerationInterfaceFluid
Definition: FSIHandler.hpp:552
std::shared_ptr< MeshPartitioner< mesh_Type > > meshPartitionerPtr_Type
Definition: FSIHandler.hpp:145
Real getStartTime()
Get initial time.
Definition: FSIHandler.hpp:262
void setParameterLists()
Set the parameter list of the problem.
Definition: FSIHandler.cpp:96
std::shared_ptr< mesh_Type > meshPtr_Type
Definition: FSIHandler.hpp:141
std::shared_ptr< Newmark > M_structureTimeAdvance
Definition: FSIHandler.hpp:429
std::ofstream M_out_res
Definition: FSIHandler.hpp:457
void createInterfaceMaps(std::map< ID, ID > const &locDofMap)
Build std map with local to global indexes dofs interface.
Definition: FSIHandler.cpp:903
bcPtr_Type M_structureBC_residual_natural
Definition: FSIHandler.hpp:438
FESpacePtr_Type M_velocityFESpace
Definition: FSIHandler.hpp:413
void updateRhsCouplingVelocities()
Update coupling velocity vector in the conforming case.
meshDataPtr_Type M_meshDataStructure
Definition: FSIHandler.hpp:407
MatrixEpetra< Real > matrix_Type
Definition: FSIHandler.hpp:162
Teuchos::RCP< Teuchos::ParameterList > parameterListRCP_Type
Definition: FSIHandler.hpp:177
Displayer M_displayer
Displayer to print in parallel (only PID 0 will print)
Definition: FSIHandler.hpp:447
void readPartitionedMeshes()
Read fluid and solid meshes that have been already partitioned offline.
Definition: FSIHandler.cpp:147
void updateRhsCouplingVelocities_nonconforming()
Update coupling velocity vector in the nonconforming case.
void applyInverseFluidMassOnGamma(const vectorPtr_Type &lambda, vectorPtr_Type &strongLambda)
Apply inverse of interface mass matrix fluid.
void initializeApplyOperatorJacobian()
Operator apply for the Jacobian in the onforming case.
void finalizeExporters()
Close the exporters.
void updateBoundaryConditions()
Update all the bc handlers.
Definition: FSIHandler.cpp:459
void applyBCstructure()
Apply BCs solid problem.
bcPtr_Type M_aleBC_residual_natural
Definition: FSIHandler.hpp:441
bcPtr_Type M_structureBC
Definition: FSIHandler.hpp:437
std::shared_ptr< parameterList_Type > parameterListPtr_Type
Definition: FSIHandler.hpp:166
std::shared_ptr< map_Type > mapPtr_Type
Definition: FSIHandler.hpp:148
vectorPtr_Type M_fluidVelocity
Definition: FSIHandler.hpp:471
std::shared_ptr< interpolation_Type > interpolationPtr_Type
Definition: FSIHandler.hpp:169
vectorPtr_Type M_rhs_velocity
Definition: FSIHandler.hpp:489
Interpolation interpolation_Type
Definition: FSIHandler.hpp:168
RegionMesh< LinearTetra > mesh_Type
Definition: FSIHandler.hpp:140
vectorPtr_Type M_numerationInterface
Definition: FSIHandler.hpp:463
bcPtr_Type M_interfaceFluidBC
Definition: FSIHandler.hpp:443
meshPtr_Type M_structureMesh
Definition: FSIHandler.hpp:408
double Real
Generic real data.
Definition: LifeV.hpp:175
void assembleStructureInterfaceMass()
Assemble interface mass structure at the interface.
std::shared_ptr< LifeV::Operators::BlockJacobiPreconditioner > M_prec
Definition: FSIHandler.hpp:504
Epetra_Comm comm_Type
Definition: FSIHandler.hpp:135
std::shared_ptr< ALESolver > M_ale
Definition: FSIHandler.hpp:426
void readMeshes()
Read the fluid and solid meshes.
Definition: FSIHandler.cpp:114
meshDataPtr_Type M_meshDataFluid
Definition: FSIHandler.hpp:401
vectorPtr_Type getFSIsolution()
Get the FSI solution.
Definition: FSIHandler.hpp:300
void solveJac(vector_Type &increment, const vector_Type &residual, const Real linearRelTol)
Solves J_{FSI} = - R.
std::shared_ptr< map_Type > M_structureInterfaceMap
Definition: FSIHandler.hpp:460
FESpace< mesh_Type, map_Type > FESpace_Type
Definition: FSIHandler.hpp:150
void solveTimeStep()
Solve one time step.
ETFESpace< mesh_Type, map_Type, 3, 3 > solidETFESpace_Type
Definition: FSIHandler.hpp:153
vectorPtr_Type M_solution
Definition: FSIHandler.hpp:486
void setSolversOptions(const Teuchos::ParameterList &solversOptions)
Set options linear solver.
Definition: FSIHandler.cpp:106
void updateSystem()
Updates term due to coupling of velocities.
void get_structure_coupling_velocities()
Get vector coupling velocities at interface.
bool M_subiterateFluidDirichlet
Definition: FSIHandler.hpp:533
std::ofstream M_outputTimeLinearSolver
Definition: FSIHandler.hpp:522
std::shared_ptr< NavierStokesSolverBlocks > getFluid()
Get the fluid solver.
Definition: FSIHandler.hpp:274
MapEpetra map_Type
Definition: FSIHandler.hpp:147
UInt M_orderExtrapolationInitialGuess
Definition: FSIHandler.hpp:526
bcPtr_Type M_fluidBC_residual_natural
Definition: FSIHandler.hpp:436
std::shared_ptr< ExporterHDF5< mesh_Type > > M_importerStructure
Definition: FSIHandler.hpp:562
bcPtr_Type M_fluidBC
Definition: FSIHandler.hpp:434
LifeV::PreconditionerIfpack prec_Type
Definition: FSIHandler.hpp:174
FSIHandler(const commPtr_Type &communicator)
Constructor.
Definition: FSIHandler.cpp:42
basePrecPtr_Type M_precPtr
Definition: FSIHandler.hpp:570
std::shared_ptr< solidETFESpace_Type > solidETFESpacePtr_Type
Definition: FSIHandler.hpp:154
GetPot M_datafile
datafile
Definition: FSIHandler.hpp:398
std::shared_ptr< FSIcouplingCE > M_coupling
Definition: FSIHandler.hpp:465
Real getTimeStep()
Get the time step size.
Definition: FSIHandler.hpp:268
vectorPtr_Type getFluidPressure()
Get the fluid pressure.
Definition: FSIHandler.hpp:297
bcPtr_Type M_aleBC_residual_essential
Definition: FSIHandler.hpp:442
std::ofstream M_outputResiduals
Definition: FSIHandler.hpp:518
void createAleFESpace()
Create ALE FE spaces.
Definition: FSIHandler.cpp:391
std::shared_ptr< LifeV::Operators::FSIApplyOperator > M_applyOperatorJacobian
Definition: FSIHandler.hpp:495
void initializeTimeAdvance()
Update the time advancing schemes.
Definition: FSIHandler.cpp:468
std::shared_ptr< DOFInterface3Dto3D > M_dofStructureToFluid
Definition: FSIHandler.hpp:459
std::shared_ptr< matrix_Type > matrixPtr_Type
Definition: FSIHandler.hpp:163
std::shared_ptr< LifeV::Operators::FSIApplyOperatorNonConforming > M_applyOperatorJacobianNonConforming
Definition: FSIHandler.hpp:501
void constructInterfaceMap(const std::map< ID, ID > &locDofMap, const UInt subdomainMaxId)
Build epetra map dofs at the interface.
Definition: FSIHandler.cpp:944
std::shared_ptr< Exporter< mesh_Type > > M_exporterFluid
Definition: FSIHandler.hpp:467
void updateBCHandler(bcPtr_Type &bc)
Update the bc handler.
vectorPtr_Type M_fluidDisplacement
Definition: FSIHandler.hpp:473
interpolationPtr_Type M_StructureToFluidInterpolant
Definition: FSIHandler.hpp:543
void buildMonolithicMap()
Build the monolithic map.
interpolationPtr_Type M_FluidToStructureInterpolant
Definition: FSIHandler.hpp:542
Real M_dt
Variables for the time advancing.
Definition: FSIHandler.hpp:450
std::shared_ptr< TimeAndExtrapolationHandler > M_fluidTimeAdvance
Definition: FSIHandler.hpp:431
void applyBCresidual(VectorEpetra &r_u, VectorEpetra &r_ds, VectorEpetra &r_df)
Apply BCs residual FSI problem.
std::shared_ptr< NeoHookean > M_structureNeoHookean
Definition: FSIHandler.hpp:425
class ETFESpace A light, templated version of the FESpace
Definition: ETFESpace.hpp:93
std::ofstream M_outputLinearIterations
Definition: FSIHandler.hpp:520
void setGravity(const Real &gravity, const Real &gravity_direction)
Set gravity, if considered.
Definition: FSIHandler.cpp:81
std::ofstream M_outputSteps
Definition: FSIHandler.hpp:519
vectorPtr_Type M_rhsFluid
Definition: FSIHandler.hpp:483
FESpacePtr_Type M_displacementFESpace
Definition: FSIHandler.hpp:415
void solveFSIproblem()
Solves the time loop of the FSI problem.
uint32_type UInt
generic unsigned integer (used mainly for addressing)
Definition: LifeV.hpp:191
bcPtr_Type M_aleBC
Definition: FSIHandler.hpp:440
matrixPtr_Type M_interface_mass_fluid
Definition: FSIHandler.hpp:547
matrixPtr_Type M_matrixStructure_noBc
Definition: FSIHandler.hpp:492
void postprocessResults(const int &time_step_count)
Save the results for post-processing.
void setBoundaryConditions(const bcPtr_Type &fluidBC, const bcPtr_Type &structureBC, const bcPtr_Type &aleBC)
Set the boundary conditions.
Definition: FSIHandler.cpp:398
mapPtr_Type M_lagrangeMapScalar
Definition: FSIHandler.hpp:551
parameterListPtr_Type M_pListLinSolver
Definition: FSIHandler.hpp:510
std::ofstream M_outputPreconditionerComputation
Definition: FSIHandler.hpp:521
bcPtr_Type M_fluidBC_residual_essential
Definition: FSIHandler.hpp:435