/usr/include/deal.II/multigrid/mg_transfer.templates.h is in libdeal.ii-dev 6.3.1-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | //---------------------------------------------------------------------------
// $Id: mg_transfer.templates.h 20878 2010-03-22 15:07:17Z janssen $
// Version: $Name$
//
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010 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.
//
//---------------------------------------------------------------------------
#ifndef __deal2__mg_transfer_templates_h
#define __deal2__mg_transfer_templates_h
#include <lac/sparse_matrix.h>
#include <grid/tria_iterator.h>
#include <fe/fe.h>
#include <multigrid/mg_base.h>
#include <multigrid/mg_dof_accessor.h>
#include <multigrid/mg_tools.h>
#include <multigrid/mg_transfer.h>
#include <algorithm>
DEAL_II_NAMESPACE_OPEN
/* --------------------- MGTransferPrebuilt -------------- */
template <class VECTOR>
template <int dim, class OutVector, int spacedim>
void
MGTransferPrebuilt<VECTOR>::copy_from_mg(
const MGDoFHandler<dim,spacedim>& mg_dof_handler,
OutVector& dst,
const MGLevelObject<VECTOR>& src) const
{
// For non-DG: degrees of
// freedom in the refinement
// face may need special
// attention, since they belong
// to the coarse level, but
// have fine level basis
// functions
dst = 0;
for (unsigned int level=0;level<mg_dof_handler.get_tria().n_levels();++level)
{
typedef std::vector<std::pair<unsigned int, unsigned int> >::const_iterator IT;
for (IT i= copy_indices[level].begin();
i != copy_indices[level].end();++i)
dst(i->first) = src[level](i->second);
}
if (constraints != 0)
constraints->condense(dst);
}
template <class VECTOR>
template <int dim, class OutVector, int spacedim>
void
MGTransferPrebuilt<VECTOR>::copy_from_mg_add (
const MGDoFHandler<dim,spacedim>& mg_dof_handler,
OutVector &dst,
const MGLevelObject<VECTOR> &src) const
{
// For non-DG: degrees of
// freedom in the refinement
// face may need special
// attention, since they belong
// to the coarse level, but
// have fine level basis
// functions
for (unsigned int level=0;level<mg_dof_handler.get_tria().n_levels();++level)
{
typedef std::vector<std::pair<unsigned int, unsigned int> >::const_iterator IT;
for (IT i= copy_indices[level].begin();
i != copy_indices[level].end();++i)
dst(i->first) += src[level](i->second);
}
}
template <class VECTOR>
void
MGTransferPrebuilt<VECTOR>::
set_component_to_block_map (const std::vector<unsigned int> &map)
{
component_to_block_map = map;
}
template <class VECTOR>
unsigned int
MGTransferPrebuilt<VECTOR>::memory_consumption () const
{
unsigned int result = sizeof(*this);
result += sizeof(unsigned int) * sizes.size();
#ifdef DEAL_PREFER_MATRIX_EZ
std::vector<std_cxx1x::shared_ptr<SparseMatrixEZ<double> > >::const_iterator m;
const std::vector<std_cxx1x::shared_ptr<SparseMatrixEZ<double> > >::const_iterator end = prolongation_matrices.end();
for (m = prolongation_matrices.begin(); m != end ; ++m)
result += *m->memory_consumption();
#else
for (unsigned int i=0;i<prolongation_matrices.size();++i)
result += prolongation_matrices[i]->memory_consumption()
+ prolongation_sparsities[i]->memory_consumption();
#endif
return result;
}
DEAL_II_NAMESPACE_CLOSE
#endif
|