Path: blob/devel/ElmerGUI/netgen/libsrc/meshing/boundarylayer.cpp
3206 views
#include <mystdlib.h>1#include "meshing.hpp"23namespace netgen4{56void InsertVirtualBoundaryLayer (Mesh & mesh)7{8cout << "Insert virt. b.l." << endl;910int surfid;1112cout << "Boundary Nr:";13cin >> surfid;1415int i, j;16int np = mesh.GetNP();1718cout << "Old NP: " << mesh.GetNP() << endl;19cout << "Trigs: " << mesh.GetNSE() << endl;2021BitArray bndnodes(np);22ARRAY<int> mapto(np);2324bndnodes.Clear();25for (i = 1; i <= mesh.GetNSeg(); i++)26{27int snr = mesh.LineSegment(i).edgenr;28cout << "snr = " << snr << endl;29if (snr == surfid)30{31bndnodes.Set (mesh.LineSegment(i).p1);32bndnodes.Set (mesh.LineSegment(i).p2);33}34}35for (i = 1; i <= mesh.GetNSeg(); i++)36{37int snr = mesh.LineSegment(i).edgenr;38if (snr != surfid)39{40bndnodes.Clear (mesh.LineSegment(i).p1);41bndnodes.Clear (mesh.LineSegment(i).p2);42}43}4445for (i = 1; i <= np; i++)46{47if (bndnodes.Test(i))48mapto.Elem(i) = mesh.AddPoint (mesh.Point (i));49else50mapto.Elem(i) = 0;51}5253for (i = 1; i <= mesh.GetNSE(); i++)54{55Element2d & el = mesh.SurfaceElement(i);56for (j = 1; j <= el.GetNP(); j++)57if (mapto.Get(el.PNum(j)))58el.PNum(j) = mapto.Get(el.PNum(j));59}606162int nq = 0;63for (i = 1; i <= mesh.GetNSeg(); i++)64{65int snr = mesh.LineSegment(i).edgenr;66if (snr == surfid)67{68int p1 = mesh.LineSegment(i).p1;69int p2 = mesh.LineSegment(i).p2;70int p3 = mapto.Get (p1);71if (!p3) p3 = p1;72int p4 = mapto.Get (p2);73if (!p4) p4 = p2;7475Element2d el(QUAD);76el.PNum(1) = p1;77el.PNum(2) = p2;78el.PNum(3) = p3;79el.PNum(4) = p4;80el.SetIndex (2);81mesh.AddSurfaceElement (el);82nq++;83}84}8586cout << "New NP: " << mesh.GetNP() << endl;87cout << "Quads: " << nq << endl;88}8990}91929394