mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-26 13:50:33 +05:00
archiving the mesh
This commit is contained in:
parent
a985a7bfb1
commit
633376972f
@ -774,6 +774,28 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, int BASE, typename TIND>
|
||||||
|
ngstd::Archive & operator & (ngstd::Archive & archive, Array<T,BASE,TIND> & a)
|
||||||
|
{
|
||||||
|
if (archive.Output())
|
||||||
|
archive << a.Size();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
archive & size;
|
||||||
|
a.SetSize (size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
for (auto & ai : a)
|
||||||
|
archive & ai;
|
||||||
|
*/
|
||||||
|
archive.Do (&a[BASE], a.Size());
|
||||||
|
return archive;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -39,20 +39,6 @@ namespace netgen
|
|||||||
{ return MPI_DOUBLE; }
|
{ return MPI_DOUBLE; }
|
||||||
|
|
||||||
|
|
||||||
template <int S, typename T> class Vec;
|
|
||||||
template <>
|
|
||||||
inline MPI_Datatype MyGetMPIType<Vec<3, double> > ()
|
|
||||||
{
|
|
||||||
static MPI_Datatype MPI_T = 0;
|
|
||||||
if (!MPI_T)
|
|
||||||
{
|
|
||||||
MPI_Type_contiguous ( 3, MPI_DOUBLE, &MPI_T);
|
|
||||||
MPI_Type_commit ( &MPI_T );
|
|
||||||
}
|
|
||||||
return MPI_T;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
inline void MyMPI_Send (int i, int dest, int tag)
|
inline void MyMPI_Send (int i, int dest, int tag)
|
||||||
{
|
{
|
||||||
int hi = i;
|
int hi = i;
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "parthreads.hpp"
|
#include "parthreads.hpp"
|
||||||
// #include "moveablemem.hpp"
|
// #include "moveablemem.hpp"
|
||||||
#include "dynamicmem.hpp"
|
#include "dynamicmem.hpp"
|
||||||
|
#include "archive_base.hpp"
|
||||||
|
|
||||||
#include "template.hpp"
|
#include "template.hpp"
|
||||||
#include "array.hpp"
|
#include "array.hpp"
|
||||||
@ -44,7 +45,6 @@
|
|||||||
#include "mpi_interface.hpp"
|
#include "mpi_interface.hpp"
|
||||||
#include "netgenout.hpp"
|
#include "netgenout.hpp"
|
||||||
#include "gzstream.h"
|
#include "gzstream.h"
|
||||||
#include "archive_base.hpp"
|
|
||||||
|
|
||||||
#include "ngsimd.hpp"
|
#include "ngsimd.hpp"
|
||||||
|
|
||||||
|
@ -396,6 +396,20 @@ namespace netgen
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PARALLEL
|
||||||
|
template <>
|
||||||
|
inline MPI_Datatype MyGetMPIType<Vec<3, double> > ()
|
||||||
|
{
|
||||||
|
static MPI_Datatype MPI_T = 0;
|
||||||
|
if (!MPI_T)
|
||||||
|
{
|
||||||
|
MPI_Type_contiguous ( 3, MPI_DOUBLE, &MPI_T);
|
||||||
|
MPI_Type_commit ( &MPI_T );
|
||||||
|
}
|
||||||
|
return MPI_T;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,16 @@ namespace netgen
|
|||||||
|
|
||||||
void Ngx_Mesh :: DoArchive (ngstd::Archive & archive)
|
void Ngx_Mesh :: DoArchive (ngstd::Archive & archive)
|
||||||
{
|
{
|
||||||
|
cout << "ngx_mesh, doarchive, output = " << archive.Output() << endl;
|
||||||
|
cout << "mesh = " << mesh.get() << endl;
|
||||||
|
if (archive.Input()) mesh = make_shared<Mesh>();
|
||||||
|
mesh->DoArchive(archive);
|
||||||
|
if (archive.Input())
|
||||||
|
{
|
||||||
|
netgen::mesh = mesh;
|
||||||
|
SetGlobalMesh (mesh);
|
||||||
|
}
|
||||||
|
/*
|
||||||
if (archive.Output())
|
if (archive.Output())
|
||||||
{
|
{
|
||||||
stringstream str;
|
stringstream str;
|
||||||
@ -86,6 +95,7 @@ namespace netgen
|
|||||||
stringstream str(st);
|
stringstream str(st);
|
||||||
LoadMesh (str);
|
LoadMesh (str);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ngx_Mesh :: UpdateTopology ()
|
void Ngx_Mesh :: UpdateTopology ()
|
||||||
|
@ -1303,7 +1303,34 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Mesh :: DoArchive (ngstd::Archive & archive)
|
||||||
|
{
|
||||||
|
archive & dimension;
|
||||||
|
archive & points;
|
||||||
|
archive & surfelements;
|
||||||
|
archive & volelements;
|
||||||
|
archive & facedecoding;
|
||||||
|
|
||||||
|
if (archive.Input())
|
||||||
|
{
|
||||||
|
RebuildSurfaceElementLists();
|
||||||
|
|
||||||
|
for (int faceindex = 1; faceindex <= GetNFD(); faceindex++)
|
||||||
|
{
|
||||||
|
Array<SurfaceElementIndex> seia;
|
||||||
|
GetSurfaceElementsOfFace (faceindex, seia);
|
||||||
|
cout << "seia = " << seia.Size() << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
CalcSurfacesOfNode ();
|
||||||
|
if (ntasks == 1) // sequential run only
|
||||||
|
{
|
||||||
|
topology.Update();
|
||||||
|
clusters -> Update();
|
||||||
|
}
|
||||||
|
SetNextMajorTimeStamp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Mesh :: Merge (const string & filename, const int surfindex_offset)
|
void Mesh :: Merge (const string & filename, const int surfindex_offset)
|
||||||
|
@ -509,6 +509,7 @@ namespace netgen
|
|||||||
DLL_HEADER void Merge (const string & filename, const int surfindex_offset = 0);
|
DLL_HEADER void Merge (const string & filename, const int surfindex_offset = 0);
|
||||||
|
|
||||||
|
|
||||||
|
DLL_HEADER void DoArchive (ngstd::Archive & archive);
|
||||||
///
|
///
|
||||||
DLL_HEADER void ImproveMesh (const MeshingParameters & mp, OPTIMIZEGOAL goal = OPT_QUALITY);
|
DLL_HEADER void ImproveMesh (const MeshingParameters & mp, OPTIMIZEGOAL goal = OPT_QUALITY);
|
||||||
|
|
||||||
|
@ -170,8 +170,14 @@ namespace netgen
|
|||||||
#else
|
#else
|
||||||
enum { BASE = 1 };
|
enum { BASE = 1 };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ngstd::Archive & DoArchive (ngstd::Archive & ar) { return ar & i; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline ngstd::Archive & operator & (ngstd::Archive & archive, PointIndex & mp)
|
||||||
|
{ return mp.DoArchive(archive); }
|
||||||
|
|
||||||
|
|
||||||
inline istream & operator>> (istream & ist, PointIndex & pi)
|
inline istream & operator>> (istream & ist, PointIndex & pi)
|
||||||
{
|
{
|
||||||
int i; ist >> i; pi = PointIndex(i); return ist;
|
int i; ist >> i; pi = PointIndex(i); return ist;
|
||||||
@ -240,8 +246,15 @@ namespace netgen
|
|||||||
SurfaceElementIndex & operator++ () { ++i; return *this; }
|
SurfaceElementIndex & operator++ () { ++i; return *this; }
|
||||||
SurfaceElementIndex & operator-- () { --i; return *this; }
|
SurfaceElementIndex & operator-- () { --i; return *this; }
|
||||||
SurfaceElementIndex & operator+= (int inc) { i+=inc; return *this; }
|
SurfaceElementIndex & operator+= (int inc) { i+=inc; return *this; }
|
||||||
|
|
||||||
|
ngstd::Archive & DoArchive (ngstd::Archive & ar) { return ar & i; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline ngstd::Archive & operator & (ngstd::Archive & archive, SurfaceElementIndex & mp)
|
||||||
|
{ return mp.DoArchive(archive); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline istream & operator>> (istream & ist, SurfaceElementIndex & pi)
|
inline istream & operator>> (istream & ist, SurfaceElementIndex & pi)
|
||||||
{
|
{
|
||||||
int i; ist >> i; pi = i; return ist;
|
int i; ist >> i; pi = i; return ist;
|
||||||
@ -324,8 +337,23 @@ namespace netgen
|
|||||||
static MPI_Datatype MyGetMPIType ( );
|
static MPI_Datatype MyGetMPIType ( );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ngstd::Archive & DoArchive (ngstd::Archive & ar)
|
||||||
|
{
|
||||||
|
ar & x[0] & x[1] & x[2] & layer & singular;
|
||||||
|
unsigned char _type;
|
||||||
|
if (ar.Output())
|
||||||
|
{ _type = type; ar & _type; }
|
||||||
|
else
|
||||||
|
{ ar & _type; type = POINTTYPE(_type); }
|
||||||
|
return ar;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline ngstd::Archive & operator & (ngstd::Archive & archive, MeshPoint & mp)
|
||||||
|
{ return mp.DoArchive(archive); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline ostream & operator<<(ostream & s, const MeshPoint & pt)
|
inline ostream & operator<<(ostream & s, const MeshPoint & pt)
|
||||||
{
|
{
|
||||||
return (s << Point<3> (pt));
|
return (s << Point<3> (pt));
|
||||||
@ -349,7 +377,7 @@ namespace netgen
|
|||||||
PointGeomInfo geominfo[ELEMENT2D_MAXPOINTS];
|
PointGeomInfo geominfo[ELEMENT2D_MAXPOINTS];
|
||||||
|
|
||||||
/// surface nr
|
/// surface nr
|
||||||
int index:16;
|
short int index;
|
||||||
///
|
///
|
||||||
ELEMENT_TYPE typ;
|
ELEMENT_TYPE typ;
|
||||||
/// number of points
|
/// number of points
|
||||||
@ -473,6 +501,22 @@ namespace netgen
|
|||||||
///
|
///
|
||||||
const PointGeomInfo & GeomInfoPiMod (int i) const { return geominfo[(i-1) % np]; }
|
const PointGeomInfo & GeomInfoPiMod (int i) const { return geominfo[(i-1) % np]; }
|
||||||
|
|
||||||
|
ngstd::Archive & DoArchive (ngstd::Archive & ar)
|
||||||
|
{
|
||||||
|
short _np, _typ;
|
||||||
|
bool _curved, _vis, _deleted;
|
||||||
|
if (ar.Output())
|
||||||
|
{ _np = np; _typ = typ; _curved = is_curved;
|
||||||
|
_vis = visible; _deleted = deleted; }
|
||||||
|
ar & _np & _typ & index & _curved & _vis & _deleted;
|
||||||
|
// ar & next; don't need
|
||||||
|
if (ar.Input())
|
||||||
|
{ np = _np; typ = ELEMENT_TYPE(_typ); is_curved = _curved;
|
||||||
|
visible = _vis; deleted = _deleted; }
|
||||||
|
for (size_t i = 0; i < np; i++)
|
||||||
|
ar & pnum[i];
|
||||||
|
return ar;
|
||||||
|
}
|
||||||
|
|
||||||
void SetIndex (int si) { index = si; }
|
void SetIndex (int si) { index = si; }
|
||||||
///
|
///
|
||||||
@ -590,6 +634,8 @@ namespace netgen
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline ngstd::Archive & operator & (ngstd::Archive & archive, Element2d & mp)
|
||||||
|
{ return mp.DoArchive(archive); }
|
||||||
|
|
||||||
ostream & operator<<(ostream & s, const Element2d & el);
|
ostream & operator<<(ostream & s, const Element2d & el);
|
||||||
|
|
||||||
@ -732,6 +778,19 @@ namespace netgen
|
|||||||
///
|
///
|
||||||
const PointIndex & PNumMod (int i) const { return pnum[(i-1) % np]; }
|
const PointIndex & PNumMod (int i) const { return pnum[(i-1) % np]; }
|
||||||
|
|
||||||
|
ngstd::Archive & DoArchive (ngstd::Archive & ar)
|
||||||
|
{
|
||||||
|
short _np, _typ;
|
||||||
|
if (ar.Output())
|
||||||
|
{ _np = np; _typ = typ; }
|
||||||
|
ar & _np & _typ & index;
|
||||||
|
if (ar.Input())
|
||||||
|
{ np = _np; typ = ELEMENT_TYPE(_typ); }
|
||||||
|
for (size_t i = 0; i < np; i++)
|
||||||
|
ar & pnum[i];
|
||||||
|
return ar;
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
void SetIndex (int si) { index = si; }
|
void SetIndex (int si) { index = si; }
|
||||||
///
|
///
|
||||||
@ -873,6 +932,9 @@ namespace netgen
|
|||||||
int hp_elnr;
|
int hp_elnr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline ngstd::Archive & operator & (ngstd::Archive & archive, Element & mp)
|
||||||
|
{ return mp.DoArchive(archive); }
|
||||||
|
|
||||||
ostream & operator<<(ostream & s, const Element & el);
|
ostream & operator<<(ostream & s, const Element & el);
|
||||||
|
|
||||||
|
|
||||||
@ -1079,8 +1141,22 @@ namespace netgen
|
|||||||
SurfaceElementIndex FirstElement() { return firstelement; }
|
SurfaceElementIndex FirstElement() { return firstelement; }
|
||||||
// friend ostream & operator<<(ostream & s, const FaceDescriptor & fd);
|
// friend ostream & operator<<(ostream & s, const FaceDescriptor & fd);
|
||||||
friend class Mesh;
|
friend class Mesh;
|
||||||
|
|
||||||
|
ngstd::Archive & DoArchive (ngstd::Archive & ar)
|
||||||
|
{
|
||||||
|
return ar & surfnr & domin & domout & tlosurf & bcprop
|
||||||
|
& surfcolour.X() & surfcolour.Y() & surfcolour.Z()
|
||||||
|
// & bcname // how to do that ?
|
||||||
|
// & firstelement // don't need it
|
||||||
|
& domin_singular & domout_singular ;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline ngstd::Archive & operator & (ngstd::Archive & archive, FaceDescriptor & mp)
|
||||||
|
{ return mp.DoArchive(archive); }
|
||||||
|
|
||||||
|
|
||||||
ostream & operator<< (ostream & s, const FaceDescriptor & fd);
|
ostream & operator<< (ostream & s, const FaceDescriptor & fd);
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user