You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.8 KiB
76 lines
1.8 KiB
#ifndef MultiLevelSVD_H
|
|
#define MultiLevelSVD_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <iomanip>
|
|
#include <math.h>
|
|
#include <string>
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
template<class element>
|
|
group<element>* InitilizeTopGroup(element **ElementArray, int nElement);
|
|
template<class element>
|
|
group<element>** MeshPartition(group<element> *top, int grpsize, int &numGrp);
|
|
template<class element>
|
|
void BuildGroupBasisLink(group<element> *top, Basis<element>* BasisArray);
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
template<class element>
|
|
group<element>* InitilizeTopGroup(element **ElementArray, int nElement)
|
|
{
|
|
int i, j;
|
|
for (i = 0; i < nElement; i ++) {
|
|
element *elem = ElementArray[i];
|
|
double cx = 0.0, cy = 0.0, cz = 0.0;
|
|
int nodeNum = 3;
|
|
double x, y ,z;
|
|
|
|
for (j = 0; j < nodeNum; j ++) {
|
|
x = elem->GetNodePtr(j)->GetX();
|
|
y = elem->GetNodePtr(j)->GetY();
|
|
z = elem->GetNodePtr(j)->GetZ();
|
|
|
|
cx += x;
|
|
cy += y;
|
|
cz += z;
|
|
}
|
|
cx /= (double) nodeNum;
|
|
cy /= (double) nodeNum;
|
|
cz /= (double) nodeNum;
|
|
|
|
elem->SetCenter(cx, cy, cz);
|
|
}
|
|
|
|
group<element> *top;
|
|
top = new group<element> [1];
|
|
top->SetnElement(nElement);
|
|
top->Initialize();
|
|
for (i = 0; i < nElement; i ++)
|
|
top->InsertElement(ElementArray[i]);
|
|
|
|
return top;
|
|
}
|
|
|
|
template<class element>
|
|
group<element>** MeshPartition(group<element> *top, int grpsize, int &numGrp)
|
|
{
|
|
numGrp = 0;
|
|
top->PartitionMultiLevelSVD(grpsize, numGrp);
|
|
group<element> **groupArray;
|
|
groupArray = new group<element>* [numGrp];
|
|
top->findGroup(groupArray);
|
|
|
|
return groupArray;
|
|
}
|
|
|
|
template<class element>
|
|
void BuildGroupBasisLink(group<element> *top, Basis<element>* BasisArray)
|
|
{
|
|
top->BuildGroupBarray(BasisArray);
|
|
}
|
|
|
|
|
|
#endif
|
|
|