/usr/include/libmesh/mesh_modification.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 | // $Id: mesh_modification.h 3874 2010-07-02 21:57:26Z 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 __mesh_modification_h__
#define __mesh_modification_h__
// C++ Includes -----------------------------------
// Local Includes -----------------------------------
#include "libmesh_common.h"
namespace libMesh
{
// forward declarations
class MeshBase;
// ------------------------------------------------------------
// MeshTools::Modification namespace
namespace MeshTools
{
/**
* Tools for \p Mesh modification.
*
* \author Benjamin S. Kirk
* \date 2004
* \version $Revision: 3874 $
*/
namespace Modification
{
/**
* Randomly perturb the nodal locations. This function will
* move each node \p factor fraction of its minimum neighboring
* node separation distance. Nodes on the boundary are not moved
* by default, however they may be by setting the flag
* \p perturb_boundary true.
*/
void distort (MeshBase& mesh,
const Real factor, const bool perturb_boundary=false);
/**
* Translates the mesh. The grid points are translated in the
* \p x direction by \p xt, in the \p y direction by \p yt,
* etc...
*/
void translate (MeshBase& mesh,
const Real xt=0., const Real yt=0., const Real zt=0.);
// /**
// * Rotates the mesh in the xy plane. The rotation is
// * counter-clock-wise (mathematical definition).
// * The angle is in degrees (360 make a full circle)
// */
// void rotate2D (MeshBase& mesh,
// const Real alpha=0.);
/**
* Rotates the mesh in 3D space.
* Here the standard Euler angles are adopted
* (http://mathworld.wolfram.com/EulerAngles.html)
* The angles are in degrees (360 make a full circle)
*/
void rotate (MeshBase& mesh,
const Real phi, const Real theta=0., const Real psi=0.);
/**
* Scales the mesh. The grid points are scaled in the
* \p x direction by \p xs, in the \p y direction by \p ys,
* etc... If only \p xs is specified then the scaling is
* assumed uniform in all directions.
*/
void scale (MeshBase& mesh,
const Real xs, const Real ys=0., const Real zs=0.);
/**
* Converts the 2D quadrilateral elements of a Mesh into
* triangular elements.
* Note: Only works for 2D elements! 3D elements are ignored.
* Note: Probably won't do the right thing for meshes which
* have been refined previously.
*/
void all_tri (MeshBase& mesh);
/**
* Smooth the mesh with a simple Laplace smoothing algorithm. The mesh is
* smoothed \p n_iterations times. If the parameter \p power is 0, each
* node is moved to the average postition of the neighboring connected
* nodes. If \p power > 0, the node positions are weighted by their
* distance. The positions of higher order nodes, and nodes living in
* refined elements, are calculated from the vertex positions of their
* parent nodes. Only works in 2D.
*
* \author Martin Lüthi (luthi@gi.alaska.edu)
* \date 2005
*/
void smooth(MeshBase&, unsigned int, Real);
#ifdef LIBMESH_ENABLE_AMR
/**
* Removes all the refinement tree structure of Mesh, leaving
* only the highest-level (most-refined) elements. This is useful
* when you want to write out a uniformly-refined grid to be treated later
* as an initial mesh. Note that many functions in LibMesh assume a
* conforming (with no hanging nodes) grid exists at some level, so
* you probably only want to do this on meshes which have been uniformly
* refined.
*/
void flatten(MeshBase& mesh);
#endif // #ifdef LIBMESH_ENABLE_AMR
/**
* Finds any boundary ids that are currently old_id,
* changes them to new_id
*/
void change_boundary_id (MeshBase &mesh,
const short int old_id,
const short int new_id);
} // end namespace Meshtools::Modification
} // end namespace MeshTools
} // namespace libMesh
#endif // #define __mesh_modification_h__
|