mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-11 21:50:34 +05:00
copyable 2d rules
This commit is contained in:
parent
30d708f487
commit
780e72bf81
@ -517,7 +517,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (multithread.terminate) return;
|
if (multithread.terminate) return;
|
||||||
|
|
||||||
for (SurfaceElementIndex sei = oldnf; sei < mesh.GetNSE(); sei++)
|
for (SurfaceElementIndex sei = oldnf; sei < mesh.GetNSE(); sei++)
|
||||||
mesh[sei].SetIndex (k);
|
mesh[sei].SetIndex (k);
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ namespace netgen
|
|||||||
BlockAllocator :: ~BlockAllocator ()
|
BlockAllocator :: ~BlockAllocator ()
|
||||||
{
|
{
|
||||||
lock_guard<mutex> guard(block_allocator_mutex);
|
lock_guard<mutex> guard(block_allocator_mutex);
|
||||||
// cout << "****************** delete BlockAllocator " << endl;
|
cout << "****************** delete BlockAllocator " << endl;
|
||||||
for (int i = 0; i < bablocks.Size(); i++)
|
for (int i = 0; i < bablocks.Size(); i++)
|
||||||
delete [] bablocks[i];
|
delete [] bablocks[i];
|
||||||
bablocks.SetSize(0);
|
bablocks.SetSize(0);
|
||||||
|
@ -53,15 +53,21 @@ namespace netgen
|
|||||||
if (!globalrules.Size())
|
if (!globalrules.Size())
|
||||||
{
|
{
|
||||||
LoadRules (NULL, mp.quad);
|
LoadRules (NULL, mp.quad);
|
||||||
for (auto * rule : rules)
|
for (auto & rule : rules)
|
||||||
globalrules.Append (unique_ptr<netrule>(rule));
|
globalrules.Append (make_unique<netrule>(*rule));
|
||||||
|
rules.SetSize(0);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (auto i : globalrules.Range())
|
for (auto i : globalrules.Range())
|
||||||
rules.Append (globalrules[i].get());
|
rules.Append (globalrules[i].get());
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
for (auto i : globalrules.Range())
|
||||||
|
rules.Append (make_unique<netrule>(*globalrules[i]));
|
||||||
|
|
||||||
// LoadRules ("rules/quad.rls");
|
// LoadRules ("rules/quad.rls");
|
||||||
// LoadRules ("rules/triangle.rls");
|
// LoadRules ("rules/triangle.rls");
|
||||||
|
|
||||||
@ -458,7 +464,7 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
(*testout) << foundmap.Get(i) << "/"
|
(*testout) << foundmap.Get(i) << "/"
|
||||||
<< canuse.Get(i) << "/"
|
<< canuse.Get(i) << "/"
|
||||||
<< ruleused.Get(i) << " map/can/use rule " << rules.Get(i)->Name() << "\n";
|
<< ruleused.Get(i) << " map/can/use rule " << rules[i-1]->Name() << "\n";
|
||||||
}
|
}
|
||||||
(*testout) << "\n";
|
(*testout) << "\n";
|
||||||
}
|
}
|
||||||
@ -1475,7 +1481,7 @@ namespace netgen
|
|||||||
if ( debugparam.haltsuccess || debugflag )
|
if ( debugparam.haltsuccess || debugflag )
|
||||||
{
|
{
|
||||||
// adfront.PrintOpenSegments (*testout);
|
// adfront.PrintOpenSegments (*testout);
|
||||||
cout << "success of rule" << rules.Get(rulenr)->Name() << endl;
|
cout << "success of rule" << rules[rulenr-1]->Name() << endl;
|
||||||
multithread.drawing = 1;
|
multithread.drawing = 1;
|
||||||
multithread.testmode = 1;
|
multithread.testmode = 1;
|
||||||
multithread.pause = 1;
|
multithread.pause = 1;
|
||||||
@ -1491,7 +1497,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(*testout) << "success of rule" << rules.Get(rulenr)->Name() << endl;
|
(*testout) << "success of rule" << rules[rulenr-1]->Name() << endl;
|
||||||
(*testout) << "trials = " << trials << endl;
|
(*testout) << "trials = " << trials << endl;
|
||||||
|
|
||||||
(*testout) << "locpoints " << endl;
|
(*testout) << "locpoints " << endl;
|
||||||
|
@ -31,7 +31,7 @@ class Meshing2
|
|||||||
/// the current advancing front
|
/// the current advancing front
|
||||||
AdFront2 adfront;
|
AdFront2 adfront;
|
||||||
/// rules for mesh generation
|
/// rules for mesh generation
|
||||||
NgArray<netrule*> rules;
|
Array<unique_ptr<netrule>> rules;
|
||||||
/// statistics
|
/// statistics
|
||||||
NgArray<int> ruleused, canuse, foundmap;
|
NgArray<int> ruleused, canuse, foundmap;
|
||||||
///
|
///
|
||||||
|
@ -13,11 +13,13 @@ netrule :: netrule ()
|
|||||||
|
|
||||||
netrule :: ~netrule()
|
netrule :: ~netrule()
|
||||||
{
|
{
|
||||||
delete [] name;
|
// delete [] name;
|
||||||
|
/*
|
||||||
for(int i = 0; i < oldutofreearea_i.Size(); i++)
|
for(int i = 0; i < oldutofreearea_i.Size(); i++)
|
||||||
delete oldutofreearea_i[i];
|
delete oldutofreearea_i[i];
|
||||||
for(int i = 0; i < freezone_i.Size(); i++)
|
for(int i = 0; i < freezone_i.Size(); i++)
|
||||||
delete freezone_i[i];
|
delete freezone_i[i];
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -37,9 +39,9 @@ void netrule :: SetFreeZoneTransformation (const Vector & devp, int tolclass)
|
|||||||
|
|
||||||
if (tolclass <= oldutofreearea_i.Size())
|
if (tolclass <= oldutofreearea_i.Size())
|
||||||
{
|
{
|
||||||
oldutofreearea_i[tolclass-1] -> Mult (devp, devfree);
|
oldutofreearea_i[tolclass-1].Mult (devp, devfree);
|
||||||
|
|
||||||
auto& fzi = *freezone_i[tolclass-1];
|
auto& fzi = freezone_i[tolclass-1];
|
||||||
for (int i = 0; i < fzs; i++)
|
for (int i = 0; i < fzs; i++)
|
||||||
{
|
{
|
||||||
transfreezone[i][0] = fzi[i][0] + devfree[2*i];
|
transfreezone[i][0] = fzi[i][0] + devfree[2*i];
|
||||||
|
@ -60,10 +60,13 @@ void netrule :: LoadRule (istream & ist)
|
|||||||
ist.get (buf, sizeof(buf), '"');
|
ist.get (buf, sizeof(buf), '"');
|
||||||
ist.get (ch);
|
ist.get (ch);
|
||||||
|
|
||||||
// if(name != NULL)
|
// if(name != NULL)
|
||||||
|
/*
|
||||||
delete [] name;
|
delete [] name;
|
||||||
name = new char[strlen (buf) + 1];
|
name = new char[strlen (buf) + 1];
|
||||||
strcpy (name, buf);
|
strcpy (name, buf);
|
||||||
|
*/
|
||||||
|
name = string(buf);
|
||||||
//(*testout) << "name " << name << endl;
|
//(*testout) << "name " << name << endl;
|
||||||
// (*mycout) << "Rule " << name << " found." << endl;
|
// (*mycout) << "Rule " << name << " found." << endl;
|
||||||
|
|
||||||
@ -474,14 +477,14 @@ void netrule :: LoadRule (istream & ist)
|
|||||||
{
|
{
|
||||||
double lam1 = 1.0/(i+1);
|
double lam1 = 1.0/(i+1);
|
||||||
|
|
||||||
oldutofreearea_i[i] = new DenseMatrix (oldutofreearea.Height(), oldutofreearea.Width());
|
oldutofreearea_i[i] = move(DenseMatrix (oldutofreearea.Height(), oldutofreearea.Width()));
|
||||||
DenseMatrix & mati = *oldutofreearea_i[i];
|
DenseMatrix & mati = oldutofreearea_i[i];
|
||||||
for (j = 0; j < oldutofreearea.Height(); j++)
|
for (j = 0; j < oldutofreearea.Height(); j++)
|
||||||
for (int k = 0; k < oldutofreearea.Width(); k++)
|
for (int k = 0; k < oldutofreearea.Width(); k++)
|
||||||
mati(j,k) = lam1 * oldutofreearea(j,k) + (1 - lam1) * oldutofreearealimit(j,k);
|
mati(j,k) = lam1 * oldutofreearea(j,k) + (1 - lam1) * oldutofreearealimit(j,k);
|
||||||
|
|
||||||
freezone_i[i] = new NgArray<Point<2>> (freezone.Size());
|
freezone_i[i] = NgArray<Point<2>> (freezone.Size());
|
||||||
auto& fzi = *freezone_i[i];
|
auto& fzi = freezone_i[i];
|
||||||
for (int j = 0; j < freezone.Size(); j++)
|
for (int j = 0; j < freezone.Size(); j++)
|
||||||
fzi[j] = freezonelimit[j] + lam1 * (freezone[j] - freezonelimit[j]);
|
fzi[j] = freezonelimit[j] + lam1 * (freezone[j] - freezonelimit[j]);
|
||||||
}
|
}
|
||||||
@ -589,12 +592,12 @@ void Meshing2 :: LoadRules (const char * filename, bool quad)
|
|||||||
if (strcmp (buf, "rule") == 0)
|
if (strcmp (buf, "rule") == 0)
|
||||||
{
|
{
|
||||||
//(*testout) << "found rule" << endl;
|
//(*testout) << "found rule" << endl;
|
||||||
netrule * rule = new netrule;
|
auto rule = make_unique<netrule>();
|
||||||
//(*testout) << "fr1" << endl;
|
//(*testout) << "fr1" << endl;
|
||||||
rule -> LoadRule(*ist);
|
rule -> LoadRule(*ist);
|
||||||
//(*testout) << "fr2" << endl;
|
//(*testout) << "fr2" << endl;
|
||||||
|
|
||||||
rules.Append (rule);
|
rules.Append (move(rule));
|
||||||
}
|
}
|
||||||
//(*testout) << "loop" << endl;
|
//(*testout) << "loop" << endl;
|
||||||
}
|
}
|
||||||
|
@ -209,7 +209,7 @@ namespace netgen
|
|||||||
for (int ri = 1; ri <= rules.Size(); ri++)
|
for (int ri = 1; ri <= rules.Size(); ri++)
|
||||||
{
|
{
|
||||||
// NgProfiler::RegionTimer reg(timers[ri-1]);
|
// NgProfiler::RegionTimer reg(timers[ri-1]);
|
||||||
netrule * rule = rules.Get(ri);
|
netrule * rule = rules[ri-1].get();
|
||||||
|
|
||||||
#ifdef LOCDEBUG
|
#ifdef LOCDEBUG
|
||||||
if (loctestmode)
|
if (loctestmode)
|
||||||
|
@ -21,7 +21,7 @@ private:
|
|||||||
///
|
///
|
||||||
int quality;
|
int quality;
|
||||||
///
|
///
|
||||||
char * name;
|
string name;
|
||||||
///
|
///
|
||||||
NgArray<Point<2>> points;
|
NgArray<Point<2>> points;
|
||||||
///
|
///
|
||||||
@ -29,7 +29,7 @@ private:
|
|||||||
///
|
///
|
||||||
NgArray<Point<2>> freezone, freezonelimit;
|
NgArray<Point<2>> freezone, freezonelimit;
|
||||||
///
|
///
|
||||||
NgArray<NgArray<Point<2>>*> freezone_i;
|
NgArray<NgArray<Point<2>>> freezone_i;
|
||||||
///
|
///
|
||||||
NgArray<Point<2>> transfreezone;
|
NgArray<Point<2>> transfreezone;
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ private:
|
|||||||
///
|
///
|
||||||
DenseMatrix oldutonewu, oldutofreearea, oldutofreearealimit;
|
DenseMatrix oldutonewu, oldutofreearea, oldutofreearealimit;
|
||||||
///
|
///
|
||||||
NgArray<DenseMatrix*> oldutofreearea_i;
|
NgArray<DenseMatrix> oldutofreearea_i;
|
||||||
///
|
///
|
||||||
MatrixFixWidth<3> freesetinequ;
|
MatrixFixWidth<3> freesetinequ;
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ public:
|
|||||||
///
|
///
|
||||||
const DenseMatrix & GetOldUToFreeArea () const { return oldutofreearea; }
|
const DenseMatrix & GetOldUToFreeArea () const { return oldutofreearea; }
|
||||||
///
|
///
|
||||||
const char * Name () const { return name; }
|
const string & Name () const { return name; }
|
||||||
|
|
||||||
///
|
///
|
||||||
void LoadRule (istream & ist);
|
void LoadRule (istream & ist);
|
||||||
|
Loading…
Reference in New Issue
Block a user