Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F71294248
MeshQuad4.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Jul 10, 21:22
Size
5 KB
Mime Type
text/x-c++
Expires
Fri, Jul 12, 21:22 (2 d)
Engine
blob
Format
Raw Data
Handle
18931769
Attached To
rGOOSEFEM GooseFEM
MeshQuad4.h
View Options
/* =================================================================================================
(c - GPLv3) T.W.J. de Geus (Tom) | tom@geus.me | www.geus.me | github.com/tdegeus/GooseFEM
================================================================================================= */
#ifndef GOOSEFEM_MESHQUAD4_H
#define GOOSEFEM_MESHQUAD4_H
// -------------------------------------------------------------------------------------------------
#include "GooseFEM.h"
// ===================================== GooseFEM::Mesh::Quad4 =====================================
namespace GooseFEM {
namespace Mesh {
namespace Quad4 {
// ========================================== REGULAR MESH =========================================
class Regular
{
private:
size_t m_nx; // number of 'pixels' horizontal direction (length == "m_nx * m_h")
size_t m_ny; // number of 'pixels' vertical direction (length == "m_ny * m_h")
double m_h; // size of the element edge (equal in both directions)
size_t m_nelem; // number of elements
size_t m_nnode; // number of nodes
size_t m_nne=4; // number of nodes-per-element
size_t m_ndim=2; // number of dimensions
public:
// mesh with "nx*ny" 'pixels' and edge size "h"
Regular(size_t nx, size_t ny, double h=1.);
// sizes
size_t nelem(); // number of elements
size_t nnode(); // number of nodes
size_t nne(); // number of nodes-per-element
size_t ndim(); // number of dimensions
// mesh
MatD coor(); // nodal positions [ nnode , ndim ]
MatS conn(); // connectivity [ nelem , nne ]
// boundary nodes: edges
ColS nodesBottomEdge(); // nodes along the bottom edge
ColS nodesTopEdge(); // nodes along the top edge
ColS nodesLeftEdge(); // nodes along the left edge
ColS nodesRightEdge(); // nodes along the right edge
// boundary nodes: corners
size_t nodesBottomLeftCorner(); // bottom - left corner node
size_t nodesBottomRightCorner(); // bottom - right corner node
size_t nodesTopLeftCorner(); // top - left corner node
size_t nodesTopRightCorner(); // top - right corner node
// boundary nodes: corners (aliases)
size_t nodesLeftBottomCorner(); // bottom - left corner node
size_t nodesLeftTopCorner(); // top - left corner node
size_t nodesRightBottomCorner(); // bottom - right corner node
size_t nodesRightTopCorner(); // top - right corner node
// periodicity
MatS nodesPeriodic(); // periodic node pairs [:,2]: (independent, dependent)
size_t nodesOrigin(); // bottom-left node, to be used as reference for periodicity
MatS dofs(); // DOF-numbers for each component of each node (sequential)
MatS dofsPeriodic(); // DOF-numbers for each component of each node (sequential)
};
// ====================== MESH WITH A FINE LAYER THAT EXPONENTIALLY COARSENS =======================
class FineLayer
{
private:
double m_h; // elementary element size (middle-layer in x-direction has "L = m_nx * m_h")
size_t m_nx; // number of elements in x-direction
ColS m_nh; // element size in y-direction of each layer
ColS m_startNode; // start node of each layer
ColS m_startElem; // start element of each layer
size_t m_nelem; // number of elements
size_t m_nnode; // number of nodes
size_t m_nne=4; // number of nodes-per-element
size_t m_ndim=2; // number of dimensions
public:
// mesh with "nx*ny" 'pixels' and edge size "h"; the elements in y-direction are coarsened
FineLayer(size_t nx, size_t ny, double h=1., size_t nfine=1, size_t nskip=0);
// sizes
size_t nelem(); // number of elements
size_t nnode(); // number of nodes
size_t nne(); // number of nodes-per-element
size_t ndim(); // number of dimensions
size_t shape(size_t i); // actual shape in horizontal and vertical direction
// mesh
MatD coor(); // nodal positions [ nnode , ndim ]
MatS conn(); // connectivity [ nelem , nne ]
// boundary nodes: edges
ColS elementsMiddleLayer(); // elements in the middle, fine, layer
ColS nodesBottomEdge(); // nodes along the bottom edge
ColS nodesTopEdge(); // nodes along the top edge
ColS nodesLeftEdge(); // nodes along the left edge
ColS nodesRightEdge(); // nodes along the right edge
// boundary nodes: corners
size_t nodesBottomLeftCorner(); // bottom - left corner node
size_t nodesBottomRightCorner(); // bottom - right corner node
size_t nodesTopLeftCorner(); // top - left corner node
size_t nodesTopRightCorner(); // top - right corner node
// boundary nodes: corners (aliases)
size_t nodesLeftBottomCorner(); // bottom - left corner node
size_t nodesLeftTopCorner(); // top - left corner node
size_t nodesRightBottomCorner(); // bottom - right corner node
size_t nodesRightTopCorner(); // top - right corner node
// periodicity
MatS nodesPeriodic(); // periodic node pairs [:,2]: (independent, dependent)
size_t nodesOrigin(); // bottom-left node, to be used as reference for periodicity
MatS dofs(); // DOF-numbers for each component of each node (sequential)
MatS dofsPeriodic(); // DOF-numbers for each component of each node (sequential)
};
// =================================================================================================
}}} // namespace ...
// =================================================================================================
#endif
Event Timeline
Log In to Comment