mirror of
https://github.com/NGSolve/netgen.git
synced 2025-03-03 16:35:39 +05:00
Merge branch 'master' into mpi_fixes
This commit is contained in:
commit
16a10fae88
@ -122,7 +122,7 @@ test_ubuntu_mpi:
|
|||||||
test_build_ngsolve:
|
test_build_ngsolve:
|
||||||
<<: *ubuntu
|
<<: *ubuntu
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
stage: test
|
stage: deploy
|
||||||
script:
|
script:
|
||||||
- >-
|
- >-
|
||||||
docker run
|
docker run
|
||||||
|
@ -3,8 +3,10 @@ set(METIS_DIR ${CMAKE_CURRENT_BINARY_DIR}/dependencies/metis)
|
|||||||
|
|
||||||
ExternalProject_Add(project_metis
|
ExternalProject_Add(project_metis
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/dependencies
|
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/dependencies
|
||||||
URL "http://ftp.mcs.anl.gov/pub/petsc/externalpackages/metis-5.1.0-p3.tar.gz"
|
#URL "http://ftp.mcs.anl.gov/pub/petsc/externalpackages/metis-5.1.0-p3.tar.gz"
|
||||||
URL_MD5 09d2d771c63a2efb3499882688100088
|
#URL_MD5 09d2d771c63a2efb3499882688100088
|
||||||
|
URL http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz
|
||||||
|
URL_MD5 5465e67079419a69e0116de24fce58fe
|
||||||
DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies
|
DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_dependencies
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
-DGKLIB_PATH=${METIS_SRC_DIR}/GKlib
|
-DGKLIB_PATH=${METIS_SRC_DIR}/GKlib
|
||||||
|
@ -138,6 +138,47 @@ DLL_HEADER void ExportGeom2d(py::module &m)
|
|||||||
self.AppendSegment(seg);
|
self.AppendSegment(seg);
|
||||||
}), py::arg("point_indices"), py::arg("leftdomain") = 1, py::arg("rightdomain") = py::int_(0))
|
}), py::arg("point_indices"), py::arg("leftdomain") = 1, py::arg("rightdomain") = py::int_(0))
|
||||||
|
|
||||||
|
|
||||||
|
.def("AddCurve",
|
||||||
|
[] (SplineGeometry2d & self, py::object func,
|
||||||
|
int leftdomain, int rightdomain, py::object bc, double maxh)
|
||||||
|
{
|
||||||
|
int n = 1000;
|
||||||
|
Array<Point<2>> points;
|
||||||
|
for (int i = 0; i <= n; i++)
|
||||||
|
{
|
||||||
|
double t = double(i)/n;
|
||||||
|
py::tuple xy = func(t);
|
||||||
|
double x = py::cast<double>(xy[0]);
|
||||||
|
double y = py::cast<double>(xy[1]);
|
||||||
|
points.Append (Point<2>(x,y));
|
||||||
|
}
|
||||||
|
auto spline = new DiscretePointsSeg<2> (points);
|
||||||
|
SplineSegExt * spex = new SplineSegExt (*spline);
|
||||||
|
|
||||||
|
spex -> leftdom = leftdomain;
|
||||||
|
spex -> rightdom = rightdomain;
|
||||||
|
spex->hmax = maxh;
|
||||||
|
spex->reffak = 1;
|
||||||
|
spex->copyfrom = -1;
|
||||||
|
|
||||||
|
if (py::extract<int>(bc).check())
|
||||||
|
spex->bc = py::extract<int>(bc)();
|
||||||
|
else if (py::extract<string>(bc).check())
|
||||||
|
{
|
||||||
|
string bcname = py::extract<string>(bc)();
|
||||||
|
spex->bc = self.GetNSplines()+1;
|
||||||
|
self.SetBCName(spex->bc, bcname);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
spex->bc = self.GetNSplines()+1;
|
||||||
|
|
||||||
|
|
||||||
|
self.AppendSegment (spex);
|
||||||
|
}, py::arg("func"), py::arg("leftdomain") = 1, py::arg("rightdomain") = py::int_(0),
|
||||||
|
py::arg("bc")=NGDummyArgument(), py::arg("maxh")=1e99,
|
||||||
|
"Curve is given as parametrization on the interval [0,1]")
|
||||||
|
|
||||||
.def("SetMaterial", &SplineGeometry2d::SetMaterial)
|
.def("SetMaterial", &SplineGeometry2d::SetMaterial)
|
||||||
.def("SetDomainMaxH", &SplineGeometry2d::SetDomainMaxh)
|
.def("SetDomainMaxH", &SplineGeometry2d::SetDomainMaxh)
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
/* Date: 20. Nov. 99 */
|
/* Date: 20. Nov. 99 */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
|
#include "../core/ngcore.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Application program interface to Netgen
|
Application program interface to Netgen
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
/* Date: May 09 */
|
/* Date: May 09 */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
|
#include "../core/ngcore.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
C++ interface to Netgen
|
C++ interface to Netgen
|
||||||
*/
|
*/
|
||||||
|
@ -94,7 +94,7 @@ namespace netgen
|
|||||||
char ch;
|
char ch;
|
||||||
string name;
|
string name;
|
||||||
sbuf >> ch >> name;
|
sbuf >> ch >> name;
|
||||||
cout << "Title: " << name << endl;
|
PrintMessage(3, "Title: ", name);
|
||||||
}
|
}
|
||||||
else if (token == "%STATISTICS")
|
else if (token == "%STATISTICS")
|
||||||
{
|
{
|
||||||
@ -106,7 +106,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "SECTION HEADER, unknown field: " << buf << endl;
|
PrintMessage(1, "SECTION HEADER, unknown field: ",buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "SECTION ELEM_TYPE, unknown field: " << buf << endl;
|
PrintMessage(1, "SECTION ELEM_TYPE, unknown field: ", buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,7 +219,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "SECTION MATERIALS, unknown field: " << buf << endl;
|
PrintMessage(1, "SECTION MATERIALS, unknown field: ", buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,7 +271,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "SECTION MESH, unknown: " << buf << endl;
|
PrintMessage(1, "SECTION MESH, unknown: ", buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -349,7 +349,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "SECTION MESH, unknown: " << buf << endl;
|
PrintMessage(1, "SECTION MESH, unknown: ", buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -378,10 +378,10 @@ namespace netgen
|
|||||||
sbuf >> lt->id >> def >> ch >> lt->name >> lt->placement >> lt->valuetype;
|
sbuf >> lt->id >> def >> ch >> lt->name >> lt->placement >> lt->valuetype;
|
||||||
|
|
||||||
if (lt->name == "DISPLACEMENT")
|
if (lt->name == "DISPLACEMENT")
|
||||||
cout << "loadtype DISPLACEMENT found" << endl;
|
PrintMessage(3, "loadtype DISPLACEMENT found");
|
||||||
|
|
||||||
if (lt->placement != "FACE" && lt->placement != "EDGE" && lt->placement != "NODE")
|
if (lt->placement != "FACE" && lt->placement != "EDGE" && lt->placement != "NODE")
|
||||||
cout << "unsupported placement " << lt->placement << endl;
|
PrintMessage(1, "unsupported placement ", lt->placement);
|
||||||
|
|
||||||
loadtypes.Append (lt);
|
loadtypes.Append (lt);
|
||||||
}
|
}
|
||||||
@ -412,27 +412,29 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < loadtypes.Size(); i++)
|
for (int i = 0; i < loadtypes.Size(); i++)
|
||||||
{
|
{
|
||||||
|
stringstream str;
|
||||||
|
str << loadtypes[i]->places;
|
||||||
if (loadtypes[i]->placement == "FACE" && loadtypes[i]->name == "DISPLACEMENT")
|
if (loadtypes[i]->placement == "FACE" && loadtypes[i]->name == "DISPLACEMENT")
|
||||||
{
|
{
|
||||||
mesh.SetUserData ("CONSTRAINT_DISP_FACE", loadtypes[i]->places);
|
mesh.SetUserData ("CONSTRAINT_DISP_FACE", loadtypes[i]->places);
|
||||||
cout << "constrained faces: " << loadtypes[i]->places << endl;
|
PrintMessage(3, "constrained faces: ", str.str());
|
||||||
}
|
}
|
||||||
if (loadtypes[i]->placement == "EDGE" && loadtypes[i]->name == "DISPLACEMENT")
|
if (loadtypes[i]->placement == "EDGE" && loadtypes[i]->name == "DISPLACEMENT")
|
||||||
{
|
{
|
||||||
mesh.SetUserData ("CONSTRAINT_DISP_EDGE", loadtypes[i]->places);
|
mesh.SetUserData ("CONSTRAINT_DISP_EDGE", loadtypes[i]->places);
|
||||||
cout << "constrained edges: " << loadtypes[i]->places << endl;
|
PrintMessage(3,"constrained edges: ", str.str());
|
||||||
}
|
}
|
||||||
if (loadtypes[i]->placement == "NODE" && loadtypes[i]->name == "DISPLACEMENT")
|
if (loadtypes[i]->placement == "NODE" && loadtypes[i]->name == "DISPLACEMENT")
|
||||||
{
|
{
|
||||||
mesh.SetUserData ("CONSTRAINT_DISP_NODE", loadtypes[i]->places);
|
mesh.SetUserData ("CONSTRAINT_DISP_NODE", loadtypes[i]->places);
|
||||||
cout << "constrained nodes: " << loadtypes[i]->places << endl;
|
PrintMessage(3, "constrained nodes: ", str.str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "SECTION LOADS, unknown field: " << buf << endl;
|
PrintMessage(1, "SECTION LOADS, unknown field: ", buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -441,11 +443,11 @@ namespace netgen
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "unknown section " << token << endl;
|
PrintMessage(1, "unknown section ", token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cout << "parse line: (" << buf << ")" << endl;
|
PrintMessage(3, "parse line: (", buf, ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ namespace netgen
|
|||||||
// map from unv element nr to our element number + an index if it is vol (0), bnd(1), ...
|
// map from unv element nr to our element number + an index if it is vol (0), bnd(1), ...
|
||||||
std::map<size_t, std::tuple<size_t, int>> element_map;
|
std::map<size_t, std::tuple<size_t, int>> element_map;
|
||||||
|
|
||||||
|
Array<Segment> tmp_segments;
|
||||||
while (in.good())
|
while (in.good())
|
||||||
{
|
{
|
||||||
in >> reco;
|
in >> reco;
|
||||||
@ -155,7 +156,9 @@ namespace netgen
|
|||||||
el[0] = nodes[0];
|
el[0] = nodes[0];
|
||||||
el[1] = nodes[2];
|
el[1] = nodes[2];
|
||||||
el[2] = nodes[1];
|
el[2] = nodes[1];
|
||||||
auto nr = mesh.AddSegment (el);
|
|
||||||
|
auto nr = tmp_segments.Size();
|
||||||
|
tmp_segments.Append(el);
|
||||||
element_map[label] = std::make_tuple(nr+1, 2);
|
element_map[label] = std::make_tuple(nr+1, 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -229,7 +232,6 @@ namespace netgen
|
|||||||
|
|
||||||
in >> hi >> index >> hi >> hi;
|
in >> hi >> index >> hi >> hi;
|
||||||
int codim = get<1>(element_map[index]);
|
int codim = get<1>(element_map[index]);
|
||||||
|
|
||||||
// use first element to determine if boundary or volume
|
// use first element to determine if boundary or volume
|
||||||
|
|
||||||
switch (codim)
|
switch (codim)
|
||||||
@ -256,8 +258,9 @@ namespace netgen
|
|||||||
ed.SetSurfNr(0,bcpr);//?
|
ed.SetSurfNr(0,bcpr);//?
|
||||||
ednr = mesh.AddEdgeDescriptor(ed);
|
ednr = mesh.AddEdgeDescriptor(ed);
|
||||||
mesh.SetCD2Name(bcpr, name);
|
mesh.SetCD2Name(bcpr, name);
|
||||||
string * bcname = new string(name);
|
auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]);
|
||||||
mesh.LineSegment(get<0>(element_map[index])).SetBCName(bcname);
|
mesh[nr].SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names()));
|
||||||
|
mesh[nr].edgenr = ednr+1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -278,7 +281,11 @@ namespace netgen
|
|||||||
mesh.SurfaceElement(get<0>(element_map[index])).SetIndex(fdnr);
|
mesh.SurfaceElement(get<0>(element_map[index])).SetIndex(fdnr);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mesh.LineSegment(get<0>(element_map[index])).edgenr = ednr+1;
|
{
|
||||||
|
auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]);
|
||||||
|
mesh[nr].edgenr = ednr+1;
|
||||||
|
mesh[nr].SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names()));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -1101,7 +1101,7 @@ namespace netgen
|
|||||||
glEndList ();
|
glEndList ();
|
||||||
|
|
||||||
if (clipplane_isolinelist) glDeleteLists (clipplane_isolinelist, 1);
|
if (clipplane_isolinelist) glDeleteLists (clipplane_isolinelist, 1);
|
||||||
|
|
||||||
if (vispar.clipping.enable && clipsolution == 1 && sol)
|
if (vispar.clipping.enable && clipsolution == 1 && sol)
|
||||||
{
|
{
|
||||||
clipplane_isolinelist = glGenLists (1);
|
clipplane_isolinelist = glGenLists (1);
|
||||||
@ -1113,7 +1113,8 @@ namespace netgen
|
|||||||
bool drawelem;
|
bool drawelem;
|
||||||
|
|
||||||
glNormal3d (-clipplane[0], -clipplane[1], -clipplane[2]);
|
glNormal3d (-clipplane[0], -clipplane[1], -clipplane[2]);
|
||||||
|
glBegin (GL_LINES);
|
||||||
|
|
||||||
if (numisolines)
|
if (numisolines)
|
||||||
for (int i = 0; i < cpt.Size(); i++)
|
for (int i = 0; i < cpt.Size(); i++)
|
||||||
{
|
{
|
||||||
@ -1129,13 +1130,11 @@ namespace netgen
|
|||||||
DrawIsoLines (pts[trig.points[0].pnr].p,
|
DrawIsoLines (pts[trig.points[0].pnr].p,
|
||||||
pts[trig.points[1].pnr].p,
|
pts[trig.points[1].pnr].p,
|
||||||
pts[trig.points[2].pnr].p,
|
pts[trig.points[2].pnr].p,
|
||||||
// trig.points[1].p,
|
|
||||||
// trig.points[2].p,
|
|
||||||
vali[0], vali[1], vali[2]);
|
vali[0], vali[1], vali[2]);
|
||||||
}
|
}
|
||||||
|
glEnd();
|
||||||
glEndList ();
|
glEndList ();
|
||||||
}
|
}
|
||||||
glEnd();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clipplanetimestamp = max2 (vispar.clipping.timestamp, solutiontimestamp);
|
clipplanetimestamp = max2 (vispar.clipping.timestamp, solutiontimestamp);
|
||||||
|
Loading…
Reference in New Issue
Block a user