Path: blob/devel/ElmerGUI/netgen/libsrc/interface/readuser.cpp
3206 views
//1// Read user dependent output file2//345#include <mystdlib.h>678#include <myadt.hpp>9#include <linalg.hpp>10#include <csg.hpp>11#include <meshing.hpp>1213namespace netgen14{15#include "writeuser.hpp"1617void ReadFile (Mesh & mesh,18const string & hfilename)19{20cout << "Read User File" << endl;2122const char * filename = hfilename.c_str();2324int i, j;2526char reco[100];27int np, nbe;28293031// ".surf" - mesh3233if ( (strlen (filename) > 5) &&34strcmp (&filename[strlen (filename)-5], ".surf") == 0 )3536{37cout << "Surface file" << endl;3839ifstream in (filename);4041in >> reco;42in >> np;43for (i = 1; i <= np; i++)44{45Point3d p;46in >> p.X() >> p.Y() >> p.Z();47mesh.AddPoint (p);48}4950mesh.ClearFaceDescriptors();51mesh.AddFaceDescriptor (FaceDescriptor(0,1,0,0));5253in >> nbe;54// int invert = globflags.GetDefineFlag ("invertsurfacemesh");55for (i = 1; i <= nbe; i++)56{57Element2d el;58int hi;5960el.SetIndex(1);6162// in >> hi;63for (j = 1; j <= 3; j++)64{65in >> el.PNum(j);66// el.PNum(j)++;67if (el.PNum(j) < PointIndex(1) ||68el.PNum(j) > PointIndex(np))69{70cerr << "Point Number " << el.PNum(j) << " out of range 1..."71<< np << endl;72return;73}74}7576/*77if (invert)78swap (el.PNum(2), el.PNum(3));79*/8081mesh.AddSurfaceElement (el);82}838485cout << "points: " << np << " faces: " << nbe << endl;86}878889909192// Universal mesh (AVL)93if ( (strlen (filename) > 4) &&94strcmp (&filename[strlen (filename)-4], ".unv") == 0 )95{96int i, j, k;9798double h;99char reco[100];100int np, nbe;101int invert;102103104ifstream in(filename);105106invert = 0; // globflags.GetDefineFlag ("invertsurfacemesh");107double scale = 1; // globflags.GetNumFlag ("scale", 1);108109mesh.ClearFaceDescriptors();110mesh.AddFaceDescriptor (FaceDescriptor(0,1,0,0));111112113while (in.good())114{115in >> reco;116if (strcmp (reco, "NODES") == 0)117{118cout << "nodes found" << endl;119for (j = 1; j <= 4; j++)120in >> reco; // read dummy121122while (1)123{124int pi, hi;125double x, y, z;126Point3d p;127128in >> pi;129if (pi == -1)130break;131132in >> hi >> hi >> hi;133in >> p.X() >> p.Y() >> p.Z();134135p.X() *= scale;136p.Y() *= scale;137p.Z() *= scale;138139140mesh.AddPoint (p);141}142}143144if (strcmp (reco, "ELEMENTS") == 0)145{146cout << "elements found" << endl;147for (j = 1; j <= 4; j++)148in >> reco; // read dummy149150while (1)151{152int hi;153in >> hi;154if (hi == -1) break;155for (j = 1; j <= 7; j++)156in >> hi;157158Element2d el;159el.SetIndex(1);160in >> el.PNum(1) >> el.PNum(2) >> el.PNum(3);161162if (invert)163swap (el.PNum(2), el.PNum(3));164mesh.AddSurfaceElement (el);165166for (j = 1; j <= 5; j++)167in >> hi;168}169}170}171172173Point3d pmin, pmax;174mesh.GetBox (pmin, pmax);175cout << "bounding-box = " << pmin << "-" << pmax << endl;176}177178179180// fepp format2d:181182if ( (strlen (filename) > 7) &&183strcmp (&filename[strlen (filename)-7], ".mesh2d") == 0 )184{185cout << "Reading FEPP2D Mesh" << endl;186187char buf[100];188int np, ne, nseg, i, j;189190ifstream in (filename);191192in >> buf;193194in >> nseg;195for (i = 1; i <= nseg; i++)196{197int bound, p1, p2;198in >> bound >> p1 >> p2;199// forget them200}201202in >> ne;203for (i = 1; i <= ne; i++)204{205int mat, nelp;206in >> mat >> nelp;207Element2d el (nelp == 3 ? TRIG : QUAD);208el.SetIndex (mat);209for (j = 1; j <= nelp; j++)210in >> el.PNum(j);211mesh.AddSurfaceElement (el);212}213214in >> np;215for (i = 1; i <= np; i++)216{217Point3d p(0,0,0);218in >> p.X() >> p.Y();219mesh.AddPoint (p);220}221}222223224else if ( (strlen (filename) > 5) &&225strcmp (&filename[strlen (filename)-5], ".mesh") == 0 )226{227cout << "Reading Neutral Format" << endl;228229int np, ne, nse, i, j;230231ifstream in (filename);232233in >> np;234235if (in.good())236{237// file starts with an integer238239for (i = 1; i <= np; i++)240{241Point3d p(0,0,0);242in >> p.X() >> p.Y() >> p.Z();243mesh.AddPoint (p);244}245246in >> ne;247for (i = 1; i <= ne; i++)248{249int mat;250in >> mat;251Element el (4);252el.SetIndex (mat);253for (j = 1; j <= 4; j++)254in >> el.PNum(j);255mesh.AddVolumeElement (el);256}257258mesh.AddFaceDescriptor (FaceDescriptor (1, 1, 0, 0));259260in >> nse;261for (i = 1; i <= nse; i++)262{263int mat, nelp;264in >> mat;265Element2d el (TRIG);266el.SetIndex (mat);267for (j = 1; j <= 3; j++)268in >> el.PNum(j);269mesh.AddSurfaceElement (el);270}271}272else273{274char buf[100];275in.clear();276do277{278in >> buf;279cout << "buf = " << buf << endl;280if (strcmp (buf, "points") == 0)281{282in >> np;283cout << "np = " << np << endl;284}285}286while (in.good());287}288}289290291if ( (strlen (filename) > 4) &&292strcmp (&filename[strlen (filename)-4], ".emt") == 0 )293{294ifstream inemt (filename);295296string pktfile = filename;297int len = strlen (filename);298pktfile[len-3] = 'p';299pktfile[len-2] = 'k';300pktfile[len-1] = 't';301cout << "pktfile = " << pktfile << endl;302303int np, nse, i;304int num, bcprop;305ifstream inpkt (pktfile.c_str());306inpkt >> np;307ARRAY<double> values(np);308for (i = 1; i <= np; i++)309{310Point3d p(0,0,0);311inpkt >> p.X() >> p.Y() >> p.Z()312>> bcprop >> values.Elem(i);313mesh.AddPoint (p);314}315316mesh.ClearFaceDescriptors();317mesh.AddFaceDescriptor (FaceDescriptor(0,1,0,0));318mesh.GetFaceDescriptor(1).SetBCProperty (1);319mesh.AddFaceDescriptor (FaceDescriptor(0,1,0,0));320mesh.GetFaceDescriptor(2).SetBCProperty (2);321mesh.AddFaceDescriptor (FaceDescriptor(0,1,0,0));322mesh.GetFaceDescriptor(3).SetBCProperty (3);323mesh.AddFaceDescriptor (FaceDescriptor(0,1,0,0));324mesh.GetFaceDescriptor(4).SetBCProperty (4);325mesh.AddFaceDescriptor (FaceDescriptor(0,1,0,0));326mesh.GetFaceDescriptor(5).SetBCProperty (5);327328int p1, p2, p3;329double value;330inemt >> nse;331for (i = 1; i <= nse; i++)332{333inemt >> p1 >> p2 >> p3 >> bcprop >> value;334335if (bcprop < 1 || bcprop > 4)336cerr << "bcprop out of range, bcprop = " << bcprop << endl;337p1++;338p2++;339p3++;340if (p1 < 1 || p1 > np || p2 < 1 || p2 > np || p3 < 1 || p3 > np)341{342cout << "p1 = " << p1 << " p2 = " << p2 << " p3 = " << p3 << endl;343}344345if (i > 110354) Swap (p2, p3);346if (mesh.Point(p1)(0) < 0.25)347Swap (p2,p3);348349Element2d el(TRIG);350351if (bcprop == 1)352{353if (values.Get(p1) < -69999)354el.SetIndex(1);355else356el.SetIndex(2);357}358else359el.SetIndex(3);360361362el.PNum(1) = p1;363el.PNum(2) = p2;364el.PNum(3) = p3;365mesh.AddSurfaceElement (el);366}367368369ifstream incyl ("ngusers/guenter/cylinder.surf");370int npcyl, nsecyl;371incyl >> npcyl;372cout << "npcyl = " << npcyl << endl;373for (i = 1; i <= npcyl; i++)374{375Point3d p(0,0,0);376incyl >> p.X() >> p.Y() >> p.Z();377mesh.AddPoint (p);378}379incyl >> nsecyl;380cout << "nsecyl = " << nsecyl << endl;381for (i = 1; i <= nsecyl; i++)382{383incyl >> p1 >> p2 >> p3;384p1 += np;385p2 += np;386p3 += np;387Element2d el(TRIG);388el.SetIndex(5);389el.PNum(1) = p1;390el.PNum(2) = p2;391el.PNum(3) = p3;392mesh.AddSurfaceElement (el);393}394}395396397// .tet mesh398if ( (strlen (filename) > 4) &&399strcmp (&filename[strlen (filename)-4], ".tet") == 0 )400{401ReadTETFormat (mesh, filename);402}403}404405}406407408409