/usr/include/trilinos/Sample.hpp is in libtrilinos-dev 10.4.0.dfsg-1ubuntu2.
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 | /* *****************************************************************
MESQUITE -- The Mesh Quality Improvement Toolkit
Copyright 2007 Sandia National Laboratories. Developed at the
University of Wisconsin--Madison under SNL contract number
624796. The U.S. Government and the University of Wisconsin
retain certain rights to this software.
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
(lgpl.txt) along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
(2009) kraftche@cae.wisc.edu
***************************************************************** */
/** \file Sample.hpp
* \brief
* \author Jason Kraftcheck
*/
#ifndef MSQ_SAMPLE_HPP
#define MSQ_SAMPLE_HPP
#include "Mesquite.hpp"
#include <iosfwd>
#include <stddef.h> // for size_t
namespace MESQUITE_NS {
//! Define a logical location within an element at which the
//! element will be "sampled" for the purpose of evaluating a
//! quality metric. For example, specify a location at which
//! to calculate the Jacobian of the mapping function and
//! use it to evaluate a TMP quality metric.
//!
//! Logical sample points are currently limited to corners, mid-sides
//! (region elements have both face and edge "sides") and mid-element.
struct MESQUITE_EXPORT Sample {
//!\brief The "dimension" of the sub-entity.
//!
//! Possible values are [0-3]:
//! - 0 : sample at the location of a corner vertex
//! - 1 : sample at the center of an edge
//! - 2 : sample at the center of a surface element or the center
//! of one face of a volume element
//! - 3 : sample at the center of a volume element
unsigned short dimension;
//!\brief Canonical number in ITAPS ordering for element corners/sides.
//!
//! The dimension specifies which set of sub-entities that the sample
//! my be on. The number specifies which entity within that subset.
//! For example, if dimension == 1 then the sample point is at the
//! center of one of the element edges. The number then specifies
//! which edge of the element, where edges are ordered according to
//! the ITAPS ordering.
//!
//! For mid-region or mid-face of a surface element, the number
//! should be zero.
unsigned short number;
//! Constants used for a packed (minimum number of bits) representation
//! of a sample.
enum {
/** Number of bits used to store the dimension of an element 'side' */
SIDE_DIMENSION_BITS = 2,
/** Number of bits used to store the index of an element 'side' of a specific dimension */
SIDE_NUMBER_BITS = 4,
NUMBER_PACKED_BITS = SIDE_DIMENSION_BITS + SIDE_NUMBER_BITS,
/** Number of distinct side dimension values that will fit
* in a sample value (one greater than the largest dimension) */
NUM_SAMPLE_SIDE_DIM = 1u << SIDE_DIMENSION_BITS,
/** Number of distinct side index values that will fit
* in a sample value (one greater than the largest side number) */
NUM_SAMPLE_SIDE_NUM = 1u << SIDE_NUMBER_BITS,
/** Mask to remove side dimension bits from sample number */
SIDE_NUMBER_MASK = NUM_SAMPLE_SIDE_NUM - 1,
/** Mask to remove side dimension bits from sample number */
SIDE_DIMENSON_MASK = NUM_SAMPLE_SIDE_DIM - 1
};
//! Return packed representation of this sample.
inline size_t pack() const
{ return (((size_t)dimension) << SIDE_NUMBER_BITS) | number; }
//! Set this sample to the values encoded in a packed sample representation.
inline void unpack( size_t packed )
{ dimension = (packed >> SIDE_NUMBER_BITS) & SIDE_DIMENSON_MASK;
number = packed & SIDE_NUMBER_MASK;
}
//! Initialization constructor
Sample( unsigned dim, unsigned num ) : dimension(dim), number(num) {}
//! Initialize from packed representation
explicit Sample( size_t packed ) { unpack(packed); }
//! Default constructor must be explicitly included if we provide other constructors
//! Do nothing (don't waste time initilazing to zero or something, I'd rather
//! be able to catch the use of uninitialized values using a memory checker
//! anyway if I make such a mistake.)
Sample() {}
bool operator==( const Sample& other ) const
{ return pack() == other.pack(); }
bool operator!=( const Sample& other ) const
{ return pack() != other.pack(); }
bool operator<( const Sample& other ) const
{ return pack() < other.pack(); }
bool operator>( const Sample& other ) const
{ return pack() > other.pack(); }
bool operator<=( const Sample& other ) const
{ return pack() <= other.pack(); }
bool operator>=( const Sample& other ) const
{ return pack() >= other.pack(); }
};
std::ostream& operator <<( std::ostream& str, Sample s );
} // namespace Mesquite
#endif
|