modified: .gitignore
Added the following to .gitignore
 # private OOMPH-LIB directory configure lists are automatically
 # generated.
config/configure.ac_scripts/private.dir_list
config/configure.ac_scripts/private_user_drivers.dir_list
config/configure.ac_scripts/private_user_src.dir_list

 # arpack and hsl files which are automatically generated.
 external_src/oomph_arpack/all_arpack_sources.f
 external_src/oomph_arpack/debug.h
 external_src/oomph_arpack/stat.h
 external_src/oomph_hsl/frontal.f

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@619 595e1d82-adf1-4282-bac7-b6073fa2ca8e
modified:   src/generic/map_matrix.h

1) MapMatrix now inherits from MapMatrixMixed. Why was this not done
   in the first place I do not know...

     template<class KEY_TYPE, class VALUE_TYPE>
     class MapMatrix

   is changed to

     template<class KEY_TYPE, class VALUE_TYPE>
     class MapMatrix : public
MapMatrixMixed<KEY_TYPE,KEY_TYPE,VALUE_TYPE>

2) Deleted almost everything from the MapMatrix class since it is
   now inherited from MapMatrixMixed.
   Only the copy constructor and destructor is left.

3) Made MapMatrixMixed's destructor virtual.

4) Added function to get an element without changing the container:
   "VALUE_TYPE get(const KEY_TYPE_ROW& i, const KEY_TYPE_COL& j) const"

5) Changed "private" to "protected", so MapMatrix has access to
everything
   in MapMatrixMixed.

6) Added a const version of MapMatrixMixed::size()

7) Added a const version of MapMatrixMixed::nnz()

8) Added a get() const function to access an element without changing
   the container.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@620 595e1d82-adf1-4282-bac7-b6073fa2ca8e
modified:
demo_drivers/mpi/multi_domain/pseudo_solid_collapsible_tube/validate.sh

A small change to the if condition so that it actually works does the
correct thing.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@621 595e1d82-adf1-4282-bac7-b6073fa2ca8e
.gitignore: added make_check_output

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@622 595e1d82-adf1-4282-bac7-b6073fa2ca8e
Modified all block preconditionable elements:
Have looked at all instances of the functions:
unsigned ndof_types() and made it const.
get_dof_numbers_for_unknowns is also made consts.

Lots of comments are changed. Variable names are changed to reflect what
they really mean, for example, the vector block_map is now called dof_map.

ALL SELF TESTS PASS

List of files changed in this commit:

demo_drivers/axisym_navier_stokes/counter_rotating_disks/linearised_axisym_navier_stokes_elements.h
demo_drivers/interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc
demo_drivers/interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube_work.cc
demo_drivers/interaction/pseudo_solid_fsi_channel_with_leaflet/fsi_channel_with_leaflet_precond.cc
demo_drivers/linear_solvers/driven_cavity_with_simple_lsc_preconditioner.cc
demo_drivers/linear_solvers/two_d_linear_elasticity_with_simple_block_diagonal_preconditioner.cc
demo_drivers/mpi/multi_domain/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc
demo_drivers/multi_physics/3d_boussinesq_convection/3d_ref_b_convect.cc
demo_drivers/multi_physics/3d_boussinesq_convection/my_boussinesq_elements.h
demo_drivers/solid/prescribed_displ_lagr_mult/prescribed_displ_lagr_mult_precond.cc
src/axisym_linear_elasticity/axisym_linear_elasticity_elements.h
src/axisym_navier_stokes/Taxisym_navier_stokes_elements.h
src/axisym_navier_stokes/axisym_navier_stokes_elements.cc
src/axisym_navier_stokes/axisym_navier_stokes_elements.h
src/beam/beam_elements.cc
src/beam/beam_elements.h
src/biharmonic/biharmonic_elements.h
src/generalised_time_harmonic_linear_elasticity/generalised_time_harmonic_linear_elasticity_elements.h
src/generic/displacement_control_element.h
src/generic/elements.h
src/generic/pseudosolid_node_update_elements.h
src/linear_elasticity/linear_elasticity_elements.h
src/multi_physics/multi_domain_boussinesq_elements.h
src/navier_stokes/Tnavier_stokes_elements.h
src/navier_stokes/impose_impenetrability_element.h
src/navier_stokes/impose_parallel_outflow_element.h
src/navier_stokes/navier_stokes_elements.cc
src/navier_stokes/navier_stokes_elements.h
src/navier_stokes/navier_stokes_flux_control_elements.h
src/shell/shell_elements.cc
src/shell/shell_elements.h
src/solid/solid_elements.h
src/solid/solid_traction_elements.h
src/spherical_navier_stokes/spherical_navier_stokes_elements.cc
src/spherical_navier_stokes/spherical_navier_stokes_elements.h
src/time_harmonic_fourier_decomposed_linear_elasticity/time_harmonic_fourier_decomposed_linear_elasticity_elements.h
src/time_harmonic_linear_elasticity/time_harmonic_linear_elasticity_elements.h
src/womersley/womersley_elements.h

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@623 595e1d82-adf1-4282-bac7-b6073fa2ca8e
modified:   demo_drivers/womersley/one_d_womersley/flux_control_elements.h

This "block preconditionable" element has the two functions:
nblock_types() and get_block_numbers_for_unknowns(...)

These function names have been changed to:
ndof_types() and get_dof_numbers_for_unknowns(...)

I have added comments but have not fixed this since I have no self test
for this.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@624 595e1d82-adf1-4282-bac7-b6073fa2ca8e
modified:   src/generic/linear_algebra_distribution.cc

Moved a "my_rank" variable inside MPI headers, since it appeared unused
when compiled without mpi

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@625 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditioner.h and .cc: changed renamed Nblock_types and
Ndof_types to Internal_nblock_types and Internal_nblock_types
respectively.
All self tests passed.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@626 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditioner.h and .cc: changed ndof_types() to
internal_ndof_types() and nblock_types() to internal_nblock_types()

The following files were modified as ndof_types() and nblock_types() are
public functions called by other preconditioners.

modified:   demo_drivers/linear_solvers/simple_block_preconditioners.h
modified:   src/biharmonic/biharmonic_preconditioner.cc
modified:   src/generic/block_preconditioner.cc
modified:   src/generic/block_preconditioner.h
modified:   src/generic/general_purpose_block_preconditioners.cc
modified:   src/multi_physics/fsi_preconditioners.h
modified:   src/multi_physics/pseudo_elastic_preconditioner.cc
modified:   src/navier_stokes/lagrange_enforced_flow_preconditioner.h
modified:   src/navier_stokes/navier_stokes_preconditioners.cc
modified:   src/solid/solid_preconditioners.cc

All preconditioner self tests passes (listed below):
demo_drivers/bifurcation_tracking
demo_drivers/mpi/distribution/bifurcation_tracking
demo_drivers/mpi/solvers
demo_drivers/mpi/multi_domain/fsi_channel_with_leaflet
demo_drivers/mpi/multi_domain/pseudo_solid_collapsible_tube
demo_drivers/biharmonic/two_d_biharmonic
demo_drivers/multi_physics/3d_boussinesq_convection
demo_drivers/solid/prescribed_displ_lagr_mult
demo_drivers/linear_solvers
demo_drivers/interaction/fsi_channel_with_leaflet
demo_drivers/interaction/turek_flag
demo_drivers/interaction/pseudo_solid_fsi_channel_with_leaflet
demo_drivers/interaction/fsi_channel_seg_and_precond
demo_drivers/interaction/pseudo_solid_collapsible_tube
demo_drivers/navier_stokes/schur_complement_preconditioner
demo_drivers/navier_stokes/flux_control
demo_drivers/axisym_navier_stokes/torus
demo_drivers/womersley/one_d_womersley

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@627 595e1d82-adf1-4282-bac7-b6073fa2ca8e
modified: block_preconditioner.h and .cc
Renamed class variable Precomputed_block_pt to Replacement_block_pt.
Renamed function variable n_dof_types to internal_n_dof_types in
function "void BlockPreconditioner<MATRIX>::block_setup()".
Renamed function set_precomputed_blocks(...) to
set_replacement_block(...)

Affected files:
general_purpose_block_preconditioner.cc:
Renamed variable Precomputed_block_pt to Replacement_block_pt
Renamed function set_precomputed_blocks(...) to
set_replacement_block(...)

pseudo_elastic_preconditioner.cc and
lagrange_enforced_flow_preconditioner.h:
Renamed function set_precomputed_blocks(...) to
set_replacement_block(...)

All preconditioner self tests passes.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@628 595e1d82-adf1-4282-bac7-b6073fa2ca8e
modified:   src/generic/map_matrix.h
Made arguments of the copy constructor const.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@629 595e1d82-adf1-4282-bac7-b6073fa2ca8e
Changed the recplacement block container from a DenseMatrix<CRDoubleMatrix*>
to MapMatrix<unsigned,CRDoubleMatrix*>

Details:
* block_preconditioner.h and .cc

Deleted class variable Preconditioner_blocks_have_been_precomputed.
bool preconditioner_blocks_have_been_precomputed() const now returns
Replaced_dof_block_pt.nnz()!= 0

set_replacement_block(...) renamed to set_replacement_dof_block(...)
which now takes indices i, j and a pointer to the replaced dof block.

Affected files:
* general_purpose_block_preconditioners.cc
Because we need to have a DenseMatrix<CRDoubleMatrix*>, we created a
temporary variable to hold the blocks from the Replacement_dof_block_pt.
Soon this will have to be replaced get_block(...), which will return the
correct block. I.e. only the else statement should exist.
I will do this later.

* pseudo_elastic_preconditioner.cc
Since the norm still has to be precomputed with DenseMatrix<CRDoubleMatrix*>,
we have left the "solid_matrix_pt" as it is, and looped through this,
setting the replaced blocks:
    // Set the replacement blocks.
    for (unsigned row_i = 0; row_i < n_solid_dof_types; row_i++)
    {
      for (unsigned col_i = 0; col_i < n_solid_dof_types; col_i++)
      {
        s_prec_pt->set_replacement_dof_block(row_i,col_i,
                                             solid_matrix_pt(row_i,col_i));
      }
    }

* lagrange_enforced_flow_preconditioner.h:
Similarly as above, we loop through "f_subblock_pt", and setting each
replace block:
    // Set the replacement blocks.
    for (unsigned row_i = 0; row_i < N_fluid_doftypes; row_i++)
    {
      for (unsigned col_i = 0; col_i < N_fluid_doftypes; col_i++)
      {
        navier_stokes_block_preconditioner_pt
          ->set_replacement_dof_block(row_i,col_i,
                                      f_subblock_pt(row_i,col_i));
      }
    }

* navier_stokes_preconditioners.cc modified to reflect the renaming of the
function above.

All self tests still pass.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@630 595e1d82-adf1-4282-bac7-b6073fa2ca8e
modified:   src/generic/block_preconditioner.cc
modified:   src/generic/block_preconditioner.h

get_block(...) function - uses cr_double_matrix_deep_copy
checks for precomputed blocks by Replacement_dof_block_pt.get(i,j) == 0.

get_coarsened_block(...) Checks if replacement blocks have been set by
checking if Replacement_block_pt.get(i,j) == 0
fixed memory leak.

All preconditioner self tests still pass!

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@631 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditioner.h and .cc:

Renamed variables:
Block_to_block_map to Doftype_to_block_map
Doftype_to_doftype_map to Doftype_coarsen_map_coarse
Dof_number_in_master_preconditioner to Doftype_in_master_preconditioner_fine

Files affected:
modified:   src/navier_stokes/navier_stokes_preconditioners.cc
Changed Block_to_block_map to Doftype_to_block_map

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@632 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditioner.h and .cc: fixed dof type coarsening look up lists.
block_preconditioner.h
void turn_into_subsidiary_block_preconditioner(...)
Renamed dof_number_in_master_preconditioner_coarse ->
doftype_in_master_preconditioner_coarse
Renamed dof_coarsen_map_coarse -> doftype_coarsen_map_coarse

Added functions:
Vector<unsigned> get_fine_grain_dof_types_in(unsigned& i) const
Vector<Vector<unsigned> > doftype_coarsen_map_fine() const
unsigned internal_ndof_types_in(unsigned& i) const

Added variables:
Vector<Vector<unsigned> > Doftype_coarsen_map_fine
Vector<unsigned> Doftype_in_master_preconditioner_coarse

src/generic/block_preconditioner.cc
Changed the two turn_into_subsidiary_block_preconditioner(...)
functions to set up the look up lists
Doftype_in_master_preconditioner_fine and
Doftype_coarsen_map_fine

block_setup(...) sets up the identity mapping for the vectors
Doftype_coarsen_map_fine
Doftype_coarsen_map_coarse

It will also set up the Doftype_to_block_map vector.

lagrange_enforced_flow_preconditioner.h:
Added some debugging stuff, which has been commented out. I will remove
it once everything works.

All preconditioner self tests still pass!

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@633 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditioner.h and .cc: changed internal_ndof_types(...)
and internal_nblock_types() functions.

The internal_ndof_types() and internal_nblock_types() accepted an
optional parameter (a boolean) which indicated if the underlying number
of dof / block types should be returned or the block/dof types that the
preconditioner expects.

The separation between the underlying dof/block types and the dof/blocks
the preconditioner expects comes from the coarsening of dof types
machinery.

Since I wish to hide the coarsening machinery from the writer of the
preconditioner (that is, the internal_ndof_types should not be
considered when writing a block preconditioner), I have separated the
functions internal_ndof_types(const bool& foo = real_ndof_types) and
internal_nblock_types(const bool& foo = real_nblock_types) into two
functions:

internal_ndof_types(true) -> internal_ndof_types()
internal_ndof_types(false) -> ndof_types()

internal_nblock_types(true) -> internal_nblock_types()
internal_nblock_types(false) -> nblock_types()

I have had to make the following changes:

Changed calls to internal_ndof_types() to ndof_types() in the following
files:
./src/generic/block_preconditioner.cc
./src/multi_physics/pseudo_elastic_preconditioner.cc
./src/solid/solid_preconditioners.cc
./src/navier_stokes/navier_stokes_preconditioners.cc
./src/navier_stokes/lagrange_enforced_flow_preconditioner.h

Changed calls to internal_ndof_types(true) to internal_ndof_types() in
the following files:
./src/generic/block_preconditioner.h
./src/generic/block_preconditioner.cc
./src/navier_stokes/navier_stokes_preconditioners.cc

Changed calls to internal_nblock_types() to nblock_types() in the
following files:
./demo_drivers/linear_solvers/simple_block_preconditioners.h
./src/generic/general_purpose_block_preconditioners.cc
./src/biharmonic/biharmonic_preconditioner.cc
./src/multi_physics/pseudo_elastic_preconditioner.cc
./src/multi_physics/fsi_preconditioners.h
./src/navier_stokes/lagrange_enforced_flow_preconditioner.h

Changed calls to internal_nblock_types(true) to internal_nblock_types()
in the following files:
./src/generic/block_preconditioner.h
./src/generic/block_preconditioner.cc
./src/navier_stokes/navier_stokes_preconditioners.cc

I also fixed a comment in ./src/generic/block_preconditioner.h

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@634 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditioner.h: changed how ndof_types() works.

modified:   demo_drivers/multi_physics/3d_boussinesq_convection/3d_ref_b_convect.cc
  Put a comment above ndof_types() to put a comment on top of ndof_types().

modified:   src/generic/block_preconditioner.h
  Changed the ndof_types() function to return
  Doftype_to_coarsen_map_coarse.size() if it is a subsidiary block
  preconditioner, otherwise the internal_ndof_types() function is called.
  This is the correct way to report the ndof types required by
  the preconditioner within the re-write. Because the
  Doftype_to_coarsen_map_coarse vector is always filled in, if no dof
  types are coarsened, then Doftype_coarsen_map_coarse.size() ==
  Internal_ndof_types.

  Removed the function ndof_types_precomputed().

All preconditioner self tests still pass.

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@635 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditoner.h and .cc changed the nblock_types() function.

Changed the nblock_types() function to return
Doftype_to_block_map.size(). This lookup list should always be set up,
it is set up in the block_setup(...) function.

Removed the function nblock_types_precomputed().

Replaced everywhere where nblock_types_precomputed with nblock_types()

All preconditioner self tests still pass

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@636 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditoner.h and .cc Ranamed Block_distribution_pt to
Internal_block_distribution_pt

Changed the following files to reflect the renaming:
src/biharmonic/biharmonic_preconditioner.cc
src/generic/general_purpose_block_preconditioners.cc
src/multi_physics/fsi_preconditioners.h
src/multi_physics/pseudo_elastic_preconditioner.cc
src/navier_stokes/lagrange_enforced_flow_preconditioner.h

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@637 595e1d82-adf1-4282-bac7-b6073fa2ca8e
block_preconditioner.h: added two new vectors of distributions.

Added the two class variables:
  Vector<LinearAlgebraDistribution*> Dof_block_distribution_pt;
  Vector<LinearAlgebraDistribution*> Block_distribution_pt;
These will be used to store the distribution of the dof level blocks and
the actual blocks. We store the distributions instead of calculating
them on the fly since concatenating distributions requires
communication.

All preconditioner self tests still pass

git-svn-id: svn+ssh://vummath.ma.man.ac.uk/home/svn-oomphlib/public/trunk@638 595e1d82-adf1-4282-bac7-b6073fa2ca8e