From e5bb1298d2791c951dee28904e991279c551cc0c Mon Sep 17 00:00:00 2001 From: Michael Neunteufel Date: Mon, 6 May 2019 10:30:19 +0200 Subject: [PATCH 01/10] add only segments if they are real bbnd elements for .unv files --- libsrc/interface/readuser.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/libsrc/interface/readuser.cpp b/libsrc/interface/readuser.cpp index 9eef25ca..9273c642 100644 --- a/libsrc/interface/readuser.cpp +++ b/libsrc/interface/readuser.cpp @@ -99,6 +99,7 @@ namespace netgen // map from unv element nr to our element number + an index if it is vol (0), bnd(1), ... std::map> element_map; + Array tmp_segments; while (in.good()) { in >> reco; @@ -155,7 +156,9 @@ namespace netgen el[0] = nodes[0]; el[1] = nodes[2]; 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); break; } @@ -229,7 +232,6 @@ namespace netgen in >> hi >> index >> hi >> hi; int codim = get<1>(element_map[index]); - // use first element to determine if boundary or volume switch (codim) @@ -257,7 +259,9 @@ namespace netgen ednr = mesh.AddEdgeDescriptor(ed); mesh.SetCD2Name(bcpr, name); string * bcname = new string(name); - mesh.LineSegment(get<0>(element_map[index])).SetBCName(bcname); + auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); + mesh.LineSegment(nr+1).SetBCName(bcname); + mesh.LineSegment(nr+1).edgenr = ednr+1; break; } default: @@ -278,7 +282,12 @@ namespace netgen mesh.SurfaceElement(get<0>(element_map[index])).SetIndex(fdnr); break; case 2: - mesh.LineSegment(get<0>(element_map[index])).edgenr = ednr+1; + { + if (i==0) + continue; + auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); + mesh.LineSegment(nr+1).edgenr = ednr+1; + } break; default: break; From 7bb3698043a70026e9578830f1209b237fb65008 Mon Sep 17 00:00:00 2001 From: Michael Neunteufel Date: Mon, 6 May 2019 11:01:54 +0200 Subject: [PATCH 02/10] avoid memory leak and cleanup --- libsrc/interface/readuser.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libsrc/interface/readuser.cpp b/libsrc/interface/readuser.cpp index 9273c642..9b9c0a2b 100644 --- a/libsrc/interface/readuser.cpp +++ b/libsrc/interface/readuser.cpp @@ -99,7 +99,7 @@ namespace netgen // map from unv element nr to our element number + an index if it is vol (0), bnd(1), ... std::map> element_map; - Array tmp_segments; + Array tmp_segments; while (in.good()) { in >> reco; @@ -258,9 +258,8 @@ namespace netgen ed.SetSurfNr(0,bcpr);//? ednr = mesh.AddEdgeDescriptor(ed); mesh.SetCD2Name(bcpr, name); - string * bcname = new string(name); auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); - mesh.LineSegment(nr+1).SetBCName(bcname); + mesh.LineSegment(nr+1).SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names())); mesh.LineSegment(nr+1).edgenr = ednr+1; break; } @@ -283,10 +282,9 @@ namespace netgen break; case 2: { - if (i==0) - continue; auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); mesh.LineSegment(nr+1).edgenr = ednr+1; + mesh.LineSegment(nr+1).SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names())); } break; default: From 41d47e038bfde203f4b883c6d332f22a46af40fd Mon Sep 17 00:00:00 2001 From: Michael Neunteufel Date: Mon, 6 May 2019 14:59:18 +0200 Subject: [PATCH 03/10] use mesh[nr] --- libsrc/interface/readuser.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/interface/readuser.cpp b/libsrc/interface/readuser.cpp index 9b9c0a2b..692eb257 100644 --- a/libsrc/interface/readuser.cpp +++ b/libsrc/interface/readuser.cpp @@ -259,8 +259,8 @@ namespace netgen ednr = mesh.AddEdgeDescriptor(ed); mesh.SetCD2Name(bcpr, name); auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); - mesh.LineSegment(nr+1).SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names())); - mesh.LineSegment(nr+1).edgenr = ednr+1; + mesh[nr].SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names())); + mesh[nr].edgenr = ednr+1; break; } default: @@ -283,8 +283,8 @@ namespace netgen case 2: { auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); - mesh.LineSegment(nr+1).edgenr = ednr+1; - mesh.LineSegment(nr+1).SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names())); + mesh[nr].edgenr = ednr+1; + mesh[nr].SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names())); } break; default: From ed5779df054a4e17c7bd3457575ec09ce2f6e292 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Mon, 13 May 2019 08:43:54 +0200 Subject: [PATCH 04/10] define curve from Python for 2D geometry (e.g. airfoil profile) --- libsrc/geom2d/python_geom2d.cpp | 41 +++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/libsrc/geom2d/python_geom2d.cpp b/libsrc/geom2d/python_geom2d.cpp index f2b20127..fbfa22d9 100644 --- a/libsrc/geom2d/python_geom2d.cpp +++ b/libsrc/geom2d/python_geom2d.cpp @@ -138,6 +138,47 @@ DLL_HEADER void ExportGeom2d(py::module &m) self.AppendSegment(seg); }), 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> points; + for (int i = 0; i <= n; i++) + { + double t = double(i)/n; + py::tuple xy = func(t); + double x = py::cast(xy[0]); + double y = py::cast(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(bc).check()) + spex->bc = py::extract(bc)(); + else if (py::extract(bc).check()) + { + string bcname = py::extract(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("SetDomainMaxH", &SplineGeometry2d::SetDomainMaxh) From a627a0c9b3586e6d57a09458e3fa1f23058ba387 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Mon, 13 May 2019 14:49:25 +0200 Subject: [PATCH 05/10] Include ngcore.hpp in nginterface(_v2).hpp Currently both interface files depend on ngcore but do not include it. --- libsrc/include/nginterface.h | 2 ++ libsrc/include/nginterface_v2.hpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/libsrc/include/nginterface.h b/libsrc/include/nginterface.h index 752228f9..3398d072 100644 --- a/libsrc/include/nginterface.h +++ b/libsrc/include/nginterface.h @@ -11,6 +11,8 @@ /* Date: 20. Nov. 99 */ /**************************************************************************/ +#include "../core/ngcore.hpp" + /* Application program interface to Netgen diff --git a/libsrc/include/nginterface_v2.hpp b/libsrc/include/nginterface_v2.hpp index 24b9b3e9..b760a9e7 100644 --- a/libsrc/include/nginterface_v2.hpp +++ b/libsrc/include/nginterface_v2.hpp @@ -8,6 +8,8 @@ /* Date: May 09 */ /**************************************************************************/ +#include "../core/ngcore.hpp" + /* C++ interface to Netgen */ From fd1842fde61d27d739d334d958f997e26ec255b9 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 13 May 2019 14:54:37 +0200 Subject: [PATCH 06/10] add msg level to cout of fnfreader --- libsrc/interface/read_fnf_mesh.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libsrc/interface/read_fnf_mesh.cpp b/libsrc/interface/read_fnf_mesh.cpp index d1cff5fc..3d9f0802 100644 --- a/libsrc/interface/read_fnf_mesh.cpp +++ b/libsrc/interface/read_fnf_mesh.cpp @@ -94,7 +94,7 @@ namespace netgen char ch; string name; sbuf >> ch >> name; - cout << "Title: " << name << endl; + cout << IM(3) << "Title: " << name << endl; } else if (token == "%STATISTICS") { @@ -106,7 +106,7 @@ namespace netgen } else { - cout << "SECTION HEADER, unknown field: " << buf << endl; + cout << IM(1) << "SECTION HEADER, unknown field: " << buf << endl; } } } @@ -142,7 +142,7 @@ namespace netgen } else { - cout << "SECTION ELEM_TYPE, unknown field: " << buf << endl; + cout << IM(1) << "SECTION ELEM_TYPE, unknown field: " << buf << endl; } } } @@ -219,7 +219,7 @@ namespace netgen } else { - cout << "SECTION MATERIALS, unknown field: " << buf << endl; + cout << IM(1) << "SECTION MATERIALS, unknown field: " << buf << endl; } } } @@ -271,7 +271,7 @@ namespace netgen } else { - cout << "SECTION MESH, unknown: " << buf << endl; + cout << IM(1) << "SECTION MESH, unknown: " << buf << endl; } } } @@ -349,7 +349,7 @@ namespace netgen } else { - cout << "SECTION MESH, unknown: " << buf << endl; + cout << IM(1) << "SECTION MESH, unknown: " << buf << endl; } } } @@ -378,10 +378,10 @@ namespace netgen sbuf >> lt->id >> def >> ch >> lt->name >> lt->placement >> lt->valuetype; if (lt->name == "DISPLACEMENT") - cout << "loadtype DISPLACEMENT found" << endl; + cout << IM(3) << "loadtype DISPLACEMENT found" << endl; if (lt->placement != "FACE" && lt->placement != "EDGE" && lt->placement != "NODE") - cout << "unsupported placement " << lt->placement << endl; + cout << IM(1) << "unsupported placement " << lt->placement << endl; loadtypes.Append (lt); } @@ -415,24 +415,24 @@ namespace netgen if (loadtypes[i]->placement == "FACE" && loadtypes[i]->name == "DISPLACEMENT") { mesh.SetUserData ("CONSTRAINT_DISP_FACE", loadtypes[i]->places); - cout << "constrained faces: " << loadtypes[i]->places << endl; + cout << IM(3) << "constrained faces: " << loadtypes[i]->places << endl; } if (loadtypes[i]->placement == "EDGE" && loadtypes[i]->name == "DISPLACEMENT") { mesh.SetUserData ("CONSTRAINT_DISP_EDGE", loadtypes[i]->places); - cout << "constrained edges: " << loadtypes[i]->places << endl; + cout << IM(3) << "constrained edges: " << loadtypes[i]->places << endl; } if (loadtypes[i]->placement == "NODE" && loadtypes[i]->name == "DISPLACEMENT") { mesh.SetUserData ("CONSTRAINT_DISP_NODE", loadtypes[i]->places); - cout << "constrained nodes: " << loadtypes[i]->places << endl; + cout << IM(3) << "constrained nodes: " << loadtypes[i]->places << endl; } } break; } else { - cout << "SECTION LOADS, unknown field: " << buf << endl; + cout << IM(1) << "SECTION LOADS, unknown field: " << buf << endl; } } } @@ -441,11 +441,11 @@ namespace netgen else { - cout << "unknown section " << token << endl; + cout << IM(1) << "unknown section " << token << endl; } } else - cout << "parse line: (" << buf << ")" << endl; + cout << IM(3) << "parse line: (" << buf << ")" << endl; } } } From 953c5bb57c1531466e86d533d2e83fe4d08dbc73 Mon Sep 17 00:00:00 2001 From: Christopher Lackner Date: Mon, 13 May 2019 18:17:53 +0200 Subject: [PATCH 07/10] fix printmessage instead of IM --- libsrc/interface/read_fnf_mesh.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/libsrc/interface/read_fnf_mesh.cpp b/libsrc/interface/read_fnf_mesh.cpp index 3d9f0802..a252fcdd 100644 --- a/libsrc/interface/read_fnf_mesh.cpp +++ b/libsrc/interface/read_fnf_mesh.cpp @@ -94,7 +94,7 @@ namespace netgen char ch; string name; sbuf >> ch >> name; - cout << IM(3) << "Title: " << name << endl; + PrintMessage(3, "Title: ", name); } else if (token == "%STATISTICS") { @@ -106,7 +106,7 @@ namespace netgen } else { - cout << IM(1) << "SECTION HEADER, unknown field: " << buf << endl; + PrintMessage(1, "SECTION HEADER, unknown field: ",buf); } } } @@ -142,7 +142,7 @@ namespace netgen } else { - cout << IM(1) << "SECTION ELEM_TYPE, unknown field: " << buf << endl; + PrintMessage(1, "SECTION ELEM_TYPE, unknown field: ", buf); } } } @@ -219,7 +219,7 @@ namespace netgen } else { - cout << IM(1) << "SECTION MATERIALS, unknown field: " << buf << endl; + PrintMessage(1, "SECTION MATERIALS, unknown field: ", buf); } } } @@ -271,7 +271,7 @@ namespace netgen } else { - cout << IM(1) << "SECTION MESH, unknown: " << buf << endl; + PrintMessage(1, "SECTION MESH, unknown: ", buf); } } } @@ -349,7 +349,7 @@ namespace netgen } else { - cout << IM(1) << "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; if (lt->name == "DISPLACEMENT") - cout << IM(3) << "loadtype DISPLACEMENT found" << endl; + PrintMessage(3, "loadtype DISPLACEMENT found"); if (lt->placement != "FACE" && lt->placement != "EDGE" && lt->placement != "NODE") - cout << IM(1) << "unsupported placement " << lt->placement << endl; + PrintMessage(1, "unsupported placement ", lt->placement); loadtypes.Append (lt); } @@ -412,27 +412,29 @@ namespace netgen { for (int i = 0; i < loadtypes.Size(); i++) { + stringstream str; + str << loadtypes[i]->places; if (loadtypes[i]->placement == "FACE" && loadtypes[i]->name == "DISPLACEMENT") { mesh.SetUserData ("CONSTRAINT_DISP_FACE", loadtypes[i]->places); - cout << IM(3) << "constrained faces: " << loadtypes[i]->places << endl; + PrintMessage(3, "constrained faces: ", str.str()); } if (loadtypes[i]->placement == "EDGE" && loadtypes[i]->name == "DISPLACEMENT") { mesh.SetUserData ("CONSTRAINT_DISP_EDGE", loadtypes[i]->places); - cout << IM(3) << "constrained edges: " << loadtypes[i]->places << endl; + PrintMessage(3,"constrained edges: ", str.str()); } if (loadtypes[i]->placement == "NODE" && loadtypes[i]->name == "DISPLACEMENT") { mesh.SetUserData ("CONSTRAINT_DISP_NODE", loadtypes[i]->places); - cout << IM(3) << "constrained nodes: " << loadtypes[i]->places << endl; + PrintMessage(3, "constrained nodes: ", str.str()); } } break; } else { - cout << IM(1) << "SECTION LOADS, unknown field: " << buf << endl; + PrintMessage(1, "SECTION LOADS, unknown field: ", buf); } } } @@ -441,11 +443,11 @@ namespace netgen else { - cout << IM(1) << "unknown section " << token << endl; + PrintMessage(1, "unknown section ", token); } } else - cout << IM(3) << "parse line: (" << buf << ")" << endl; + PrintMessage(3, "parse line: (", buf, ")"); } } } From aeea67bc093810583677ceb4b1075b69547c106c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Sch=C3=B6berl?= Date: Thu, 16 May 2019 09:36:32 +0200 Subject: [PATCH 08/10] fix clipping plane isolines --- libsrc/visualization/vssolution.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libsrc/visualization/vssolution.cpp b/libsrc/visualization/vssolution.cpp index ed99210e..af054509 100644 --- a/libsrc/visualization/vssolution.cpp +++ b/libsrc/visualization/vssolution.cpp @@ -1101,7 +1101,7 @@ namespace netgen glEndList (); if (clipplane_isolinelist) glDeleteLists (clipplane_isolinelist, 1); - + if (vispar.clipping.enable && clipsolution == 1 && sol) { clipplane_isolinelist = glGenLists (1); @@ -1113,7 +1113,8 @@ namespace netgen bool drawelem; glNormal3d (-clipplane[0], -clipplane[1], -clipplane[2]); - + glBegin (GL_LINES); + if (numisolines) for (int i = 0; i < cpt.Size(); i++) { @@ -1129,13 +1130,11 @@ namespace netgen DrawIsoLines (pts[trig.points[0].pnr].p, pts[trig.points[1].pnr].p, pts[trig.points[2].pnr].p, - // trig.points[1].p, - // trig.points[2].p, vali[0], vali[1], vali[2]); } + glEnd(); glEndList (); } - glEnd(); } clipplanetimestamp = max2 (vispar.clipping.timestamp, solutiontimestamp); From 6e53e3c3e8b2f17a28d36c1080a81825c5337955 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 17 May 2019 13:10:37 +0200 Subject: [PATCH 09/10] [cmake] Change link to metis sources --- cmake/external_projects/metis.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmake/external_projects/metis.cmake b/cmake/external_projects/metis.cmake index 0ca86058..4b1ba23d 100644 --- a/cmake/external_projects/metis.cmake +++ b/cmake/external_projects/metis.cmake @@ -3,8 +3,10 @@ set(METIS_DIR ${CMAKE_CURRENT_BINARY_DIR}/dependencies/metis) ExternalProject_Add(project_metis PREFIX ${CMAKE_CURRENT_BINARY_DIR}/dependencies - URL "http://ftp.mcs.anl.gov/pub/petsc/externalpackages/metis-5.1.0-p3.tar.gz" - URL_MD5 09d2d771c63a2efb3499882688100088 + #URL "http://ftp.mcs.anl.gov/pub/petsc/externalpackages/metis-5.1.0-p3.tar.gz" + #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 CMAKE_ARGS -DGKLIB_PATH=${METIS_SRC_DIR}/GKlib From 7a385571c38f331e5b7ae0cc468e7df0957aad16 Mon Sep 17 00:00:00 2001 From: Matthias Hochsteger Date: Fri, 17 May 2019 13:23:39 +0200 Subject: [PATCH 10/10] Move test_build_ngsolve to deploy stage --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7d1aaf30..205d5074 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -122,7 +122,7 @@ test_ubuntu_mpi: test_build_ngsolve: <<: *ubuntu allow_failure: true - stage: test + stage: deploy script: - >- docker run