From: maier Date: Mon, 17 Sep 2012 19:48:24 +0000 (+0000) Subject: Port the perl expand_instantiations macro to the cxx version X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd9adb601285de48f52a1a0152169f83a64862bf;p=dealii-svn.git Port the perl expand_instantiations macro to the cxx version git-svn-id: https://svn.dealii.org/branches/branch_cmake@26443 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/common/dealiitemplates.pm.in b/deal.II/common/dealiitemplates.pm.in deleted file mode 100644 index 80b7a15838..0000000000 --- a/deal.II/common/dealiitemplates.pm.in +++ /dev/null @@ -1,173 +0,0 @@ -###################################################################### -# Definitions for vectors of common template instantiations -###################################################################### -package dealiitemplates; - -use strict; -use warnings; - -BEGIN { - use Exporter(); - our @ISA = qw(Exporter); - our @EXPORT = qw(&multisubst - @dimensions @codim1_dimensions @dofhandlers @dofhandler_templates - @real_scalars @complex_scalars @all_scalars - @deal_vector_templates @deal_vectors @deal_real_vectors @deal_complex_vectors @deal_parallel_vectors - @trilinos_vectors @petsc_vectors - @sequential_vectors @parallel_vectors - @sparsity_patterns); -} - -our @EXPORT; - -###################################################################### -# A function substituting multiple patterns in a string with all -# combinations of values of the vectors provided and printing the result. -# -# Its arguments are -# -# 1. The text with patterns to be replaced -# 2. A reference to an array with all the patterns -# 3. For each pattern, a reference to an array with replacements -# -# The function will then loop through all vectors in lexicographical -# order, first fastest, and replace globally all occurences of each -# pattern. This is only done if the pattern is not part of a C++ token. -# -###################################################################### -# Usage example: -###################################################################### -# -# use strict; -# use dealiitemplates; -# -# my $text = <<'EOT' -# template class Test; -# template void Test::Dimension(); -# EOT -# ; -# my @patterns = qw(D S1 V1); -# -# multisubst($text, \@patterns, \@dimensions, \@real_scalars, \@sequential_vectors) -# -###################################################################### -sub multisubst -{ - my $text = shift; - my $patterns = shift; - - my $npat = $#{$patterns}+1; - my $nvec = $#_+1; - ($nvec == $npat) || - die "multisubst function received $npat replacement patterns, but $nvec vectors\n", - "Did you by chance use '\@vec' instead of '\\\@vec?"; - - my @sizes = map { $#{$_} } @_; - my $n = 1; - grep { $n *= ($_+1); } @sizes; - my @index = map { 0 } @sizes; - - for (my $i=0;$i<$n;++$i) - { - my $t = $text; - for (my $j=0;$j<=$#sizes;++$j) - { - my $v = $patterns->[$j]; - my $r = $_[$j]->[$index[$j]]; - $t =~ s/(?" } @dofhandler_templates } @dimensions; - -# All possible number types -our @real_scalars = ('float', 'double', 'long double'); -our @complex_scalars = map { "std::complex<$_>" } @real_scalars; -our @all_scalars = (@real_scalars, @complex_scalars); - -# The vectors built into deal.II -our @deal_vector_templates = qw(Vector BlockVector); -our @deal_real_vectors = map { $t = $_ ; map { "$_<$t >" } @deal_vector_templates } @real_scalars; -our @deal_complex_vectors = map { $t = $_ ; map { "$_<$t >" } @deal_vector_templates } @complex_scalars; -our @deal_vectors = (@deal_real_vectors, @deal_complex_vectors); - -### Array of all sequential vectors, which includes deal.II vectors. -our @sequential_vectors = @deal_real_vectors; - -### Array of all parallel vectors. -our @deal_parallel_vectors = map { $t = $_ ; map { "parallel::distributed::$_<$t >" } @deal_vector_templates } @real_scalars; -our @parallel_vectors = (@deal_parallel_vectors); - -###################################################################### -# Configured arrays start here. -###################################################################### -# For each of those, first set up a temporary array with parameters -# replaced by autoconf. Then, copy into the actual array, omitting all -# empty strings. -###################################################################### -our @tmp; - -@tmp = ('@DEAL_II_EXPAND_TRILINOS_VECTOR@', - '@DEAL_II_EXPAND_TRILINOS_BLOCKVECTOR@', - ''); -our @trilinos_vectors = grep {!/^$/} @tmp; -push(@sequential_vectors, @trilinos_vectors); - -@tmp = ('@DEAL_II_EXPAND_TRILINOS_MPI_VECTOR@', - '@DEAL_II_EXPAND_TRILINOS_MPI_BLOCKVECTOR@', - ''); -push (@trilinos_vectors, grep {!/^$/} @tmp); -push (@parallel_vectors, grep {!/^$/} @tmp); - -###################################################################### - -@tmp = ('@DEAL_II_EXPAND_PETSC_VECTOR@', - '@DEAL_II_EXPAND_PETSC_BLOCKVECTOR@', - ''); -our @petsc_vectors = grep {!/^$/} @tmp; -push(@sequential_vectors, @petsc_vectors); - -@tmp = ('@DEAL_II_EXPAND_PETSC_MPI_VECTOR@', - '@DEAL_II_EXPAND_PETSC_MPI_BLOCKVECTOR@', - ''); -push (@petsc_vectors, grep {!/^$/} @tmp); -push (@parallel_vectors, grep {!/^$/} @tmp); - -###################################################################### - -@tmp = qw(SparsityPattern - CompressedSparsityPattern - CompressedSetSparsityPattern - CompressedSimpleSparsityPattern - @DEAL_II_EXPAND_TRILINOS_SPARSITY_PATTERN@ - BlockSparsityPattern - BlockCompressedSparsityPattern - BlockCompressedSetSparsityPattern - BlockCompressedSimpleSparsityPattern - @DEAL_II_EXPAND_TRILINOS_BLOCK_SPARSITY_PATTERN@); -our @sparsity_patterns = grep {!/^$/} @tmp; diff --git a/deal.II/common/template-arguments.in b/deal.II/common/template-arguments.in index 09d4d3354d..745b3387c0 100644 --- a/deal.II/common/template-arguments.in +++ b/deal.II/common/template-arguments.in @@ -36,6 +36,18 @@ SERIAL_VECTORS := { Vector; @DEAL_II_EXPAND_PETSC_MPI_BLOCKVECTOR@; } +EXTERNAL_SEQUENTIAL_VECTORS := { @DEAL_II_EXPAND_TRILINOS_VECTOR@ + @DEAL_II_EXPAND_TRILINOS_BLOCKVECTOR@ + @DEAL_II_EXPAND_PETSC_VECTOR@ + @DEAL_II_EXPAND_PETSC_BLOCKVECTOR@ + } + +EXTERNAL_PARALLEL_VECTORS := { @DEAL_II_EXPAND_TRILINOS_MPI_VECTOR@ + @DEAL_II_EXPAND_TRILINOS_MPI_BLOCKVECTOR@ + @DEAL_II_EXPAND_PETSC_MPI_VECTOR@ + @DEAL_II_EXPAND_PETSC_MPI_BLOCKVECTOR@ + } + DOFHANDLERS := { DoFHandler; hp::DoFHandler; MGDoFHandler } diff --git a/deal.II/source/lac/CMakeLists.txt b/deal.II/source/lac/CMakeLists.txt index a5a668e65f..56d059dbdf 100644 --- a/deal.II/source/lac/CMakeLists.txt +++ b/deal.II/source/lac/CMakeLists.txt @@ -64,6 +64,7 @@ SET(inst_in_files block_sparse_matrix.inst.in block_vector.inst.in chunk_sparse_matrix.inst.in + constraint_matrix.inst.in full_matrix.inst.in operator.inst.in parallel_vector.inst.in diff --git a/deal.II/source/lac/block_sparse_matrix.inst.pl b/deal.II/source/lac/block_sparse_matrix.inst.pl deleted file mode 100644 index 33925a706d..0000000000 --- a/deal.II/source/lac/block_sparse_matrix.inst.pl +++ /dev/null @@ -1,28 +0,0 @@ -###################################################################### -# $Id$ -###################################################################### -# -# Copyright (C) 2011 by the deal.II authors -# -###################################################################### - -use strict; -use warnings; - -use dealiitemplates; - -my $scalar_functions = <<'EOT' -template class BlockSparseMatrix; -EOT - ; - -###################################################################### -# End of definitions, now come the loops -###################################################################### - -foreach my $r1 (@real_scalars) -{ - my $t = $scalar_functions; - $t =~ s/S1/$r1/g; - print $t; -} diff --git a/deal.II/source/lac/constraint_matrix.inst b/deal.II/source/lac/constraint_matrix.inst deleted file mode 100644 index 1c0c4cf4c4..0000000000 --- a/deal.II/source/lac/constraint_matrix.inst +++ /dev/null @@ -1,222 +0,0 @@ - -template void ConstraintMatrix::condense >(const Vector &, Vector &) const; -template void ConstraintMatrix::condense >(Vector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, Vector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const Vector &, Vector &) const; -template void ConstraintMatrix::distribute >(Vector &) const; - - -template void ConstraintMatrix::condense >(const BlockVector &, BlockVector &) const; -template void ConstraintMatrix::condense >(BlockVector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, BlockVector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const BlockVector &, BlockVector &) const; -template void ConstraintMatrix::distribute >(BlockVector &) const; - - -template void ConstraintMatrix::condense >(const Vector &, Vector &) const; -template void ConstraintMatrix::condense >(Vector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, Vector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const Vector &, Vector &) const; -template void ConstraintMatrix::distribute >(Vector &) const; - - -template void ConstraintMatrix::condense >(const BlockVector &, BlockVector &) const; -template void ConstraintMatrix::condense >(BlockVector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, BlockVector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const BlockVector &, BlockVector &) const; -template void ConstraintMatrix::distribute >(BlockVector &) const; - - -template void ConstraintMatrix::condense >(const Vector &, Vector &) const; -template void ConstraintMatrix::condense >(Vector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, Vector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const Vector &, Vector &) const; -template void ConstraintMatrix::distribute >(Vector &) const; - - -template void ConstraintMatrix::condense >(const BlockVector &, BlockVector &) const; -template void ConstraintMatrix::condense >(BlockVector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, BlockVector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const BlockVector &, BlockVector &) const; -template void ConstraintMatrix::distribute >(BlockVector &) const; - - -template void ConstraintMatrix::condense >(const parallel::distributed::Vector &, parallel::distributed::Vector &) const; -template void ConstraintMatrix::condense >(parallel::distributed::Vector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, parallel::distributed::Vector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const parallel::distributed::Vector &, parallel::distributed::Vector &) const; -template void ConstraintMatrix::distribute >(parallel::distributed::Vector &) const; - - -template void ConstraintMatrix::condense >(const parallel::distributed::BlockVector &, parallel::distributed::BlockVector &) const; -template void ConstraintMatrix::condense >(parallel::distributed::BlockVector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, parallel::distributed::BlockVector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const parallel::distributed::BlockVector &, parallel::distributed::BlockVector &) const; -template void ConstraintMatrix::distribute >(parallel::distributed::BlockVector &) const; - - -template void ConstraintMatrix::condense >(const parallel::distributed::Vector &, parallel::distributed::Vector &) const; -template void ConstraintMatrix::condense >(parallel::distributed::Vector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, parallel::distributed::Vector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const parallel::distributed::Vector &, parallel::distributed::Vector &) const; -template void ConstraintMatrix::distribute >(parallel::distributed::Vector &) const; - - -template void ConstraintMatrix::condense >(const parallel::distributed::BlockVector &, parallel::distributed::BlockVector &) const; -template void ConstraintMatrix::condense >(parallel::distributed::BlockVector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, parallel::distributed::BlockVector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const parallel::distributed::BlockVector &, parallel::distributed::BlockVector &) const; -template void ConstraintMatrix::distribute >(parallel::distributed::BlockVector &) const; - - -template void ConstraintMatrix::condense >(const parallel::distributed::Vector &, parallel::distributed::Vector &) const; -template void ConstraintMatrix::condense >(parallel::distributed::Vector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, parallel::distributed::Vector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const parallel::distributed::Vector &, parallel::distributed::Vector &) const; -template void ConstraintMatrix::distribute >(parallel::distributed::Vector &) const; - - -template void ConstraintMatrix::condense >(const parallel::distributed::BlockVector &, parallel::distributed::BlockVector &) const; -template void ConstraintMatrix::condense >(parallel::distributed::BlockVector &vec) const; -template void ConstraintMatrix::distribute_local_to_global > ( - const Vector&, const std::vector &, parallel::distributed::BlockVector &, const FullMatrix&) const; -template void ConstraintMatrix::distribute >(const parallel::distributed::BlockVector &, parallel::distributed::BlockVector &) const; -template void ConstraintMatrix::distribute >(parallel::distributed::BlockVector &) const; - - -template void ConstraintMatrix::set_zero >(Vector &) const; - - - -template void ConstraintMatrix::set_zero >(BlockVector &) const; - - - -template void ConstraintMatrix::set_zero >(Vector &) const; - - - -template void ConstraintMatrix::set_zero >(BlockVector &) const; - - - -template void ConstraintMatrix::set_zero >(Vector &) const; - - - -template void ConstraintMatrix::set_zero >(BlockVector &) const; - - - -template void ConstraintMatrix::set_zero >(parallel::distributed::Vector &) const; - - - -template void ConstraintMatrix::set_zero >(parallel::distributed::BlockVector &) const; - - - -template void ConstraintMatrix::set_zero >(parallel::distributed::Vector &) const; - - - -template void ConstraintMatrix::set_zero >(parallel::distributed::BlockVector &) const; - - - -template void ConstraintMatrix::set_zero >(parallel::distributed::Vector &) const; - - - -template void ConstraintMatrix::set_zero >(parallel::distributed::BlockVector &) const; - - - -template void ConstraintMatrix::condense(const SparseMatrix&, SparseMatrix &) const; -template void ConstraintMatrix::condense(SparseMatrix&) const; -template void ConstraintMatrix::condense(BlockSparseMatrix&) const; - - -template void ConstraintMatrix::condense(const SparseMatrix&, SparseMatrix &) const; -template void ConstraintMatrix::condense(SparseMatrix&) const; -template void ConstraintMatrix::condense(BlockSparseMatrix&) const; - - -template void ConstraintMatrix::condense(const SparseMatrix&, SparseMatrix &) const; -template void ConstraintMatrix::condense(SparseMatrix&) const; -template void ConstraintMatrix::condense(BlockSparseMatrix&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; - diff --git a/deal.II/source/lac/constraint_matrix.inst.in b/deal.II/source/lac/constraint_matrix.inst.in new file mode 100644 index 0000000000..b457cfb8e4 --- /dev/null +++ b/deal.II/source/lac/constraint_matrix.inst.in @@ -0,0 +1,59 @@ +for (S: REAL_SCALARS; T : DEAL_II_VEC_TEMPLATES) + { + template void ConstraintMatrix::condense >(const T &, T &) const; + template void ConstraintMatrix::condense >(T &vec) const; + template void ConstraintMatrix::distribute_local_to_global > ( + const Vector&, const std::vector &, T &, const FullMatrix&) const; + template void ConstraintMatrix::distribute >(const T &, T &) const; + template void ConstraintMatrix::distribute >(T &) const; + template void ConstraintMatrix::set_zero >(T &) const; + } + + +for (S: REAL_SCALARS; T : DEAL_II_VEC_TEMPLATES) + { + template void ConstraintMatrix::condense >(const parallel::distributed::T &, parallel::distributed::T &) const; + template void ConstraintMatrix::condense >(parallel::distributed::T &vec) const; + template void ConstraintMatrix::distribute_local_to_global > ( + const Vector&, const std::vector &, parallel::distributed::T &, const FullMatrix&) const; + template void ConstraintMatrix::distribute >(const parallel::distributed::T &, parallel::distributed::T &) const; + template void ConstraintMatrix::distribute >(parallel::distributed::T &) const; + template void ConstraintMatrix::set_zero >(parallel::distributed::T &) const; + } + + +for (V: EXTERNAL_SEQUENTIAL_VECTORS) + { + template void ConstraintMatrix::condense(const V&, V&) const; + template void ConstraintMatrix::condense(V&vec) const; + template void ConstraintMatrix::distribute_local_to_global ( + const Vector&, const std::vector &, V&, const FullMatrix&) const; + template void ConstraintMatrix::distribute(const V&, V&) const; + template void ConstraintMatrix::distribute(V&) const; + template void ConstraintMatrix::set_zero(V&) const; + } + + +for (V: EXTERNAL_DISTRIBUTED_VECTORS) + { + template void ConstraintMatrix::set_zero(V&) const; + } + + +for (S : REAL_SCALARS) + { + template void ConstraintMatrix::condense(const SparseMatrix&, SparseMatrix &) const; + template void ConstraintMatrix::condense(SparseMatrix&) const; + template void ConstraintMatrix::condense(BlockSparseMatrix&) const; + } + + +for (S1 : REAL_SCALARS; S2 : REAL_SCALARS) + { + template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; + template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; + template void ConstraintMatrix::condense >( + const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; + template void ConstraintMatrix::condense >( + const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; + } diff --git a/deal.II/source/lac/constraint_matrix.inst.pl b/deal.II/source/lac/constraint_matrix.inst.pl deleted file mode 100644 index 7e47773f01..0000000000 --- a/deal.II/source/lac/constraint_matrix.inst.pl +++ /dev/null @@ -1,63 +0,0 @@ -###################################################################### -# $Id$ -###################################################################### -# -# Copyright (C) 2011, 2012 by the deal.II authors -# -# This file is subject to QPL and may not be distributed -# without copyright and license information. Please refer -# to the file deal.II/doc/license.html for the text and -# further information on this license. -# -###################################################################### - -use strict; -use warnings; -use dealiitemplates; - -my $vector_functions = <<'EOT' - -template void ConstraintMatrix::condense(const V1 &, V1&) const; -template void ConstraintMatrix::condense(V1 &vec) const; -template void ConstraintMatrix::distribute_local_to_global ( - const Vector&, const std::vector &, V1&, const FullMatrix&) const; -template void ConstraintMatrix::distribute(const V1 &, V1&) const; -template void ConstraintMatrix::distribute(V1 &) const; -EOT - ; - -my $vector_functions_also_parallel = <<'EOT' - -template void ConstraintMatrix::set_zero(V1&) const; - -EOT - ; - -my $scalar_functions = <<'EOT' - -template void ConstraintMatrix::condense(const SparseMatrix&, SparseMatrix &) const; -template void ConstraintMatrix::condense(SparseMatrix&) const; -template void ConstraintMatrix::condense(BlockSparseMatrix&) const; -EOT - ; - -my $scalar_scalar_functions = <<'EOT' -template void ConstraintMatrix::condense >(SparseMatrix&, Vector&) const; -template void ConstraintMatrix::condense >(BlockSparseMatrix&, BlockVector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const Vector&, SparseMatrix &, Vector&) const; -template void ConstraintMatrix::condense >( - const SparseMatrix&, const BlockVector&, SparseMatrix &, BlockVector&) const; -EOT - ; - -###################################################################### -# End of definitions, now come the loops -###################################################################### - -multisubst($vector_functions, ['V1'], \@sequential_vectors); -multisubst($vector_functions, ['V1'], \@deal_parallel_vectors); -multisubst($vector_functions_also_parallel, ['V1'], \@sequential_vectors); -multisubst($vector_functions_also_parallel, ['V1'], \@parallel_vectors); -multisubst($scalar_functions, ['S1'], \@real_scalars); -multisubst($scalar_scalar_functions, ['S1','S2'], \@real_scalars, \@real_scalars);