oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld Class Reference

#include <pseudo_elastic_preconditioner.h>

+ Inheritance diagram for oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld:

Public Types

typedef Preconditioner *(* SubsidiaryPreconditionerFctPt) ()
 

Public Member Functions

 PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld ()
 Constructor. (By default this preconditioner is upper triangular). More...
 
 ~PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld ()
 Destructor. More...
 
 PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld (const PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld &)=delete
 Broken copy constructor. More...
 
void clean_up_memory ()
 Broken assignment operator. More...
 
void setup ()
 Setup the preconditioner. More...
 
void preconditioner_solve (const DoubleVector &res, DoubleVector &z)
 Apply preconditioner to r. More...
 
void set_subsidiary_preconditioner_function (SubsidiaryPreconditionerFctPt sub_prec_fn)
 access function to set the subsidiary preconditioner function. More...
 
void use_block_diagonal_approximation ()
 use as a block diagonal preconditioner More...
 
void use_upper_triangular_approximation ()
 Use as an upper triangular preconditioner. More...
 
void use_lower_triangular_approximation ()
 Use as a lower triangular preconditioner. More...
 
doublescaling ()
 
- Public Member Functions inherited from oomph::BlockPreconditioner< CRDoubleMatrix >
 BlockPreconditioner ()
 Constructor. More...
 
 BlockPreconditioner (const BlockPreconditioner &)=delete
 Broken copy constructor. More...
 
virtual ~BlockPreconditioner ()
 Destructor. More...
 
void operator= (const BlockPreconditioner &)=delete
 Broken assignment operator. More...
 
CRDoubleMatrixmatrix_pt () const
 
void turn_on_recursive_debug_flag ()
 
void turn_off_recursive_debug_flag ()
 
void turn_on_debug_flag ()
 Toggles on the debug flag. More...
 
void turn_off_debug_flag ()
 Toggles off the debug flag. More...
 
void turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse)
 
void turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned >> &doftype_coarsen_map_coarse)
 
virtual void block_setup ()
 
void block_setup (const Vector< unsigned > &dof_to_block_map)
 
void get_block (const unsigned &i, const unsigned &j, CRDoubleMatrix &output_matrix, const bool &ignore_replacement_block=false) const
 
CRDoubleMatrix get_block (const unsigned &i, const unsigned &j, const bool &ignore_replacement_block=false) const
 
void set_master_matrix_pt (CRDoubleMatrix *in_matrix_pt)
 Set the matrix_pt in the upper-most master preconditioner. More...
 
void get_block_other_matrix (const unsigned &i, const unsigned &j, CRDoubleMatrix *in_matrix_pt, CRDoubleMatrix &output_matrix)
 
void get_blocks (DenseMatrix< bool > &required_blocks, DenseMatrix< CRDoubleMatrix * > &block_matrix_pt) const
 
void get_dof_level_block (const unsigned &i, const unsigned &j, CRDoubleMatrix &output_block, const bool &ignore_replacement_block=false) const
 
void get_dof_level_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block, const bool &ignore_replacement_block) const
 
CRDoubleMatrix get_concatenated_block (const VectorMatrix< BlockSelector > &selected_block)
 
void get_concatenated_block_vector (const Vector< unsigned > &block_vec_number, const DoubleVector &v, DoubleVector &b)
 
void return_concatenated_block_vector (const Vector< unsigned > &block_vec_number, const DoubleVector &b, DoubleVector &v) const
 Takes concatenated block ordered vector, b, and copies its. More...
 
void get_block_vectors (const Vector< unsigned > &block_vec_number, const DoubleVector &v, Vector< DoubleVector > &s) const
 
void get_block_vectors (const DoubleVector &v, Vector< DoubleVector > &s) const
 
void return_block_vectors (const Vector< unsigned > &block_vec_number, const Vector< DoubleVector > &s, DoubleVector &v) const
 
void return_block_vectors (const Vector< DoubleVector > &s, DoubleVector &v) const
 
void get_block_vector (const unsigned &n, const DoubleVector &v, DoubleVector &b) const
 
void return_block_vector (const unsigned &n, const DoubleVector &b, DoubleVector &v) const
 
void get_block_ordered_preconditioner_vector (const DoubleVector &v, DoubleVector &w)
 
void return_block_ordered_preconditioner_vector (const DoubleVector &w, DoubleVector &v) const
 
unsigned nblock_types () const
 Return the number of block types. More...
 
unsigned ndof_types () const
 Return the total number of DOF types. More...
 
const Meshmesh_pt (const unsigned &i) const
 
unsigned nmesh () const
 
int block_number (const unsigned &i_dof) const
 Return the block number corresponding to a global index i_dof. More...
 
int index_in_block (const unsigned &i_dof) const
 
const LinearAlgebraDistributionblock_distribution_pt (const unsigned &b) const
 Access function to the block distributions (const version). More...
 
LinearAlgebraDistributionblock_distribution_pt (const unsigned b)
 Access function to the block distributions (non-const version). More...
 
LinearAlgebraDistributiondof_block_distribution_pt (const unsigned &b)
 Access function to the dof-level block distributions. More...
 
const LinearAlgebraDistributionmaster_distribution_pt () const
 
unsigned ndof_types_in_mesh (const unsigned &i) const
 
bool is_subsidiary_block_preconditioner () const
 
bool is_master_block_preconditioner () const
 
void set_block_output_to_files (const std::string &basefilename)
 
void disable_block_output_to_files ()
 Turn off output of blocks (by clearing the basefilename string). More...
 
bool block_output_on () const
 Test if output of blocks is on or not. More...
 
void output_blocks_to_files (const std::string &basefilename, const unsigned &precision=8) const
 
void post_block_matrix_assembly_partial_clear ()
 
BlockPreconditioner< CRDoubleMatrix > * master_block_preconditioner_pt () const
 Access function to the master block preconditioner pt. More...
 
void clear_block_preconditioner_base ()
 
void document ()
 
Vector< Vector< unsigned > > doftype_coarsen_map_fine () const
 
Vector< unsignedget_fine_grain_dof_types_in (const unsigned &i) const
 
unsigned nfine_grain_dof_types_in (const unsigned &i) const
 
MapMatrix< unsigned, CRDoubleMatrix * > replacement_dof_block_pt () const
 Access function to the replaced dof-level blocks. More...
 
void setup_matrix_vector_product (MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const Vector< unsigned > &block_col_indices)
 
void setup_matrix_vector_product (MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const unsigned &block_col_index)
 
void internal_get_block_ordered_preconditioner_vector (const DoubleVector &v, DoubleVector &w) const
 
void internal_return_block_ordered_preconditioner_vector (const DoubleVector &w, DoubleVector &v) const
 
unsigned internal_nblock_types () const
 
unsigned internal_ndof_types () const
 
void internal_return_block_vector (const unsigned &n, const DoubleVector &b, DoubleVector &v) const
 
void internal_get_block_vector (const unsigned &n, const DoubleVector &v, DoubleVector &b) const
 
void internal_get_block_vectors (const Vector< unsigned > &block_vec_number, const DoubleVector &v, Vector< DoubleVector > &s) const
 
void internal_get_block_vectors (const DoubleVector &v, Vector< DoubleVector > &s) const
 
void internal_return_block_vectors (const Vector< unsigned > &block_vec_number, const Vector< DoubleVector > &s, DoubleVector &v) const
 
void internal_return_block_vectors (const Vector< DoubleVector > &s, DoubleVector &v) const
 
void internal_get_block (const unsigned &i, const unsigned &j, CRDoubleMatrix &output_block) const
 
void internal_get_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block) const
 
int internal_block_number (const unsigned &i_dof) const
 
int internal_index_in_block (const unsigned &i_dof) const
 
const LinearAlgebraDistributioninternal_block_distribution_pt (const unsigned &b) const
 Access function to the internal block distributions. More...
 
void insert_auxiliary_block_distribution (const Vector< unsigned > &block_vec_number, LinearAlgebraDistribution *dist_pt)
 
void block_matrix_test (const unsigned &i, const unsigned &j, const CRDoubleMatrix *block_matrix_pt) const
 
int get_index_of_value (const Vector< myType > &vec, const myType val, const bool sorted=false) const
 
- Public Member Functions inherited from oomph::Preconditioner
 Preconditioner ()
 Constructor. More...
 
 Preconditioner (const Preconditioner &)=delete
 Broken copy constructor. More...
 
void operator= (const Preconditioner &)=delete
 Broken assignment operator. More...
 
virtual ~Preconditioner ()
 Destructor (empty) More...
 
virtual void preconditioner_solve_transpose (const DoubleVector &r, DoubleVector &z)
 
void setup (DoubleMatrixBase *matrix_pt)
 
void setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt)
 
void enable_silent_preconditioner_setup ()
 Set up the block preconditioner quietly! More...
 
void disable_silent_preconditioner_setup ()
 Be verbose in the block preconditioner setup. More...
 
virtual void set_matrix_pt (DoubleMatrixBase *matrix_pt)
 Set the matrix pointer. More...
 
virtual const OomphCommunicatorcomm_pt () const
 Get function for comm pointer. More...
 
virtual void set_comm_pt (const OomphCommunicator *const comm_pt)
 Set the communicator pointer. More...
 
double setup_time () const
 Returns the time to setup the preconditioner. More...
 
virtual void turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse)
 
virtual void turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned >> &doftype_coarsen_map_coarse)
 
- Public Member Functions inherited from oomph::DistributableLinearAlgebraObject
 DistributableLinearAlgebraObject ()
 Default constructor - create a distribution. More...
 
 DistributableLinearAlgebraObject (const DistributableLinearAlgebraObject &matrix)=delete
 Broken copy constructor. More...
 
void operator= (const DistributableLinearAlgebraObject &)=delete
 Broken assignment operator. More...
 
virtual ~DistributableLinearAlgebraObject ()
 Destructor. More...
 
LinearAlgebraDistributiondistribution_pt () const
 access to the LinearAlgebraDistribution More...
 
unsigned nrow () const
 access function to the number of global rows. More...
 
unsigned nrow_local () const
 access function for the num of local rows on this processor. More...
 
unsigned nrow_local (const unsigned &p) const
 access function for the num of local rows on this processor. More...
 
unsigned first_row () const
 access function for the first row on this processor More...
 
unsigned first_row (const unsigned &p) const
 access function for the first row on this processor More...
 
bool distributed () const
 distribution is serial or distributed More...
 
bool distribution_built () const
 
void build_distribution (const LinearAlgebraDistribution *const dist_pt)
 
void build_distribution (const LinearAlgebraDistribution &dist)
 

Private Attributes

Vector< PseudoElasticPreconditionerSubsidiaryPreconditionerOld * > Diagonal_block_preconditioner_pt
 
DenseMatrix< MatrixVectorProduct * > Off_diagonal_matrix_vector_products
 Matrix of matrix vector product operators for the off diagonals. More...
 
unsigned Method
 
SubsidiaryPreconditionerFctPt Subsidiary_preconditioner_function_pt
 The SubisidaryPreconditionerFctPt. More...
 
double Scaling
 The scaling. default 1.0. More...
 

Additional Inherited Members

- Protected Member Functions inherited from oomph::BlockPreconditioner< CRDoubleMatrix >
void set_nmesh (const unsigned &n)
 
void set_mesh (const unsigned &i, const Mesh *const mesh_pt, const bool &allow_multiple_element_type_in_mesh=false)
 
void set_replacement_dof_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix *replacement_dof_block_pt)
 
bool any_mesh_distributed () const
 
int internal_dof_number (const unsigned &i_dof) const
 
unsigned internal_index_in_dof (const unsigned &i_dof) const
 
unsigned internal_block_dimension (const unsigned &b) const
 
unsigned internal_dof_block_dimension (const unsigned &i) const
 
unsigned master_nrow () const
 
unsigned internal_master_dof_number (const unsigned &b) const
 
const LinearAlgebraDistributioninternal_preconditioner_matrix_distribution_pt () const
 
const LinearAlgebraDistributionpreconditioner_matrix_distribution_pt () const
 
- Protected Member Functions inherited from oomph::DistributableLinearAlgebraObject
void clear_distribution ()
 
- Protected Attributes inherited from oomph::BlockPreconditioner< CRDoubleMatrix >
MapMatrix< unsigned, CRDoubleMatrix * > Replacement_dof_block_pt
 The replacement dof-level blocks. More...
 
Vector< LinearAlgebraDistribution * > Block_distribution_pt
 The distribution for the blocks. More...
 
Vector< Vector< unsigned > > Block_to_dof_map_coarse
 
Vector< Vector< unsigned > > Block_to_dof_map_fine
 Mapping for the block types to the most fine grain dof types. More...
 
Vector< Vector< unsigned > > Doftype_coarsen_map_coarse
 
Vector< Vector< unsigned > > Doftype_coarsen_map_fine
 
Vector< LinearAlgebraDistribution * > Internal_block_distribution_pt
 Storage for the default distribution for each internal block. More...
 
Vector< LinearAlgebraDistribution * > Dof_block_distribution_pt
 
Vector< unsignedAllow_multiple_element_type_in_mesh
 
Vector< const Mesh * > Mesh_pt
 
Vector< unsignedNdof_types_in_mesh
 
unsigned Internal_nblock_types
 
unsigned Internal_ndof_types
 
- Protected Attributes inherited from oomph::Preconditioner
bool Silent_preconditioner_setup
 Boolean to indicate whether or not the build should be done silently. More...
 
std::ostream * Stream_pt
 Pointer to the output stream – defaults to std::cout. More...
 

Detailed Description

///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// Subsidiary helper preconditioner for the PseudoElasticPreconditioner. Required for block preconditioner of the augmented elastic subsidiary problem. NOTE:

  1. This is only intended to be used as a subsidiary preconditioner within the PseudoElasticPreconditioner.
  2. If this preconditioner has N DOF types then the first N/2 are assumed to be ordinary solid DOF types, and the second N/2 are the solid DOF types with lagrange multiplier tractions applied.
  3. By default this preconditioner uses a superlu preconditioner.

Member Typedef Documentation

◆ SubsidiaryPreconditionerFctPt

typedef Preconditioner*(* oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::SubsidiaryPreconditionerFctPt) ()

This preconditioner includes the option to use subsidiary operators other than SuperLUPreconditioner for this problem. This is the typedef of a function that should return an instance of a subsidiary preconditioning operator. This preconditioner is responsible for the destruction of the subsidiary preconditioners.

Constructor & Destructor Documentation

◆ PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld() [1/2]

oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld ( )
inline

Constructor. (By default this preconditioner is upper triangular).

597  : BlockPreconditioner<CRDoubleMatrix>()
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  };
SubsidiaryPreconditionerFctPt Subsidiary_preconditioner_function_pt
The SubisidaryPreconditionerFctPt.
Definition: pseudo_elastic_preconditioner.h:682
double Scaling
The scaling. default 1.0.
Definition: pseudo_elastic_preconditioner.h:685
unsigned Method
Definition: pseudo_elastic_preconditioner.h:679

References Method, Scaling, and Subsidiary_preconditioner_function_pt.

◆ ~PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld()

oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::~PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld ( )
inline

Destructor.

611  {
612  this->clean_up_memory();
613  }
void clean_up_memory()
Broken assignment operator.
Definition: pseudo_elastic_preconditioner.cc:916

References clean_up_memory().

◆ PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld() [2/2]

oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld ( const PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld )
delete

Broken copy constructor.

Member Function Documentation

◆ clean_up_memory()

void oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::clean_up_memory ( )
virtual

Broken assignment operator.

clean up the memory

//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////

Reimplemented from oomph::Preconditioner.

917  {
918  // number of block types
919  unsigned n_block = Diagonal_block_preconditioner_pt.size();
920 
921  // delete diagonal blocks
922  for (unsigned i = 0; i < n_block; i++)
923  {
926  if (Method == 1)
927  {
928  for (unsigned j = i + 1; j < n_block; j++)
929  {
932  }
933  }
934  else if (Method == 2)
935  {
936  for (unsigned j = 0; j < i; j++)
937  {
940  }
941  }
942  }
943 
944  // clean up the block preconditioner
946  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
void clear_block_preconditioner_base()
Definition: block_preconditioner.h:2159
Vector< PseudoElasticPreconditionerSubsidiaryPreconditionerOld * > Diagonal_block_preconditioner_pt
Definition: pseudo_elastic_preconditioner.h:670
DenseMatrix< MatrixVectorProduct * > Off_diagonal_matrix_vector_products
Matrix of matrix vector product operators for the off diagonals.
Definition: pseudo_elastic_preconditioner.h:673
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References oomph::BlockPreconditioner< CRDoubleMatrix >::clear_block_preconditioner_base(), Diagonal_block_preconditioner_pt, i, j, Method, and Off_diagonal_matrix_vector_products.

Referenced by setup(), and ~PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld().

◆ preconditioner_solve()

void oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::preconditioner_solve ( const DoubleVector res,
DoubleVector z 
)
virtual

Apply preconditioner to r.

Implements oomph::Preconditioner.

1046  {
1047  // copy r
1048  DoubleVector r(res);
1049 
1050  unsigned n_block;
1051 
1052  // Cache umber of block types (also the spatial DIM)
1053  n_block = this->nblock_types();
1054 
1055  // loop parameters
1056  int start = n_block - 1;
1057  int end = -1;
1058  int step = -1;
1059  if (Method != 1)
1060  {
1061  start = 0;
1062  end = n_block;
1063  step = 1;
1064  }
1065 
1066  // the preconditioning method.
1067  // 0 - block diagonal
1068  // 1 - upper triangular
1069  // 2 - lower triangular
1070  //
1071  // loop over the DIM
1072  //
1073  // For Method = 0 or 2 (diagonal, lower)
1074  // start = 2, end = -1, step = -1
1075  // i = 2,1,0
1076  //
1077  // For Method = 1 (upper)
1078  // start = 0, end = 3 step = 1
1079  // i = 0, 1, 2
1080  for (int i = start; i != end; i += step)
1081  {
1082  // solve
1083  Diagonal_block_preconditioner_pt[i]->preconditioner_solve(r, z);
1084 
1085  // if upper or lower triangular
1086  if (Method != 0)
1087  {
1088  // substitute
1089  //
1090  for (int j = i + step; j != end; j += step)
1091  {
1092  DoubleVector x;
1093  this->get_block_vector(i, z, x);
1094  DoubleVector y;
1095  Off_diagonal_matrix_vector_products(j, i)->multiply(x, y);
1096  x.clear();
1097  this->get_block_vector(j, r, x);
1098  x -= y;
1099  this->return_block_vector(j, x, r);
1100  } // substitute
1101  } // if upper or lower
1102  } // for loop over DIM
1103  } // Block preconditioner solve
std::vector< double > DoubleVector
loads clump configuration
Definition: ClumpInput.h:26
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
void return_block_vector(const unsigned &n, const DoubleVector &b, DoubleVector &v) const
Definition: block_preconditioner.cc:4489
void get_block_vector(const unsigned &n, const DoubleVector &v, DoubleVector &b) const
Definition: block_preconditioner.cc:4186
unsigned nblock_types() const
Return the number of block types.
Definition: block_preconditioner.h:1670
static constexpr lastp1_t end
Definition: IndexedViewHelper.h:79
Scalar * y
Definition: level1_cplx_impl.h:128
r
Definition: UniformPSDSelfTest.py:20
void start(const unsigned &i)
(Re-)start i-th timer
Definition: oomph_utilities.cc:243
list x
Definition: plotDoE.py:28

References Diagonal_block_preconditioner_pt, Eigen::placeholders::end, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block_vector(), i, j, Method, oomph::BlockPreconditioner< CRDoubleMatrix >::nblock_types(), Off_diagonal_matrix_vector_products, UniformPSDSelfTest::r, res, oomph::BlockPreconditioner< CRDoubleMatrix >::return_block_vector(), oomph::CumulativeTimings::start(), plotDoE::x, and y.

◆ scaling()

double& oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::scaling ( )
inline

Specify the scaling. Default is 1.0 Must be set before setup(...).

662  {
663  return Scaling;
664  }

References Scaling.

Referenced by oomph::PseudoElasticPreconditionerOld::setup().

◆ set_subsidiary_preconditioner_function()

void oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::set_subsidiary_preconditioner_function ( SubsidiaryPreconditionerFctPt  sub_prec_fn)
inline

access function to set the subsidiary preconditioner function.

637  {
639  };

References Subsidiary_preconditioner_function_pt.

Referenced by oomph::PseudoElasticPreconditionerOld::setup().

◆ setup()

void oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::setup ( )
virtual

Setup the preconditioner.

Implements oomph::Preconditioner.

952  {
953  // clean the memory
954  this->clean_up_memory();
955 
956  // determine the number of DOF types
957  unsigned n_dof_types = this->ndof_types();
958 
959 #ifdef PARANOID
960  // must be Dim*2 dof types
961  if (n_dof_types % 2 != 0)
962  {
963  std::ostringstream error_message;
964  error_message << "This preconditioner requires DIM*3 types of DOF";
965  throw OomphLibError(
966  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
967  }
968 #endif
969 
970  // store the dimension of the problem
971  unsigned dim = n_dof_types / 2;
972 
973  // assemble the dof to block lookup scheme
974  Vector<unsigned> dof_to_block_map(n_dof_types, 0);
975  for (unsigned d = 0; d < dim; d++)
976  {
977  dof_to_block_map[d] = d;
978  dof_to_block_map[d + dim] = d;
979  }
980 
981  // setup the blocks look up schemes
982  this->block_setup(dof_to_block_map);
983 
984  // Storage for the diagonal block preconditioners
986 
987  // storage for the off diagonal matrix vector products
988  Off_diagonal_matrix_vector_products.resize(dim, dim, 0);
989 
990  // setup the subsidiary preconditioners
991  for (unsigned d = 0; d < dim; d++)
992  {
993  Vector<unsigned> dof_list(2);
994  dof_list[0] = d;
995  dof_list[1] = d + dim;
996 
998  new PseudoElasticPreconditionerSubsidiaryPreconditionerOld;
1000  ->turn_into_subsidiary_block_preconditioner(this, dof_list);
1002  {
1004  ->set_subsidiary_preconditioner_function(
1006  }
1007  Diagonal_block_preconditioner_pt[d]->scaling() = Scaling;
1008 
1009  Diagonal_block_preconditioner_pt[d]->Preconditioner::setup(matrix_pt());
1010 
1011  // the preconditioning method.\n
1012  // 0 - block diagonal\n
1013  // 1 - upper triangular\n
1014  // 2 - lower triangular\n
1015  // next setup the off diagonal mat vec operators if required
1016  if (Method == 1 || Method == 2)
1017  {
1018  unsigned l = d + 1;
1019  unsigned u = dim;
1020  if (Method == 2)
1021  {
1022  l = 0;
1023  u = d;
1024  }
1025  for (unsigned j = l; j < u; j++)
1026  {
1027  CRDoubleMatrix* block_matrix_pt = new CRDoubleMatrix;
1028  this->get_block(d, j, *block_matrix_pt);
1029  Off_diagonal_matrix_vector_products(d, j) = new MatrixVectorProduct();
1030  // Off_diagonal_matrix_vector_products(d,j)->setup(block_matrix_pt);
1032  Off_diagonal_matrix_vector_products(d, j), block_matrix_pt, j);
1033 
1034  delete block_matrix_pt;
1035  block_matrix_pt = 0;
1036  }
1037  }
1038  } // setup the subsidiary preconditioner.
1039  } // preconditioner setup
void get_block(const unsigned &i, const unsigned &j, CRDoubleMatrix &output_matrix, const bool &ignore_replacement_block=false) const
Definition: block_preconditioner.h:673
CRDoubleMatrix * matrix_pt() const
Definition: block_preconditioner.h:520
unsigned ndof_types() const
Return the total number of DOF types.
Definition: block_preconditioner.h:1694
void setup_matrix_vector_product(MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const Vector< unsigned > &block_col_indices)
Definition: block_preconditioner.h:2397
virtual void block_setup()
Definition: block_preconditioner.cc:2483
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References oomph::BlockPreconditioner< CRDoubleMatrix >::block_setup(), clean_up_memory(), Diagonal_block_preconditioner_pt, oomph::BlockPreconditioner< CRDoubleMatrix >::get_block(), j, oomph::BlockPreconditioner< CRDoubleMatrix >::matrix_pt(), Method, oomph::BlockPreconditioner< CRDoubleMatrix >::ndof_types(), Off_diagonal_matrix_vector_products, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Scaling, oomph::BlockPreconditioner< CRDoubleMatrix >::setup_matrix_vector_product(), and Subsidiary_preconditioner_function_pt.

◆ use_block_diagonal_approximation()

void oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::use_block_diagonal_approximation ( )
inline

use as a block diagonal preconditioner

643  {
644  Method = 0;
645  }

References Method.

Referenced by oomph::PseudoElasticPreconditionerOld::setup().

◆ use_lower_triangular_approximation()

void oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::use_lower_triangular_approximation ( )
inline

Use as a lower triangular preconditioner.

655  {
656  Method = 2;
657  }

References Method.

Referenced by oomph::PseudoElasticPreconditionerOld::setup().

◆ use_upper_triangular_approximation()

void oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::use_upper_triangular_approximation ( )
inline

Use as an upper triangular preconditioner.

649  {
650  Method = 1;
651  }

References Method.

Referenced by oomph::PseudoElasticPreconditionerOld::setup().

Member Data Documentation

◆ Diagonal_block_preconditioner_pt

Vector<PseudoElasticPreconditionerSubsidiaryPreconditionerOld*> oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::Diagonal_block_preconditioner_pt
private

Vector of SuperLU preconditioner pointers for storing the preconditioners for each diagonal block

Referenced by clean_up_memory(), preconditioner_solve(), and setup().

◆ Method

unsigned oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::Method
private

◆ Off_diagonal_matrix_vector_products

DenseMatrix<MatrixVectorProduct*> oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::Off_diagonal_matrix_vector_products
private

Matrix of matrix vector product operators for the off diagonals.

Referenced by clean_up_memory(), preconditioner_solve(), and setup().

◆ Scaling

double oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::Scaling
private

◆ Subsidiary_preconditioner_function_pt

SubsidiaryPreconditionerFctPt oomph::PseudoElasticPreconditionerSubsidiaryBlockPreconditionerOld::Subsidiary_preconditioner_function_pt
private

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