pseudo_elastic_preconditioner.h
Go to the documentation of this file.
1 // LIC// ====================================================================
2 // LIC// This file forms part of oomph-lib, the object-oriented,
3 // LIC// multi-physics finite-element library, available
4 // LIC// at http://www.oomph-lib.org.
5 // LIC//
6 // LIC// Copyright (C) 2006-2022 Matthias Heil and Andrew Hazel
7 // LIC//
8 // LIC// This library is free software; you can redistribute it and/or
9 // LIC// modify it under the terms of the GNU Lesser General Public
10 // LIC// License as published by the Free Software Foundation; either
11 // LIC// version 2.1 of the License, or (at your option) any later version.
12 // LIC//
13 // LIC// This library is distributed in the hope that it will be useful,
14 // LIC// but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // LIC// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // LIC// Lesser General Public License for more details.
17 // LIC//
18 // LIC// You should have received a copy of the GNU Lesser General Public
19 // LIC// License along with this library; if not, write to the Free Software
20 // LIC// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 // LIC// 02110-1301 USA.
22 // LIC//
23 // LIC// The authors may be contacted at oomph-lib@maths.man.ac.uk.
24 // LIC//
25 // LIC//====================================================================
26 #ifndef OOMPH_PSEUDO_ELASTIC_SUBSIDIARY_PRECONDITIONER
27 #define OOMPH_PSEUDO_ELASTIC_SUBSIDIARY_PRECONDITIONER
28 
29 // includes
30 #include "../generic/problem.h"
31 #include "../generic/block_preconditioner.h"
32 #include "../generic/preconditioner.h"
33 #include "../generic/SuperLU_preconditioner.h"
34 #include "../generic/matrix_vector_product.h"
35 #include "../generic/general_purpose_preconditioners.h"
36 #include "../generic/general_purpose_block_preconditioners.h"
37 #ifdef OOMPH_HAS_HYPRE
38 #include "../generic/hypre_solver.h"
39 #endif
40 #ifdef OOMPH_HAS_TRILINOS
41 #include "../generic/trilinos_solver.h"
42 #endif
43 namespace oomph
44 {
45  //=============================================================================
49  //=============================================================================
50  namespace Pseudo_Elastic_Preconditioner_Subsidiary_Operator_Helper
51  {
52 #ifdef OOMPH_HAS_HYPRE
53 
56  Preconditioner* get_elastic_preconditioner_hypre();
57 
60  Preconditioner* get_elastic_preconditioner();
61 
62 #endif
63 
64 #ifdef OOMPH_HAS_TRILINOS
65 
68  Preconditioner* get_elastic_preconditioner_trilinos_ml();
69 
72  Preconditioner* get_lagrange_multiplier_preconditioner();
73 #endif
74  } // namespace Pseudo_Elastic_Preconditioner_Subsidiary_Operator_Helper
75 
76 
80 
81 
82  //=============================================================================
98  //=============================================================================
99  class PseudoElasticPreconditioner : public BlockPreconditioner<CRDoubleMatrix>
100  {
104 
105  public:
111  typedef Preconditioner* (*SubsidiaryPreconditionerFctPt)();
112 
122  {
127  };
128 
131  {
132  // null pointers
136 
137  // set defaults
140 
141  // resize the Mesh_pt
143  Elastic_mesh_pt = 0;
144  }
145 
148  {
149  this->clean_up_memory();
150  }
151 
154 
156  // Commented out broken assignment operator because this can lead to a
157  // conflict warning when used in the virtual inheritence hierarchy.
158  // Essentially the compiler doesn't realise that two separate
159  // implementations of the broken function are the same and so, quite
160  // rightly, it shouts.
161  /*void operator=
162  (const PseudoElasticPreconditioner&) = delete;*/
163 
165  void setup();
166 
171  {
172  this->elastic_preconditioner_solve(r, z);
174  }
175 
179  {
181  }
182 
186  {
188  }
189 
192  {
194  }
195 
198  {
200  }
201 
208  {
210  }
211 
218  {
220  }
221 
230  {
231  return E_preconditioner_type;
232  }
233 
235  void clean_up_memory();
236 
237  private:
240 
243  DoubleVector& z);
244 
246  double Scaling;
247 
251 
255 
257  unsigned Dim;
258 
261 
264 
268 
271 
274 
277  };
278 
282 
283 
284  //=============================================================================
300  //=============================================================================
302  : public BlockPreconditioner<CRDoubleMatrix>
303  {
307 
308  public:
314  typedef Preconditioner* (*SubsidiaryPreconditionerFctPt)();
315 
325  {
330  };
331 
334  {
335  // null pointers
339 
340  // set defaults
343 
344  // resize the Mesh_pt
346  Elastic_mesh_pt = 0;
347  }
348 
351  {
352  this->clean_up_memory();
353  }
354 
357  delete;
358 
360  /*void operator=(const PseudoElasticPreconditionerOld&) = delete;*/
361 
363  void setup();
364 
369  {
370  this->elastic_preconditioner_solve(r, z);
372  }
373 
377  {
379  }
380 
384  {
386  }
387 
390  {
392  }
393 
396  {
398  }
399 
406  {
408  }
409 
416  {
418  }
419 
428  {
429  return E_preconditioner_type;
430  }
431 
433  void clean_up_memory();
434 
435  private:
438 
441  DoubleVector& z);
442 
444  double Scaling;
445 
449 
453 
455  unsigned Dim;
456 
459 
462 
466 
469 
472 
475  };
476 
477 
481 
482 
483  //=============================================================================
494  //=============================================================================
496  : public BlockPreconditioner<CRDoubleMatrix>
497  {
498  public:
504  typedef Preconditioner* (*SubsidiaryPreconditionerFctPt)();
505 
508  {
509  Scaling = 1.0;
510  Preconditioner_pt = 0;
512  }
513 
516  {
517  this->clean_up_memory();
518  }
519 
523 
525  /*void operator=(const
526  PseudoElasticPreconditionerSubsidiaryPreconditionerOld&) = delete;*/
527 
528  // Setup the preconditioner
529  void setup();
530 
531  // Apply the preconditioner
533 
536  double& scaling()
537  {
538  return Scaling;
539  }
540 
543  SubsidiaryPreconditionerFctPt sub_prec_fn)
544  {
546  }
547 
548  private:
551  {
552  delete Preconditioner_pt;
553  Preconditioner_pt = 0;
554  }
555 
556  // the augmentation scaling
557  double Scaling;
558 
561 
564  }; // end of PseudoElasticPreconditionerSubsidiaryPreconditionerOld
565 
566 
570 
571 
572  //=============================================================================
583  //=============================================================================
585  : public BlockPreconditioner<CRDoubleMatrix>
586  {
587  public:
593  typedef Preconditioner* (*SubsidiaryPreconditionerFctPt)();
594 
598  {
599  // null the subsidiary preconditioner function pointer
601 
602  // default to block diagonal
603  Method = 0;
604 
605  // default scaling = 1.0
606  Scaling = 1.0;
607  };
608 
611  {
612  this->clean_up_memory();
613  }
614 
618  delete;
619 
621  /*void operator=
622  (const PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld&) =
623  delete;*/
624 
626  void clean_up_memory();
627 
629  void setup();
630 
633 
636  SubsidiaryPreconditionerFctPt sub_prec_fn)
637  {
639  };
640 
643  {
644  Method = 0;
645  }
646 
649  {
650  Method = 1;
651  }
652 
655  {
656  Method = 2;
657  }
658 
661  double& scaling()
662  {
663  return Scaling;
664  }
665 
666  private:
671 
674 
679  unsigned Method;
680 
683 
685  double Scaling;
686  };
687 
688 
692 
693 
694  // /*
695  //=============================================================================
699  //=============================================================================
701  : public BlockPreconditioner<CRDoubleMatrix>
702  {
703  public:
714  BlockPreconditioner<CRDoubleMatrix>* master_prec_pt,
716  Vector<unsigned>& dof_list,
717  const Mesh* const solid_mesh_pt,
718  const OomphCommunicator* comm_pt)
719  {
720  // turn into a subisiary preconditioner
721  this->turn_into_subsidiary_block_preconditioner(master_prec_pt, dof_list);
722 
723  // all dofs are of the same block type
724  Vector<unsigned> dof_to_block_map(dof_list.size(), 0);
725 
726  // store the matrix_pt
728 
729  // set the mesh
730  this->set_nmesh(1);
731  this->set_mesh(0, solid_mesh_pt);
732 
733  // set the communicator pointer
734  this->set_comm_pt(comm_pt);
735 
736  // call block_setup(...)
737  this->block_setup(dof_to_block_map);
738  }
739 
742  {
744  }
745 
749 
751  /*void operator=(const PseudoElasticPreconditionerScalingHelperOld&) =
752  * delete;*/
753 
755  double s_inf_norm()
756  {
757  CRDoubleMatrix* m_pt = new CRDoubleMatrix;
758  this->get_block(0, 0, *m_pt);
759  double s_inf_norm = m_pt->inf_norm();
760  delete m_pt;
761  return s_inf_norm;
762  }
763 
764  // broken preconditioner setup
765  void setup()
766  {
767  std::ostringstream error_message;
768  error_message << "This method is intentionally broken. This class is not "
769  "a functioning "
770  << "preconditioner.";
771  throw OomphLibError(
772  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
773  }
774 
775  // broken preconditioner solve
777  {
778  std::ostringstream error_message;
779  error_message << "This method is intentionally broken. This class is not "
780  "a functioning "
781  << "preconditioner.";
782  throw OomphLibError(
783  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
784  }
785 
786 
787  }; // end of PseudoElasticPreconditionerScalingHelperOld
788  // */
789 
790 } // namespace oomph
791 #endif
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
Definition: block_preconditioner.h:422
const Mesh * mesh_pt(const unsigned &i) const
Definition: block_preconditioner.h:1782
void get_block(const unsigned &i, const unsigned &j, CRDoubleMatrix &output_matrix, const bool &ignore_replacement_block=false) const
Definition: block_preconditioner.h:673
void clear_block_preconditioner_base()
Definition: block_preconditioner.h:2159
CRDoubleMatrix * matrix_pt() const
Definition: block_preconditioner.h:520
void turn_into_subsidiary_block_preconditioner(BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse)
Definition: block_preconditioner.cc:2376
void set_nmesh(const unsigned &n)
Definition: block_preconditioner.h:2851
virtual void block_setup()
Definition: block_preconditioner.cc:2483
void set_mesh(const unsigned &i, const Mesh *const mesh_pt, const bool &allow_multiple_element_type_in_mesh=false)
Definition: block_preconditioner.h:2866
Definition: matrices.h:888
double inf_norm() const
returns the inf-norm of this matrix
Definition: matrices.cc:3412
Definition: matrices.h:386
Definition: double_vector.h:58
Definition: mesh.h:67
Definition: communicator.h:54
Definition: oomph_definitions.h:222
Definition: preconditioner.h:54
virtual void set_comm_pt(const OomphCommunicator *const comm_pt)
Set the communicator pointer.
Definition: preconditioner.h:193
virtual const OomphCommunicator * comm_pt() const
Get function for comm pointer.
Definition: preconditioner.h:171
virtual void set_matrix_pt(DoubleMatrixBase *matrix_pt)
Set the matrix pointer.
Definition: preconditioner.h:165
Definition: pseudo_elastic_fsi_preconditioner.h:62
Definition: pseudo_elastic_preconditioner.h:303
void lagrange_multiplier_preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the lagrange multiplier subsidiary preconditioner.
Definition: pseudo_elastic_preconditioner.cc:762
Preconditioner * Elastic_preconditioner_pt
storage for the preconditioner for the solid system
Definition: pseudo_elastic_preconditioner.h:458
Vector< Preconditioner * > Lagrange_multiplier_preconditioner_pt
lagrange multiplier preconditioner pt
Definition: pseudo_elastic_preconditioner.h:461
virtual ~PseudoElasticPreconditionerOld()
destructor
Definition: pseudo_elastic_preconditioner.h:350
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Definition: pseudo_elastic_preconditioner.h:368
void setup()
Broken assignment operator.
Definition: pseudo_elastic_preconditioner.cc:552
void set_lagrange_multiplier_mesh(Mesh *mesh_pt)
Definition: pseudo_elastic_preconditioner.h:383
bool Use_inf_norm_of_s_scaling
Definition: pseudo_elastic_preconditioner.h:448
SubsidiaryPreconditionerFctPt Elastic_subsidiary_preconditioner_function_pt
The solid subsidiary preconditioner function pointer.
Definition: pseudo_elastic_preconditioner.h:468
Elastic_preconditioner_type E_preconditioner_type
Definition: pseudo_elastic_preconditioner.h:452
void enable_inf_norm_of_s_scaling()
Call to use the inf norm of S as scaling.
Definition: pseudo_elastic_preconditioner.h:389
void elastic_preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the elastic subsidiary preconditioner.
Definition: pseudo_elastic_preconditioner.cc:751
double Scaling
The scaling. Defaults to infinity norm of S.
Definition: pseudo_elastic_preconditioner.h:444
void disable_inf_norm_of_s_scaling()
Call to use no scaling.
Definition: pseudo_elastic_preconditioner.h:395
PseudoElasticPreconditionerOld()
Default (and only) constructor.
Definition: pseudo_elastic_preconditioner.h:333
unsigned Dim
the dimension of the problem
Definition: pseudo_elastic_preconditioner.h:455
Elastic_preconditioner_type
Definition: pseudo_elastic_preconditioner.h:325
@ Exact_block_preconditioner
Definition: pseudo_elastic_preconditioner.h:326
@ Block_upper_triangular_preconditioner
Definition: pseudo_elastic_preconditioner.h:329
@ Block_lower_triangular_preconditioner
Definition: pseudo_elastic_preconditioner.h:328
@ Block_diagonal_preconditioner
Definition: pseudo_elastic_preconditioner.h:327
Preconditioner *(* SubsidiaryPreconditionerFctPt)()
Definition: pseudo_elastic_preconditioner.h:314
void set_elastic_mesh(Mesh *mesh_pt)
Definition: pseudo_elastic_preconditioner.h:376
Elastic_preconditioner_type & elastic_preconditioner_type()
Definition: pseudo_elastic_preconditioner.h:427
void set_elastic_subsidiary_preconditioner(SubsidiaryPreconditionerFctPt prec_fn)
Definition: pseudo_elastic_preconditioner.h:414
SubsidiaryPreconditionerFctPt Lagrange_multiplier_subsidiary_preconditioner_function_pt
The Lagrange multiplier subsidary preconditioner function pointer.
Definition: pseudo_elastic_preconditioner.h:465
void set_lagrange_multiplier_subsidiary_preconditioner(SubsidiaryPreconditionerFctPt prec_fn)
Definition: pseudo_elastic_preconditioner.h:404
Mesh * Elastic_mesh_pt
Pointer to the mesh containing the solid elements.
Definition: pseudo_elastic_preconditioner.h:471
void clean_up_memory()
Clears the memory.
Definition: pseudo_elastic_preconditioner.cc:786
Mesh * Lagrange_multiplier_mesh_pt
Pointer to the mesh containing the Lagrange multiplier elements.
Definition: pseudo_elastic_preconditioner.h:474
PseudoElasticPreconditionerOld(const PseudoElasticPreconditionerOld &)=delete
Broken copy constructor.
Definition: pseudo_elastic_preconditioner.h:702
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Definition: pseudo_elastic_preconditioner.h:776
~PseudoElasticPreconditionerScalingHelperOld()
Destructor.
Definition: pseudo_elastic_preconditioner.h:741
void setup()
Definition: pseudo_elastic_preconditioner.h:765
double s_inf_norm()
Broken assignment operator.
Definition: pseudo_elastic_preconditioner.h:755
PseudoElasticPreconditionerScalingHelperOld(BlockPreconditioner< CRDoubleMatrix > *master_prec_pt, CRDoubleMatrix *matrix_pt, Vector< unsigned > &dof_list, const Mesh *const solid_mesh_pt, const OomphCommunicator *comm_pt)
Definition: pseudo_elastic_preconditioner.h:713
PseudoElasticPreconditionerScalingHelperOld(const PseudoElasticPreconditionerScalingHelperOld &)=delete
Broken copy constructor.
Definition: pseudo_elastic_preconditioner.h:586
void use_block_diagonal_approximation()
use as a block diagonal preconditioner
Definition: pseudo_elastic_preconditioner.h:642
PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld()
Constructor. (By default this preconditioner is upper triangular).
Definition: pseudo_elastic_preconditioner.h:596
void preconditioner_solve(const DoubleVector &res, DoubleVector &z)
Apply preconditioner to r.
Definition: pseudo_elastic_preconditioner.cc:1045
SubsidiaryPreconditionerFctPt Subsidiary_preconditioner_function_pt
The SubisidaryPreconditionerFctPt.
Definition: pseudo_elastic_preconditioner.h:682
void use_upper_triangular_approximation()
Use as an upper triangular preconditioner.
Definition: pseudo_elastic_preconditioner.h:648
~PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld()
Destructor.
Definition: pseudo_elastic_preconditioner.h:610
PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld(const PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld &)=delete
Broken copy constructor.
Vector< PseudoElasticPreconditionerSubsidiaryPreconditionerOld * > Diagonal_block_preconditioner_pt
Definition: pseudo_elastic_preconditioner.h:670
void setup()
Setup the preconditioner.
Definition: pseudo_elastic_preconditioner.cc:951
void use_lower_triangular_approximation()
Use as a lower triangular preconditioner.
Definition: pseudo_elastic_preconditioner.h:654
double Scaling
The scaling. default 1.0.
Definition: pseudo_elastic_preconditioner.h:685
unsigned Method
Definition: pseudo_elastic_preconditioner.h:679
void set_subsidiary_preconditioner_function(SubsidiaryPreconditionerFctPt sub_prec_fn)
access function to set the subsidiary preconditioner function.
Definition: pseudo_elastic_preconditioner.h:635
Preconditioner *(* SubsidiaryPreconditionerFctPt)()
Definition: pseudo_elastic_preconditioner.h:593
void clean_up_memory()
Broken assignment operator.
Definition: pseudo_elastic_preconditioner.cc:916
DenseMatrix< MatrixVectorProduct * > Off_diagonal_matrix_vector_products
Matrix of matrix vector product operators for the off diagonals.
Definition: pseudo_elastic_preconditioner.h:673
double & scaling()
Definition: pseudo_elastic_preconditioner.h:661
Definition: pseudo_elastic_preconditioner.h:497
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the preconditioner.
Definition: pseudo_elastic_preconditioner.cc:897
SubsidiaryPreconditionerFctPt Subsidiary_preconditioner_function_pt
the SubisidaryPreconditionerFctPt
Definition: pseudo_elastic_preconditioner.h:563
~PseudoElasticPreconditionerSubsidiaryPreconditionerOld()
Destructor.
Definition: pseudo_elastic_preconditioner.h:515
Preconditioner *(* SubsidiaryPreconditionerFctPt)()
Definition: pseudo_elastic_preconditioner.h:504
double & scaling()
Definition: pseudo_elastic_preconditioner.h:536
void clean_up_memory()
clears the memory
Definition: pseudo_elastic_preconditioner.h:550
Preconditioner * Preconditioner_pt
the preconditioner pt
Definition: pseudo_elastic_preconditioner.h:560
void setup()
Broken assignment operator.
Definition: pseudo_elastic_preconditioner.cc:813
PseudoElasticPreconditionerSubsidiaryPreconditionerOld()
Constructor.
Definition: pseudo_elastic_preconditioner.h:507
void set_subsidiary_preconditioner_function(SubsidiaryPreconditionerFctPt sub_prec_fn)
access function to set the subsidiary preconditioner function.
Definition: pseudo_elastic_preconditioner.h:542
double Scaling
Definition: pseudo_elastic_preconditioner.h:557
PseudoElasticPreconditionerSubsidiaryPreconditionerOld(const PseudoElasticPreconditionerSubsidiaryPreconditionerOld &)=delete
Broken copy constructor.
Definition: pseudo_elastic_preconditioner.h:100
SubsidiaryPreconditionerFctPt Lagrange_multiplier_subsidiary_preconditioner_function_pt
The Lagrange multiplier subsidiary preconditioner function pointer.
Definition: pseudo_elastic_preconditioner.h:267
void disable_inf_norm_of_s_scaling()
Call to use no scaling.
Definition: pseudo_elastic_preconditioner.h:197
void lagrange_multiplier_preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the lagrange multiplier subsidiary preconditioner.
Definition: pseudo_elastic_preconditioner.cc:503
Preconditioner *(* SubsidiaryPreconditionerFctPt)()
Definition: pseudo_elastic_preconditioner.h:111
Elastic_preconditioner_type & elastic_preconditioner_type()
Definition: pseudo_elastic_preconditioner.h:229
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Definition: pseudo_elastic_preconditioner.h:170
bool Use_inf_norm_of_s_scaling
Definition: pseudo_elastic_preconditioner.h:250
double Scaling
The scaling. Defaults to infinity norm of S.
Definition: pseudo_elastic_preconditioner.h:246
void set_lagrange_multiplier_mesh(Mesh *mesh_pt)
Definition: pseudo_elastic_preconditioner.h:185
void set_lagrange_multiplier_subsidiary_preconditioner(SubsidiaryPreconditionerFctPt prec_fn)
Definition: pseudo_elastic_preconditioner.h:206
void setup()
Broken assignment operator.
Definition: pseudo_elastic_preconditioner.cc:114
Vector< Preconditioner * > Lagrange_multiplier_preconditioner_pt
lagrange multiplier preconditioner pt
Definition: pseudo_elastic_preconditioner.h:263
void set_elastic_subsidiary_preconditioner(SubsidiaryPreconditionerFctPt prec_fn)
Definition: pseudo_elastic_preconditioner.h:216
void enable_inf_norm_of_s_scaling()
Call to use the inf norm of S as scaling.
Definition: pseudo_elastic_preconditioner.h:191
virtual ~PseudoElasticPreconditioner()
destructor
Definition: pseudo_elastic_preconditioner.h:147
void elastic_preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply the elastic subsidiary preconditioner.
Definition: pseudo_elastic_preconditioner.cc:493
Mesh * Lagrange_multiplier_mesh_pt
Pointer to the mesh containing the Lagrange multiplier elements.
Definition: pseudo_elastic_preconditioner.h:276
SubsidiaryPreconditionerFctPt Elastic_subsidiary_preconditioner_function_pt
The solid subsidiary preconditioner function pointer.
Definition: pseudo_elastic_preconditioner.h:270
PseudoElasticPreconditioner()
Default (and only) constructor.
Definition: pseudo_elastic_preconditioner.h:130
Mesh * Elastic_mesh_pt
Pointer to the mesh containing the solid elements.
Definition: pseudo_elastic_preconditioner.h:273
Elastic_preconditioner_type E_preconditioner_type
Definition: pseudo_elastic_preconditioner.h:254
Elastic_preconditioner_type
Definition: pseudo_elastic_preconditioner.h:122
@ Block_diagonal_preconditioner
Definition: pseudo_elastic_preconditioner.h:124
@ Exact_block_preconditioner
Definition: pseudo_elastic_preconditioner.h:123
@ Block_lower_triangular_preconditioner
Definition: pseudo_elastic_preconditioner.h:125
@ Block_upper_triangular_preconditioner
Definition: pseudo_elastic_preconditioner.h:126
void clean_up_memory()
Clears the memory.
Definition: pseudo_elastic_preconditioner.cc:527
void set_elastic_mesh(Mesh *mesh_pt)
Definition: pseudo_elastic_preconditioner.h:178
PseudoElasticPreconditioner(const PseudoElasticPreconditioner &)=delete
Broken copy constructor.
Preconditioner * Elastic_preconditioner_pt
storage for the preconditioner for the solid system
Definition: pseudo_elastic_preconditioner.h:260
unsigned Dim
the dimension of the problem
Definition: pseudo_elastic_preconditioner.h:257
Definition: oomph-lib/src/generic/Vector.h:58
unsigned Preconditioner
----------------------—Domain Properties------------------------—
Definition: space_time_oscillating_cylinder.cc:725
r
Definition: UniformPSDSelfTest.py:20
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86