Commit 73f2ee84 authored by David Moxey's avatar David Moxey

Merge remote-tracking branch 'upstream/master' into fix/xml-output

parents d9424102 6dafcf98
......@@ -4,13 +4,23 @@ Changelog
v4.5.0
------
**NekMesh**:
- Add periodic boundary condition meshing in 2D (!733)
- Adjust boundary layer thickness in corners in 2D (!739)
**Documentation**:
- Added the developer-guide repository as a submodule (!751)
v4.4.1
------
**Library**
- Remove the duplicate output of errorutil (!756)
**NekMesh**:
- Fix memory consumption issue with Gmsh output (!747)
- Rework meshing control so that if possible viewable meshes will be dumped
when some part of the system fails (!756)
- Add manifold meshing option (!756)
v4.4.0
------
**Library**:
......
......@@ -90,11 +90,9 @@ Array<OneD, NekDouble> CADSurfOCE::locuv(Array<OneD, NekDouble> p)
uvr[1] = p2.Y();
gp_Pnt p3 = m_sas->Value(p2);
if (p3.Distance(loc) > 1e-6)
{
cout << "large locuv distance " << p3.Distance(loc)/1000.0 << " " << m_id
<< endl;
}
WARNINGL2(p3.Distance(loc) < 1e-3, "large locuv distance " +
boost::lexical_cast<string>(p3.Distance(loc)/1000.0) + " " +
boost::lexical_cast<string>(m_id));
// if the uv returned is slightly off the surface
//(which ShapeAnalysis_Surface can do sometimes)
......
......@@ -33,9 +33,9 @@
//
////////////////////////////////////////////////////////////////////////////////
#include <NekMeshUtils/MeshElements/Mesh.h>
#include <LibUtilities/Foundations/ManagerAccess.h>
#include <LibUtilities/BasicUtils/Progressbar.hpp>
#include <LibUtilities/Foundations/ManagerAccess.h>
#include <NekMeshUtils/MeshElements/Mesh.h>
using namespace std;
......@@ -96,17 +96,22 @@ unsigned int Mesh::GetNumEntities()
* - Finally, any boundary elements are updated so that they have the same
* interior degrees of freedom as their corresponding edge or face links.
*/
void Mesh::MakeOrder(int order,
LibUtilities::PointsType distType)
void Mesh::MakeOrder(int order, LibUtilities::PointsType distType)
{
// going to make a copy of the curavture information
// cheaper that geom objects
// currently the geometry objects which make up a 3D element
// dont use the volume nodes, they are just stored,
// so we can get away without copying them
int id = m_vertexSet.size();
EdgeSet::iterator eit;
FaceSet::iterator fit;
boost::unordered_map<int, SpatialDomains::Geometry1DSharedPtr> edgeGeoms;
boost::unordered_map<int, SpatialDomains::Geometry2DSharedPtr> faceGeoms;
boost::unordered_map<int, SpatialDomains::GeometrySharedPtr> volGeoms;
boost::unordered_map<int, EdgeSharedPtr> edgeCopies;
boost::unordered_map<int, FaceSharedPtr> faceCopies;
// Decide on distribution of points to use for each shape type based on the
// input we've been supplied.
......@@ -127,7 +132,7 @@ void Mesh::MakeOrder(int order,
pTypes[LibUtilities::eTriangle] = LibUtilities::eNodalTriElec;
pTypes[LibUtilities::eQuadrilateral] =
LibUtilities::eGaussLobattoLegendre;
pTypes[LibUtilities::ePrism] = LibUtilities::eNodalPrismElec;
pTypes[LibUtilities::ePrism] = LibUtilities::eNodalPrismElec;
pTypes[LibUtilities::eTetrahedron] = LibUtilities::eNodalTetElec;
pTypes[LibUtilities::eHexahedron] = LibUtilities::eGaussLobattoLegendre;
}
......@@ -136,32 +141,20 @@ void Mesh::MakeOrder(int order,
ASSERTL1(false, "Mesh::MakeOrder does not support this points type.");
}
// Begin by generating Nektar++ geometry objects for edges, faces and
// elements so that we don't affect any neighbouring elements in the mesh as
// Begin by coping mesh objects for edges, faces
// so that we don't affect any neighbouring elements in the mesh as
// we process each element.
for(eit = m_edgeSet.begin(); eit != m_edgeSet.end(); eit++)
{
SpatialDomains::Geometry1DSharedPtr geom =
(*eit)->GetGeom(m_spaceDim);
geom->FillGeom();
edgeGeoms[(*eit)->m_id] = geom;
}
for(fit = m_faceSet.begin(); fit != m_faceSet.end(); fit++)
// at the same time we delete the curvature from the original edge
for (eit = m_edgeSet.begin(); eit != m_edgeSet.end(); eit++)
{
SpatialDomains::Geometry2DSharedPtr geom =
(*fit)->GetGeom(m_spaceDim);
geom->FillGeom();
faceGeoms[(*fit)->m_id] = geom;
edgeCopies[(*eit)->m_id] = EdgeSharedPtr(new Edge(*(*eit)));
(*eit)->m_edgeNodes.clear();
}
for(int i = 0; i < m_element[m_expDim].size(); i++)
for (fit = m_faceSet.begin(); fit != m_faceSet.end(); fit++)
{
ElementSharedPtr el = m_element[m_expDim][i];
SpatialDomains::GeometrySharedPtr geom =
el->GetGeom(m_spaceDim);
geom->FillGeom();
volGeoms[el->GetId()] = geom;
faceCopies[(*fit)->m_id] = FaceSharedPtr(new Face(*(*fit)));
(*fit)->m_faceNodes.clear();
}
boost::unordered_set<int> processedEdges, processedFaces, processedVolumes;
......@@ -176,8 +169,8 @@ void Mesh::MakeOrder(int order,
{
if (m_verbose)
{
LibUtilities::PrintProgressbar(
ct, m_edgeSet.size(), "MakeOrder: Edges: ");
LibUtilities::PrintProgressbar(ct, m_edgeSet.size(),
"MakeOrder: Edges: ");
}
int edgeId = (*eit)->m_id;
......@@ -186,8 +179,12 @@ void Mesh::MakeOrder(int order,
continue;
}
(*eit)->MakeOrder(order, edgeGeoms[edgeId],
pTypes[LibUtilities::eSegment], m_spaceDim, id);
EdgeSharedPtr cpEdge = edgeCopies[edgeId];
SpatialDomains::GeometrySharedPtr geom = cpEdge->GetGeom(m_spaceDim);
geom->FillGeom();
(*eit)->MakeOrder(order, geom, pTypes[LibUtilities::eSegment],
m_spaceDim, id);
processedEdges.insert(edgeId);
}
......@@ -198,8 +195,8 @@ void Mesh::MakeOrder(int order,
{
if (m_verbose)
{
LibUtilities::PrintProgressbar(
ct, m_faceSet.size(), "MakeOrder: Faces: ");
LibUtilities::PrintProgressbar(ct, m_faceSet.size(),
"MakeOrder: Faces: ");
}
int faceId = (*fit)->m_id;
......@@ -208,10 +205,14 @@ void Mesh::MakeOrder(int order,
continue;
}
LibUtilities::ShapeType type = (*fit)->m_vertexList.size() == 3 ?
LibUtilities::eTriangle : LibUtilities::eQuadrilateral;
(*fit)->MakeOrder(order, faceGeoms[faceId], pTypes[type], m_spaceDim,
id);
FaceSharedPtr cpFace = faceCopies[faceId];
SpatialDomains::GeometrySharedPtr geom = cpFace->GetGeom(m_spaceDim);
geom->FillGeom();
LibUtilities::ShapeType type = (*fit)->m_vertexList.size() == 3
? LibUtilities::eTriangle
: LibUtilities::eQuadrilateral;
(*fit)->MakeOrder(order, geom, pTypes[type], m_spaceDim, id);
processedFaces.insert(faceId);
}
......@@ -219,7 +220,7 @@ void Mesh::MakeOrder(int order,
for (int i = 0; i < m_element[1].size(); ++i)
{
ElementSharedPtr el = m_element[1][i];
EdgeSharedPtr edge = el->GetEdgeLink();
EdgeSharedPtr edge = el->GetEdgeLink();
if (!edge)
{
......@@ -235,7 +236,7 @@ void Mesh::MakeOrder(int order,
for (int i = 0; i < m_element[2].size(); ++i)
{
ElementSharedPtr el = m_element[2][i];
FaceSharedPtr face = el->GetFaceLink();
FaceSharedPtr face = el->GetFaceLink();
if (!face)
{
......@@ -256,9 +257,10 @@ void Mesh::MakeOrder(int order,
{
LibUtilities::PrintProgressbar(i, nElmt, "MakeOrder: Elements: ");
}
ElementSharedPtr el = m_element[m_expDim][i];
el->MakeOrder(order, volGeoms[el->GetId()], pTypes[el->GetConf().m_e],
m_spaceDim, id);
ElementSharedPtr el = m_element[m_expDim][i];
SpatialDomains::GeometrySharedPtr geom = el->GetGeom(m_spaceDim);
geom->FillGeom();
el->MakeOrder(order, geom, pTypes[el->GetConf().m_e], m_spaceDim, id);
}
if (m_verbose)
......@@ -266,6 +268,5 @@ void Mesh::MakeOrder(int order,
cout << endl;
}
}
}
}
......@@ -959,8 +959,8 @@ void Octree::CompileSourcePointList()
// these are the acutal number of sample points in each parametric
// direction
int nu = ceil(DeltaU / m_minDelta) * 2;
int nv = ceil(DeltaV / m_minDelta) * 2;
int nu = ceil(DeltaU / m_minDelta) * 40 * 2;
int nv = ceil(DeltaV / m_minDelta) * 40 * 2;
for (int j = 0; j < nu; j++)
{
......
This diff is collapsed.
......@@ -66,7 +66,7 @@ private:
m_nacadomain, m_periodic, m_adjustment;
bool m_makeBL, m_surfopti, m_varopti, m_refine, m_woct, m_2D, m_splitBL,
m_naca, m_adjust, m_adjustall;
m_naca, m_adjust, m_adjustall, m_manifold;
};
}
......
......@@ -7,9 +7,9 @@
</INFORMATION>
<PARAMETERS>
<P PARAM="MinDelta" VALUE="0.003" />
<P PARAM="MinDelta" VALUE="0.03" />
<P PARAM="MaxDelta" VALUE="0.2" />
<P PARAM="EPS" VALUE="0.05" />
<P PARAM="EPS" VALUE="0.5" />
<P PARAM="Order" VALUE="4" />
......
......@@ -7,9 +7,9 @@
</INFORMATION>
<PARAMETERS>
<P PARAM="MinDelta" VALUE="0.012" />
<P PARAM="MinDelta" VALUE="0.02" />
<P PARAM="MaxDelta" VALUE="0.5" />
<P PARAM="EPS" VALUE="0.005" />
<P PARAM="EPS" VALUE="0.05" />
<P PARAM="Order" VALUE="4" />
......
......@@ -7,9 +7,9 @@
</INFORMATION>
<PARAMETERS>
<P PARAM="MinDelta" VALUE="0.01" />
<P PARAM="MinDelta" VALUE="0.05" />
<P PARAM="MaxDelta" VALUE="0.2" />
<P PARAM="EPS" VALUE="0.01" />
<P PARAM="EPS" VALUE="0.03" />
<P PARAM="Order" VALUE="4" />
</PARAMETERS>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment