/usr/include/libmesh/hp_coarsentest.h is in libmesh-dev 0.7.1-2ubuntu1.
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | // $Id: hp_coarsentest.h 4278 2011-03-21 15:23:30Z roystgnr $
// The libMesh Finite Element Library.
// Copyright (C) 2002-2008 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#ifndef __hp_coarsentest_h__
#define __hp_coarsentest_h__
// C++ includes
#include <vector>
// Local Includes
#include "auto_ptr.h"
#include "dense_matrix.h"
#include "dense_vector.h"
#include "hp_selector.h"
#include "libmesh_common.h"
#include "fe.h" // MipsPro requires fe.h and quadrature.h in order to
#include "quadrature.h" // delete AutoPtrs<> upon destruction
#ifdef LIBMESH_ENABLE_AMR
namespace libMesh
{
// Forward Declarations
class Elem;
class Point;
class System;
template <typename T> class TensorValue;
template <typename T> class VectorValue;
typedef VectorValue<Real> RealVectorValue;
typedef TensorValue<Real> RealTensorValue;
typedef RealVectorValue RealGradient;
typedef RealTensorValue RealTensor;
/**
* This class uses the error estimate given by different types of
* derefinement (h coarsening or p reduction) to choose between h
* refining and p elevation.
* Currently we assume that a set of elements has already been flagged
* for h refinement, and we may want to change some of those elements
* to be flagged for p refinement.
*
* This code is currently experimental and will not produce optimal
* hp meshes without significant improvement.
*
* @author Roy H. Stogner, 2006.
*/
class HPCoarsenTest : public HPSelector
{
public:
/**
* Constructor.
*/
HPCoarsenTest() : p_weight(1.0)
{
libmesh_experimental();
}
/**
* Destructor.
*/
virtual ~HPCoarsenTest() {}
/**
* This pure virtual function must be redefined
* in derived classes to take a mesh flagged for h
* refinement and potentially change the desired
* refinement type.
*/
virtual void select_refinement (System& system);
/**
* Because the coarsening test seems to always choose p refinement, we're
* providing an option to make h refinement more likely
*/
Real p_weight;
protected:
/**
* The helper function which adds individual fine element data to
* the coarse element projection
*/
void add_projection(const System&, const Elem*, unsigned int var);
/**
* The coarse element on which a solution projection is cached
*/
const Elem *coarse;
/**
* Global DOF indices for fine elements
*/
std::vector<unsigned int> dof_indices;
/**
* The finite element objects for fine and coarse elements
*/
AutoPtr<FEBase> fe, fe_coarse;
/**
* The shape functions and their derivatives
*/
const std::vector<std::vector<Real> > *phi, *phi_coarse;
const std::vector<std::vector<RealGradient> > *dphi, *dphi_coarse;
const std::vector<std::vector<RealTensor> > *d2phi, *d2phi_coarse;
/**
* Mapping jacobians
*/
const std::vector<Real> *JxW;
/**
* Quadrature locations
*/
const std::vector<Point> *xyz_values;
std::vector<Point> coarse_qpoints;
/**
* The quadrature rule for the fine element
*/
AutoPtr<QBase> qrule;
/**
* Linear system for projections
*/
DenseMatrix<Number> Ke;
DenseVector<Number> Fe;
/**
* Coefficients for projected coarse and projected
* p-derefined solutions
*/
DenseVector<Number> Uc;
DenseVector<Number> Up;
};
} // namespace libMesh
#endif // #ifdef LIBMESH_ENABLE_AMR
#endif
|