python - element has material name

This commit is contained in:
Joachim Schöberl 2016-02-26 20:30:40 +01:00
parent 1ac9c02f5b
commit b3591f829a
7 changed files with 38 additions and 27 deletions

View File

@ -93,10 +93,10 @@ extern "C" {
DLL_HEADER void Ng_SetElementIndex(const int ei, const int index); DLL_HEADER void Ng_SetElementIndex(const int ei, const int index);
// Get Material of element ei // Get Material of element ei
DLL_HEADER char * Ng_GetElementMaterial (int ei); DLL_HEADER const char * Ng_GetElementMaterial (int ei);
// Get Material of domain dom // Get Material of domain dom
DLL_HEADER char * Ng_GetDomainMaterial (int dom); DLL_HEADER const char * Ng_GetDomainMaterial (int dom);
// Get User Data // Get User Data
DLL_HEADER int Ng_GetUserDataSize (char * id); DLL_HEADER int Ng_GetUserDataSize (char * id);

View File

@ -74,7 +74,7 @@ namespace netgen
public: public:
NG_ELEMENT_TYPE type; NG_ELEMENT_TYPE type;
int index; // material / boundary condition int index; // material / boundary condition
const string * mat; // material / boundary label
NG_ELEMENT_TYPE GetType() const { return type; } NG_ELEMENT_TYPE GetType() const { return type; }
int GetIndex() const { return index-1; } int GetIndex() const { return index-1; }
Ng_Points points; // all points Ng_Points points; // all points

View File

@ -89,7 +89,12 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<2> (int nr) const
Ng_Element ret; Ng_Element ret;
ret.type = NG_ELEMENT_TYPE(el.GetType()); ret.type = NG_ELEMENT_TYPE(el.GetType());
ret.index = mesh->GetFaceDescriptor(el.GetIndex()).BCProperty(); const FaceDescriptor & fd = mesh->GetFaceDescriptor(el.GetIndex());
ret.index = fd.BCProperty();
if (mesh->GetDimension() == 3)
ret.mat = &fd.GetBCName();
else
ret.mat = mesh -> GetMaterialPtr(ret.index);
ret.points.num = el.GetNP(); ret.points.num = el.GetNP();
ret.points.ptr = (int*)&el[0]; ret.points.ptr = (int*)&el[0];
@ -114,7 +119,7 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<3> (int nr) const
Ng_Element ret; Ng_Element ret;
ret.type = NG_ELEMENT_TYPE(el.GetType()); ret.type = NG_ELEMENT_TYPE(el.GetType());
ret.index = el.GetIndex(); ret.index = el.GetIndex();
ret.mat = mesh -> GetMaterialPtr(ret.index);
ret.points.num = el.GetNP(); ret.points.num = el.GetNP();
ret.points.ptr = (int*)&el[0]; ret.points.ptr = (int*)&el[0];

View File

@ -399,16 +399,17 @@ void Ng_SetElementIndex(const int ei, const int index)
mesh->VolumeElement(ei).SetIndex(index); mesh->VolumeElement(ei).SetIndex(index);
} }
char * Ng_GetElementMaterial (int ei) const char * Ng_GetElementMaterial (int ei)
{ {
static char empty[] = ""; static char empty[] = "";
if (mesh->GetDimension() == 3) if (mesh->GetDimension() == 3)
{ {
int ind = mesh->VolumeElement(ei).GetIndex(); int ind = mesh->VolumeElement(ei).GetIndex();
// cout << "ind = " << ind << endl; // cout << "ind = " << ind << endl;
const char * mat = mesh->GetMaterial (ind); const string * mat = mesh->GetMaterialPtr (ind);
if (mat) if (mat)
return const_cast<char*> (mat); // return const_cast<char*> (mat);
return mat->c_str();
else else
return empty; return empty;
} }
@ -417,24 +418,24 @@ char * Ng_GetElementMaterial (int ei)
{ {
int ind = mesh->SurfaceElement(ei).GetIndex(); int ind = mesh->SurfaceElement(ei).GetIndex();
ind = mesh->GetFaceDescriptor(ind).BCProperty(); ind = mesh->GetFaceDescriptor(ind).BCProperty();
const char * mat = mesh->GetMaterial ( ind ); const string * mat = mesh->GetMaterialPtr ( ind );
if (mat) if (mat)
return const_cast<char*> (mat); return mat->c_str();
else else
return empty; return empty;
} }
return 0; return 0;
} }
char * Ng_GetDomainMaterial (int dom) const char * Ng_GetDomainMaterial (int dom)
{ {
static char empty[] = ""; static char empty[] = "";
// astrid // astrid
if ( 1 ) // mesh->GetDimension() == 3) if ( 1 ) // mesh->GetDimension() == 3)
{ {
const char * mat = mesh->GetMaterial(dom); const string * mat = mesh->GetMaterialPtr(dom);
if (mat) if (mat)
return const_cast<char*> (mat); return mat->c_str();
else else
return empty; return empty;
} }

View File

@ -144,7 +144,7 @@ void WriteJCMFormat (const Mesh & mesh,
int nDomains=mesh.GetNDomains(); int nDomains=mesh.GetNDomains();
for (i=1; i<=nDomains; i++) for (i=1; i<=nDomains; i++)
{ {
if (mesh.GetMaterial(i)) if (mesh.GetMaterialPtr(i))
outfile << "#" << mesh.GetMaterial(i) outfile << "#" << mesh.GetMaterial(i)
<< ": Material ID = " << ": Material ID = "
<< i << "\n"; << i << "\n";

View File

@ -63,15 +63,14 @@ namespace netgen
delete hpelements; delete hpelements;
for (int i = 0; i < materials.Size(); i++) for (int i = 0; i < materials.Size(); i++)
delete [] materials[i]; delete materials[i];
for(int i = 0; i < userdata_int.Size(); i++) for(int i = 0; i < userdata_int.Size(); i++)
delete userdata_int[i]; delete userdata_int[i];
for(int i = 0; i < userdata_double.Size(); i++) for(int i = 0; i < userdata_double.Size(); i++)
delete userdata_double[i]; delete userdata_double[i];
for (int i = 0; i < bcnames.Size(); i++ ) for (int i = 0; i < bcnames.Size(); i++ )
if ( bcnames[i] ) delete bcnames[i]; delete bcnames[i];
#ifdef PARALLEL #ifdef PARALLEL
delete paralleltop; delete paralleltop;
@ -587,7 +586,7 @@ namespace netgen
int cntmat = 0; int cntmat = 0;
for (i = 1; i <= materials.Size(); i++) for (i = 1; i <= materials.Size(); i++)
if (materials.Get(i) && strlen (materials.Get(i))) if (materials.Get(i) && materials.Get(i)->length())
cntmat++; cntmat++;
if (cntmat) if (cntmat)
@ -595,7 +594,7 @@ namespace netgen
outfile << "materials" << endl; outfile << "materials" << endl;
outfile << cntmat << endl; outfile << cntmat << endl;
for (i = 1; i <= materials.Size(); i++) for (i = 1; i <= materials.Size(); i++)
if (materials.Get(i) && strlen (materials.Get(i))) if (materials.Get(i) && materials.Get(i)->length())
outfile << i << " " << materials.Get(i) << endl; outfile << i << " " << materials.Get(i) << endl;
} }
@ -5541,7 +5540,7 @@ namespace netgen
SetNextMajorTimeStamp(); SetNextMajorTimeStamp();
} }
void Mesh :: SetMaterial (int domnr, const char * mat) void Mesh :: SetMaterial (int domnr, const string & mat)
{ {
if (domnr > materials.Size()) if (domnr > materials.Size())
{ {
@ -5550,15 +5549,19 @@ namespace netgen
for (int i = olds; i < domnr; i++) for (int i = olds; i < domnr; i++)
materials[i] = 0; materials[i] = 0;
} }
/*
materials.Elem(domnr) = new char[strlen(mat)+1]; materials.Elem(domnr) = new char[strlen(mat)+1];
strcpy (materials.Elem(domnr), mat); strcpy (materials.Elem(domnr), mat);
*/
materials.Elem(domnr) = new string(mat);
} }
const char * Mesh :: GetMaterial (int domnr) const const string & Mesh :: GetMaterial (int domnr) const
{ {
if (domnr <= materials.Size()) if (domnr <= materials.Size())
return materials.Get(domnr); return *materials.Get(domnr);
return 0; static string emptystring;
return emptystring;
} }
void Mesh ::SetNBCNames ( int nbcn ) void Mesh ::SetNBCNames ( int nbcn )

View File

@ -82,7 +82,7 @@ namespace netgen
Array<EdgeDescriptor> edgedecoding; Array<EdgeDescriptor> edgedecoding;
/// sub-domain materials /// sub-domain materials
Array<char*> materials; Array<string*> materials;
/// labels for boundary conditions /// labels for boundary conditions
Array<string*> bcnames; Array<string*> bcnames;
@ -573,9 +573,11 @@ namespace netgen
{ return edgedecoding.Append(fd) - 1; } { return edgedecoding.Append(fd) - 1; }
/// ///
DLL_HEADER void SetMaterial (int domnr, const char * mat); DLL_HEADER void SetMaterial (int domnr, const string & mat);
/// ///
const char * GetMaterial (int domnr) const; const string & GetMaterial (int domnr) const;
const string * GetMaterialPtr (int domnr) const // 1-based
{ return domnr <= materials.Size() ? materials.Get(domnr) : nullptr; }
DLL_HEADER void SetNBCNames ( int nbcn ); DLL_HEADER void SetNBCNames ( int nbcn );
@ -583,7 +585,7 @@ namespace netgen
const string & GetBCName ( int bcnr ) const; const string & GetBCName ( int bcnr ) const;
string * GetBCNamePtr ( int bcnr ) string * GetBCNamePtr (int bcnr) const
{ return bcnr < bcnames.Size() ? bcnames[bcnr] : nullptr; } { return bcnr < bcnames.Size() ? bcnames[bcnr] : nullptr; }
/// ///