Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Die Konto der externen Nutzer:innen sind über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. The accounts of external users can be accessed via the "Standard" tab. The administrators

Commit 96502fb2 authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

ehm, was habe ich gemacht?

parent 603155d0
......@@ -389,16 +389,148 @@ namespace AMDiS {
std::vector<DOFAdmin*>::iterator dai = std::find(admin.begin(),admin.end(),localAdmin);
if (dai!= admin.end()) {
ERROR("admin %s is already associated to mesh %s\n",
localAdmin->getName().c_str(), this->getName().c_str());
}
TEST_EXIT(dai == admin.end())
("admin %s is already associated to mesh %s\n",
localAdmin->getName().c_str(), this->getName().c_str());
// ===== adding dofs to already existing elements ============================
// If adding DOFAdmins to already initilized meshes is required, see older
// AMDiS version (revision < 244) at the same code position.
TEST_EXIT(!initialized)("Adding DOFAdmins to initilized meshes does not work!\n");
TEST_EXIT(!initialized)("Adding DOFAdmins to initilized meshes does not work yet!\n");
if (initialized) {
static bool pnd_1d_0[2] = {true, true};
static bool pnd_1d_1[1] = {false};
static bool pnd_2d_0[3] = {true, true, true};
static bool pnd_2d_1[3] = {true, true, false};
static bool pnd_2d_2[1] = {false};
static bool pnd_3d_0[4] = {true, true, true, true};
static bool pnd_3d_1[6] = {false, true, true, true, true, true};
static bool pnd_3d_2[4] = {true, true, false, false};
static bool pnd_3d_3[1] = {false};
static bool *pnd_1d[2] = {pnd_1d_0, pnd_1d_1};
static bool *pnd_2d[3] = {pnd_2d_0, pnd_2d_1, pnd_2d_2};
static bool *pnd_3d[4] = {pnd_3d_0, pnd_3d_1, pnd_3d_2, pnd_3d_3};
static bool **parentNeedsDOF[4] = {NULL, pnd_1d, pnd_2d, pnd_3d};
std::list<struct delmem> delList;
std::map< std::set<DegreeOfFreedom>, DegreeOfFreedom*> dofPtrMap;
const DOFAdmin *vertexAdmin = getVertexAdmin();
int vertexAdminPreDOFs = vertexAdmin->getNumberOfPreDOFs(VERTEX);
// finding necessary node number for new admin
int newNNode = 0;
GeoIndex geoIndex;
for (int d = 0; d < dim + 1; d++) {
geoIndex = INDEX_OF_DIM(d, dim);
if (localAdmin->getNumberOfDOFs(geoIndex)>0||nDOF[geoIndex]>0)
newNNode+=getGeo(geoIndex);
}
bool extendNodes = (newNNode>nNodeEl);
nNodeEl = newNNode;
TraverseStack stack;
ElInfo *elInfo = NULL;
elInfo = stack.traverseFirst(this, -1, CALL_EVERY_EL_PREORDER);
while(elInfo) {
Element *element = elInfo->getElement();
DegreeOfFreedom *newDOF, **oldDOF, **dof =
const_cast<DegreeOfFreedom**>(element->getDOF());
int index = 0;
if (extendNodes) {
oldDOF=dof;
element->setDOFPtrs();
dof=const_cast<DegreeOfFreedom**>(element->getDOF());
int index=0,oldIndex=0;
for (int d = 0; d < dim+1; d++) {
geoIndex = INDEX_OF_DIM(d, dim);
if (nDOF[geoIndex]>0) {
for(int i=0;i<getGeo(geoIndex);++i)
dof[index++]=oldDOF[oldIndex++];
}
else {
if (localAdmin->getNumberOfDOFs(geoIndex)>0)
index+=getGeo(geoIndex);
}
}
FREE_MEMORY(oldDOF, DegreeOfFreedom*, oldNNodes);
TEST_EXIT_DBG(index == nNodeEl)("ERROR: Number of entered nodes %f != number of nodes %f\n",index,nNodeEl);
}
index=0;
// allocate new memory at elements
for(int d = 0; d < dim+1; d++) {
geoIndex = INDEX_OF_DIM(d, dim);
int numberOfDOFs = localAdmin->getNumberOfDOFs(geoIndex);
int numberOfPreDOFs = nDOF[geoIndex];
if (numberOfDOFs>0||numberOfPreDOFs>0) {
// for all vertices/edges/...
for(int i = 0; i < getGeo(geoIndex); i++, index++) {
std::set<DegreeOfFreedom> dofSet;
for(int j = 0; j < d+1; j++) {
dofSet.insert(dof[element->getVertexOfPosition(geoIndex, i, j)][vertexAdminPreDOFs]);
}
if(element->isLeaf() || parentNeedsDOF[dim][d][i]) {
if(dofPtrMap[dofSet] == NULL) {
if(localAdmin->getNumberOfDOFs(geoIndex)) {
newDOF = GET_MEMORY(DegreeOfFreedom, numberOfPreDOFs + numberOfDOFs);
// copy old dofs to new memory and free old memory
if(dof[index]) {
for(int j = 0; j < numberOfPreDOFs; j++) {
newDOF[j] = dof[index][j];
}
// FREE_MEMORY(dof[index], DegreeOfFreedom, numberOfPreDOFs);
// Do not free memory. The information has to be used to identify the part in other elements.
// The memory is only marked for freeing.
struct delmem fm;
fm.ptr=dof[index];
fm.len=numberOfPreDOFs;
delList.push_back(fm);
}
for(int j = 0; j < numberOfDOFs; j++) {
newDOF[numberOfPreDOFs + j] = localAdmin->getDOFIndex();
}
dof[index] = newDOF;
}
dofPtrMap[dofSet] = dof[index];
} else {
dof[index] = dofPtrMap[dofSet];
}
}
}
}
}
elInfo = stack.traverseNext(elInfo);
}
// now free the old dof memory:
std::list<struct delmem>::iterator it=delList.begin();
while(it!=delList.end()) {
FREE_MEMORY((*it).ptr, DegreeOfFreedom, (*it).len);
it++;
}
delList.clear();
}
admin.push_back(localAdmin);
......@@ -540,14 +672,14 @@ namespace AMDiS {
}
const DOFAdmin *Mesh::createDOFAdmin(const std::string& lname,DimVec<int> lnDOF)
const DOFAdmin *Mesh::createDOFAdmin(const std::string& lname, DimVec<int> lnDOF)
{
FUNCNAME("Mesh::createDOFAdmin()");
DOFAdmin *localAdmin = new DOFAdmin(this, lname);
for (int i = 0; i < dim+1; i++)
localAdmin->setNumberOfDOFs(i,lnDOF[i]);
for (int i = 0; i < dim + 1; i++)
localAdmin->setNumberOfDOFs(i, lnDOF[i]);
addDOFAdmin(localAdmin);
......
......@@ -38,7 +38,7 @@ namespace AMDiS {
WARNING("meshes already created\n");
} else {
if (initFlag.isSet(CREATE_MESH) ||
((!adoptFlag.isSet(INIT_MESH))&&
(!adoptFlag.isSet(INIT_MESH) &&
(initFlag.isSet(INIT_SYSTEM) || initFlag.isSet(INIT_FE_SPACE)))) {
createMesh();
}
......@@ -72,7 +72,7 @@ namespace AMDiS {
WARNING("feSpaces already created\n");
} else {
if (initFlag.isSet(INIT_FE_SPACE) ||
(initFlag.isSet(INIT_SYSTEM)&&!adoptFlag.isSet(INIT_FE_SPACE))) {
(initFlag.isSet(INIT_SYSTEM) && !adoptFlag.isSet(INIT_FE_SPACE))) {
createFESpace();
}
if (adoptProblem &&
......@@ -87,9 +87,8 @@ namespace AMDiS {
TEST_EXIT(feSpaces.size() == 1)("Daran muss ich noch arbeiten!\n");
componentSpaces.resize(nComponents);
for (int i = adoptProblem->getNumComponents(); i < nComponents; i++) {
for (int i = adoptProblem->getNumComponents(); i < nComponents; i++)
componentSpaces[i] = componentSpaces[0];
}
}
}
......@@ -125,27 +124,21 @@ namespace AMDiS {
WARNING("no solver created\n");
// === create estimator ===
if (initFlag.isSet(INIT_ESTIMATOR)) {
if (initFlag.isSet(INIT_ESTIMATOR))
createEstimator();
}
if (adoptProblem && adoptFlag.isSet(INIT_ESTIMATOR)) {
if (adoptProblem && adoptFlag.isSet(INIT_ESTIMATOR))
estimator = adoptProblem->getEstimator();
}
// === create marker ===
if (initFlag.isSet(INIT_MARKER)) {
if (initFlag.isSet(INIT_MARKER))
createMarker();
}
if (adoptProblem && adoptFlag.isSet(INIT_MARKER)) {
if (adoptProblem && adoptFlag.isSet(INIT_MARKER))
marker = adoptProblem->getMarker();
}
// === create file writer ===
if (initFlag.isSet(INIT_FILEWRITER)) {
if (initFlag.isSet(INIT_FILEWRITER))
createFileWriter();
}
// === read serialization and init mesh ===
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment