Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
KiT-RT
KiT-RT
Commits
99ac874a
Commit
99ac874a
authored
Nov 29, 2020
by
Steffen Schotthöfer
Browse files
restore mesh.h to state of master
parent
83f411b3
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
code/include/common/mesh.h
View file @
99ac874a
/*!
* @file mesh.h
* @brief Class for mesh description and partitioning
* @author J. Wolters
*/
#ifndef MESH_H
#define MESH_H
...
...
@@ -11,62 +5,55 @@
#include "common/globalconstants.h"
#include "common/typedef.h"
#include <algorithm>
#include <mpi.h>
#include <omp.h>
#include <vector>
#include "metis.h"
#include "parmetis.h"
#include "toolboxes/errormessages.h"
#include "toolboxes/reconstructor.h"
class
Mesh
{
protected:
const
unsigned
_dim
;
/*! @brief: spatial dimension of the mesh, i.e. 1D,2D,3D */
const
unsigned
_numCells
;
/*! @brief: number of cells in the mesh */
const
unsigned
_numNodes
;
/*! @brief: number of nodes in the mesh (for node centered view)*/
const
unsigned
_numNodesPerCell
;
/*! @brief: number of nodes per cell */
const
unsigned
_numBoundaries
;
/*! @brief: number of boundary cells in the mesh */
const
unsigned
_ghostCellID
;
/*! @brief: Id of the ghost cell. (we use only one ghost cell). equal to _numCells and therefore has the ID of the
last cell + 1 */
unsigned
_numNodesPerBoundary
;
std
::
vector
<
std
::
pair
<
double
,
double
>>
_bounds
;
// ???
std
::
vector
<
Vector
>
_nodes
;
/*! @brief: nodes in the mesh. dimension:_numNodes<_dim> */
std
::
vector
<
std
::
vector
<
unsigned
>>
_cells
;
/*! @brief: cells in the mesh. dimension:_numCells<_numNodesPerCell> */
const
unsigned
_dim
;
const
unsigned
_numCells
;
const
unsigned
_numNodes
;
const
unsigned
_numNodesPerCell
;
const
unsigned
_numBoundaries
;
const
unsigned
_ghostCellID
;
// equal to _numCells and therefore has the ID of the last cell + 1
/*! @brief: boundary cells in the mesh. Pair defines boundary type of the boundary nodes of the cell. numBoundaries<(1,numBoundaryNodes)>*/
std
::
vector
<
std
::
pair
<
BOUNDARY_TYPE
,
std
::
vector
<
unsigned
>>>
_boundaries
;
std
::
vector
<
double
>
_cellAreas
;
/*! @brief: cell areas of the mesh. dimension: numCells*/
std
::
vector
<
Vector
>
_cellMidPoints
;
/*! @brief: cell midpoints of the mesh. dimension: numCells<dim>*/
std
::
vector
<
std
::
vector
<
unsigned
>>
_cellNeighbors
;
/*! @brief: neighbors of each cell. dimension: numCells<numNodesPerCell>*/
/*! @brief: outward facing normals of each side of each cell. dimension: numCells<numNodesPerCell<dim>>, all
normals are facing away from the cell center, and scaled with the edge length */
std
::
vector
<
std
::
vector
<
Vector
>>
_cellNormals
;
/*! @brief: Tags each cell with its boundary type. None means no boundary. dimension: numCells */
std
::
vector
<
BOUNDARY_TYPE
>
_cellBoundaryTypes
;
std
::
vector
<
unsigned
>
_colors
;
/*! @brief: Color of each cell (for MPI mesh partitioning). dimension: numCells */
blaze
::
CompressedMatrix
<
bool
>
_nodeNeighbors
;
/*! @brief: neighborshood relationship of nodes for (par-)metis */
void
ComputeCellAreas
();
/*! @brief: Computes only the areas of the mesh cells. Write to _cellAreas. */
void
ComputeCellMidpoints
();
/*! @brief: Compute only the midpoints of the cells. Write to _cellMidPoints*/
void
ComputeConnectivity
();
/*! @brief: Computes _cellNeighbors and _nodeNeighbors, i.e. neighborship relation in mesh*/
// void ComputePartitioning(); /*! @brief: Computes local partitioning for openMP */
unsigned
_numNodesPerBoundary
;
/*! @brief: Computes outward facing normal of two neighboring nodes nodeA and nodeB with common cellCellcenter.
* Normals are scaled with their respective edge length
* @param: nodeA: first node
* @param: nodeB: neighboring node to nodeA
* @param: cellCenter: Center of the cell that has nodeA and nodeB as nodes.
* @return: outward facing normal */
Vector
ComputeOutwardFacingNormal
(
const
Vector
&
nodeA
,
const
Vector
&
nodeB
,
const
Vector
&
cellCenter
);
void
ComputeBounds
();
/*! @brief: Computes the spatial bounds of a 2D domain. */
std
::
vector
<
std
::
pair
<
double
,
double
>>
_bounds
;
std
::
vector
<
Vector
>
_nodes
;
// dimension: numNodes<dim>
std
::
vector
<
std
::
vector
<
unsigned
>>
_cells
;
// dimension: numCells<numNodesPerCell>
std
::
vector
<
std
::
pair
<
BOUNDARY_TYPE
,
std
::
vector
<
unsigned
>>>
_boundaries
;
// dimension: numBoundaries<(1,numBoundaryNodes)>
std
::
vector
<
double
>
_cellAreas
;
// dimension: numCells
std
::
vector
<
Vector
>
_cellMidPoints
;
// dimension: numCells<dim>
std
::
vector
<
std
::
vector
<
unsigned
>>
_cellNeighbors
;
// dimension: numCells<numNodesPerCell>
std
::
vector
<
std
::
vector
<
Vector
>>
_cellNormals
;
// dimension: numCells<numNodesPerCell<dim>>, all normals are facing away from the cell center
// and scaled with the edge length
std
::
vector
<
BOUNDARY_TYPE
>
_cellBoundaryTypes
;
// dimension: numCells, default type is NONE
std
::
vector
<
unsigned
>
_colors
;
// dimension: numCells
blaze
::
CompressedMatrix
<
bool
>
_nodeNeighbors
;
// neighborshood relationship of nodes for (par-)metis
void
ComputeCellAreas
();
void
ComputeCellMidpoints
();
void
ComputeConnectivity
();
void
ComputePartitioning
();
Vector
ComputeOutwardFacingNormal
(
const
Vector
&
nodeA
,
const
Vector
&
nodeB
,
const
Vector
&
cellCenter
);
// normals are scaled with their respective edge length
void
ComputeBounds
();
public:
Mesh
()
=
delete
;
// no default constructor
/*! @brief: Constructor of mesh. Needs nodes, cells, and boundary descriptions as specified above.
* See LoadSU2MeshFromFile in io.cpp for setup information*/
Mesh
()
=
delete
;
Mesh
(
std
::
vector
<
Vector
>
nodes
,
std
::
vector
<
std
::
vector
<
unsigned
>>
cells
,
std
::
vector
<
std
::
pair
<
BOUNDARY_TYPE
,
std
::
vector
<
unsigned
>>>
boundaries
);
std
::
vector
<
std
::
pair
<
BOUNDARY_TYPE
,
std
::
vector
<
unsigned
>>>
boundaries
);
// see LoadSU2MeshFromFile in io.cpp for setup information
~
Mesh
();
inline
unsigned
GetDim
()
const
{
return
_dim
;
}
...
...
@@ -74,65 +61,76 @@ class Mesh
inline
unsigned
GetNumNodes
()
const
{
return
_numNodes
;
}
inline
unsigned
GetNumNodesPerCell
()
const
{
return
_numNodesPerCell
;
}
/*! @brief: Returns all node coordinates
* @return: dimension: numNodes x dim */
/**
* @brief Returns all node coordinates
* @return dimension: numNodes x dim
*/
const
std
::
vector
<
Vector
>&
GetNodes
()
const
;
/*! @brief Returns the mid point coordinates of each cell
* @return dimension: numCells x dim */
/**
* @brief Returns the mid point coordinates of each cell
* @return dimension: numCells x dim
*/
const
std
::
vector
<
Vector
>&
GetCellMidPoints
()
const
;
/*! @brief Returns all node IDs that construct up each cell
* @return dimension: numCells x numNodes */
/**
* @brief Returns all node IDs that construct up each cell
* @return dimension: numCells x numNodes
*/
const
std
::
vector
<
std
::
vector
<
unsigned
>>&
GetCells
()
const
;
/*! @brief Returns the cell area of each cell
* @return dimension: numCells */
/**
* @brief Returns the cell area of each cell
* @return dimension: numCells
*/
const
std
::
vector
<
double
>&
GetCellAreas
()
const
;
/*! @brief Return the color/ID of the mesh partition
* @return dimension: numCells */
/**
* @brief Return the color/ID of the mesh partition
* @return dimension: numCells
*/
const
std
::
vector
<
unsigned
>&
GetPartitionIDs
()
const
;
/*! @brief Returns the neighbor cell IDs for every cell
* @return dimension: numCells x numNodes */
/**
* @brief Returns the neighbor cell IDs for every cell
* @return dimension: numCells x numNodes
*/
const
std
::
vector
<
std
::
vector
<
unsigned
>>&
GetNeighbours
()
const
;
/*! @brief Returns the edge length scaled normal vectors of each cell
* @return dimension: numCells x numNodes x dim */
/**
* @brief Returns the edge length scaled normal vectors of each cell
* @return dimension: numCells x numNodes x dim
*/
const
std
::
vector
<
std
::
vector
<
Vector
>>&
GetNormals
()
const
;
/*! @brief Returns the boundary enum for each cell. BOUNDARY_TYPE::NONE is the default.
* @return dimension: numCells */
/**
* @brief Returns the boundary enum for each cell. BOUNDARY_TYPE::NONE is the default.
* @return dimension: numCells
*/
const
std
::
vector
<
BOUNDARY_TYPE
>&
GetBoundaryTypes
()
const
;
/*! @brief Returns the minimal and maximal coordinates of all nodes for each dimension
* @return dimension: dim */
/**
* @brief Returns the minimal and maximal coordinates of all nodes for each dimension
* @return dimension: dim
*/
const
std
::
vector
<
std
::
pair
<
double
,
double
>>
GetBounds
()
const
;
/*! @brief Returns distance of a specified cells center to the coordinate systems origin
* @return dimension: scalar */
/**
* @brief Returns distance of a specified cells center to the coordinate systems origin
* @return dimension: scalar
*/
double
GetDistanceToOrigin
(
unsigned
idx_cell
)
const
;
/*! @brief ComputeSlopes calculates the slope in every cell into x and y direction using the divergence theorem.
* @param nq is number of quadrature points
* @param psiDerX is slope in x direction (gets computed. Slope is stored here)
* @param psiDerY is slope in y direction (gets computed. Slope is stored here)
* @param psi is solution for which slope is computed */
// Not used
/**
* @brief ComputeSlopes calculates the slope in every cell into x and y direction
* @param nq is number of quadrature points
* @param psiDerX is slope in x direction
* @param psiDerY is slope in y direction
* @param psi is solution for which slope is computed
*/
void
ComputeSlopes
(
unsigned
nq
,
VectorVector
&
psiDerX
,
VectorVector
&
psiDerY
,
const
VectorVector
&
psi
)
const
;
/*! @brief:Structured mesh slope reconstruction with flux limiters.
* @param nq is number of quadrature points
* @param psiDerX is slope in x direction (gets computed. Slope is stored here)
* @param psiDerY is slope in y direction (gets computed. Slope is stored here)
* @param psi is solution for which slope is computed */
void
ReconstructSlopesS
(
unsigned
nq
,
VectorVector
&
psiDerX
,
VectorVector
&
psiDerY
,
const
VectorVector
&
psi
)
const
;
/*! @brief: Use gauss theorem and limiters. For unstructured mesh *
* @param nq is number of quadrature points
* @param psiDerX is slope in x direction (gets computed. Slope is stored here)
* @param psiDerY is slope in y direction (gets computed. Slope is stored here)
* @param psi is solution for which slope is computed */
void
ReconstructSlopesU
(
unsigned
nq
,
VectorVector
&
psiDerX
,
VectorVector
&
psiDerY
,
const
VectorVector
&
psi
)
const
;
};
...
...
code/input/exampleMN.cfg
View file @
99ac874a
...
...
@@ -14,8 +14,8 @@ OUTPUT_FILE = exampleMN
% Log directory
LOG_DIR = ../result/logs
% Mesh File
MESH_FILE = linesource.su2
%
MESH_FILE = linesource_debug.su2
%
MESH_FILE = linesource.su2
MESH_FILE = linesource_debug.su2
%
% ---- Problem description ---
%
...
...
code/input/linesource.su2
deleted
100644 → 0
View file @
83f411b3
This diff is collapsed.
Click to expand it.
code/src/common/mesh.cpp
View file @
99ac874a
#include "common/mesh.h"
#include "toolboxes/errormessages.h"
#include <mpi.h>
#include <omp.h>
#include "toolboxes/reconstructor.h"
#include <chrono>
Mesh
::
Mesh
(
std
::
vector
<
Vector
>
nodes
,
std
::
vector
<
std
::
vector
<
unsigned
>>
cells
,
...
...
@@ -223,7 +219,6 @@ Vector Mesh::ComputeOutwardFacingNormal( const Vector& nodeA, const Vector& node
return
n
;
}
/*
void
Mesh
::
ComputePartitioning
()
{
int
comm_size
,
comm_rank
;
MPI_Comm
comm
=
MPI_COMM_WORLD
;
...
...
@@ -359,7 +354,6 @@ void Mesh::ComputePartitioning() {
_colors
.
resize
(
_numCells
,
0u
);
}
}
*/
void
Mesh
::
ComputeSlopes
(
unsigned
nq
,
VectorVector
&
psiDerX
,
VectorVector
&
psiDerY
,
const
VectorVector
&
psi
)
const
{
for
(
unsigned
k
=
0
;
k
<
nq
;
++
k
)
{
...
...
jannick.wolters
@jm2154
mentioned in commit
a17cbc7f
·
Apr 30, 2021
mentioned in commit
a17cbc7f
mentioned in commit a17cbc7f1e80cb7395bfb7500d07c5bfbc4d7b17
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment