/usr/include/libmesh/variable.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 | // $Id: variable.h 4161 2011-01-12 17:07:58Z 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 __variable_h__
#define __variable_h__
// C++ includes
#include <set>
#include <string>
// Local Includes
#include "fe_type.h"
#include "id_types.h"
namespace libMesh {
/**
* This class defines the notion of a variable in the system.
* A variable is one of potentially several unknowns in the
* problem at hand. A variable is described by a unique
* name, a finite element approximation family, and
* (optionally) a list of subdomains to which the
* variable is restricted.
*/
class Variable
{
public:
/**
* Constructor. Omits the subdomain mapping, hence this
* constructor creates a variable which is active on
* all subdomains.
*/
Variable (const std::string &var_name,
const unsigned int var_number,
const FEType &var_type) :
_name(var_name),
_number(var_number),
_type(var_type),
_active_subdomains()
{}
/**
* Constructor. Takes a set which contains the subdomain
* indices for which this variable is active.
*/
Variable (const std::string &var_name,
const unsigned int var_number,
const FEType &var_type,
const std::set<subdomain_id_type> &var_active_subdomains) :
_name(var_name),
_number(var_number),
_type(var_type),
_active_subdomains(var_active_subdomains)
{}
/**
* Arbitrary, user-specified name of the variable.
*/
const std::string & name() const
{ return _name; }
/**
* The rank of this variable in the system.
*/
unsigned int number() const
{ return _number; }
/**
* The \p FEType for this variable.
*/
const FEType & type() const
{ return _type; }
/**
* \p returns \p true if this variable is active on subdomain \p sid,
* \p false otherwise. Note that we interperet the special case of an
* empty \p _active_subdomains container as active everywhere, i.e.
* for all subdomains.
*/
bool active_on_subdomain (const subdomain_id_type sid) const
{ return (_active_subdomains.empty() || _active_subdomains.count(sid)); }
/**
* \p returns \p true if this variable is active on all subdomains
* because it has no specified activity map. This can be used
* to perform more efficient computations in some places.
*/
bool implicitly_active () const
{ return _active_subdomains.empty(); }
private:
std::string _name;
unsigned int _number;
FEType _type;
std::set<subdomain_id_type> _active_subdomains;
};
} // namespace libMesh
#endif // #define __variable_h__
|