From 5eaded801485f18ce6e936176b49de8fff8b70fb Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Wed, 5 Mar 2008 09:48:45 +0000 Subject: [PATCH] * New function: void ProblemScal::setMeshFromProblemVec(ProblemVec* pv, int i) * New function: double AdaptInfo::getEstTSum(int index) * New flag for problem initialization: INIT_GLOBAL_REFINES (is also set to INIT_ALL) --- AMDiS/src/AdaptInfo.h | 7 +++++ AMDiS/src/ProblemScal.cc | 55 ++++++++++++++++++++++++------------- AMDiS/src/ProblemScal.h | 6 ++++ AMDiS/src/ProblemStatBase.h | 4 ++- 4 files changed, 52 insertions(+), 20 deletions(-) diff --git a/AMDiS/src/AdaptInfo.h b/AMDiS/src/AdaptInfo.h index 211cdabd..9aa4063f 100644 --- a/AMDiS/src/AdaptInfo.h +++ b/AMDiS/src/AdaptInfo.h @@ -431,6 +431,13 @@ namespace AMDiS { return scalContents[index]->est_sum; }; + /** \brief + * Returns \ref est_t_sum. + */ + inline double getEstTSum(int index) { + return scalContents[index]->est_t_sum; + }; + /** \brief * Returns \ref est_max. */ diff --git a/AMDiS/src/ProblemScal.cc b/AMDiS/src/ProblemScal.cc index 621d8af9..1ca8d3cf 100644 --- a/AMDiS/src/ProblemScal.cc +++ b/AMDiS/src/ProblemScal.cc @@ -162,6 +162,15 @@ namespace AMDiS { } } + + void ProblemScal::setMeshFromProblemVec(ProblemVec* pv, int i) + { + mesh_ = pv->getMesh(i); + coarseningManager_ = pv->getCoarseningManager(i); + refinementManager_ = pv->getRefinementManager(i); + } + + Flag ProblemScal::markElements(AdaptInfo *adaptInfo) { if(marker_) @@ -171,11 +180,13 @@ namespace AMDiS { return 0; } + Flag ProblemScal::refineMesh(AdaptInfo *adaptInfo) { return refinementManager_->refineMesh(mesh_); } + Flag ProblemScal::coarsenMesh(AdaptInfo *adaptInfo) { if(adaptInfo->isCoarseningAllowed(0)) @@ -223,16 +234,16 @@ namespace AMDiS { FUNCNAME("Problem::initialize()"); // === create mesh === - if(mesh_) { + if (mesh_) { WARNING("mesh already created\n"); } else { - if(initFlag.isSet(CREATE_MESH) || + if (initFlag.isSet(CREATE_MESH) || ((!adoptFlag.isSet(INIT_MESH))&& (initFlag.isSet(INIT_SYSTEM)||initFlag.isSet(INIT_FE_SPACE)))) { createMesh(); } - if(adoptProblem && + if (adoptProblem && (adoptFlag.isSet(INIT_MESH) || adoptFlag.isSet(INIT_SYSTEM) || adoptFlag.isSet(INIT_FE_SPACE))) @@ -244,24 +255,26 @@ namespace AMDiS { } } - if(!mesh_) WARNING("no mesh created\n"); + if (!mesh_) + WARNING("no mesh created\n"); // === create fespace === - if(feSpace_) { + if (feSpace_) { WARNING("feSpace already created\n"); } else { - if(initFlag.isSet(INIT_FE_SPACE) || (initFlag.isSet(INIT_SYSTEM)&&!adoptFlag.isSet(INIT_FE_SPACE))) { + if (initFlag.isSet(INIT_FE_SPACE) || (initFlag.isSet(INIT_SYSTEM)&&!adoptFlag.isSet(INIT_FE_SPACE))) { createFESpace(); } - if(adoptProblem && - (adoptFlag.isSet(INIT_FE_SPACE) || adoptFlag.isSet(INIT_SYSTEM))) + if (adoptProblem && + (adoptFlag.isSet(INIT_FE_SPACE) || adoptFlag.isSet(INIT_SYSTEM))) { TEST_EXIT(!feSpace_)("feSpace already created"); feSpace_ = dynamic_cast<ProblemScal*>(adoptProblem)->getFESpace(); } } - if(!feSpace_) WARNING("no feSpace created\n"); + if (!feSpace_) + WARNING("no feSpace created\n"); // === create system === if (initFlag.isSet(INIT_SYSTEM)) { @@ -305,25 +318,27 @@ namespace AMDiS { } } - if(!estimator_) WARNING("no estimator created\n"); + if (!estimator_) + WARNING("no estimator created\n"); // === create marker === - if(marker_) { + if (marker_) { WARNING("marker already created\n"); } else { - if(initFlag.isSet(INIT_MARKER)) { + if (initFlag.isSet(INIT_MARKER)) { createMarker(); } - if(adoptProblem && adoptFlag.isSet(INIT_MARKER)) { + if (adoptProblem && adoptFlag.isSet(INIT_MARKER)) { TEST_EXIT(!marker_)("marker already created\n"); marker_ = adoptProblem->getMarker(); } } - if(!marker_) WARNING("no marker created\n"); + if (!marker_) + WARNING("no marker created\n"); // === create file writer === - if(initFlag.isSet(INIT_FILEWRITER)) { + if (initFlag.isSet(INIT_FILEWRITER)) { createFileWriter(); } @@ -371,11 +386,13 @@ namespace AMDiS { mesh_->clearMacroFileInfo(); } - + // === do global refinements === - int globalRefinements = 0; - GET_PARAMETER(0, mesh_->getName() + "->global refinements", "%d", &globalRefinements); - refinementManager_->globalRefine(mesh_, globalRefinements); + if (initFlag.isSet(INIT_GLOBAL_REFINES)) { + int globalRefinements = 0; + GET_PARAMETER(0, mesh_->getName() + "->global refinements", "%d", &globalRefinements); + refinementManager_->globalRefine(mesh_, globalRefinements); + } } } } diff --git a/AMDiS/src/ProblemScal.h b/AMDiS/src/ProblemScal.h index 8a6699df..3906d2f9 100644 --- a/AMDiS/src/ProblemScal.h +++ b/AMDiS/src/ProblemScal.h @@ -29,6 +29,7 @@ #include "FixVec.h" #include "Boundary.h" #include "StandardProblemIteration.h" +#include "ProblemVec.h" #include <list> namespace AMDiS { @@ -358,6 +359,11 @@ namespace AMDiS { * \{ */ + /** \brief + * Sets \ref mesh_ + */ + void setMeshFromProblemVec(ProblemVec* pv, int i = 0); + /** \brief * Sets \ref feSpace_. */ diff --git a/AMDiS/src/ProblemStatBase.h b/AMDiS/src/ProblemStatBase.h index 4a6731ba..f068671f 100644 --- a/AMDiS/src/ProblemStatBase.h +++ b/AMDiS/src/ProblemStatBase.h @@ -43,6 +43,7 @@ namespace AMDiS { const Flag INIT_MARKER = 0X40L; const Flag INIT_ADAPT = 0X80L; const Flag INIT_FILEWRITER = 0X100L; + const Flag INIT_GLOBAL_REFINES = 0X1000L; // For time dependent problems const Flag INIT_INITIAL_PROBLEM = 0X200L; @@ -57,7 +58,8 @@ namespace AMDiS { const Flag INIT_ALL = INIT_FE_SPACE | INIT_MESH | CREATE_MESH | INIT_SYSTEM | INIT_SOLVER | INIT_ESTIMATOR | INIT_MARKER | INIT_ADAPT | INIT_FILEWRITER | INIT_INITIAL_PROBLEM | - INIT_UH_OLD | INIT_UPDATER | INIT_NONLIN_SOLVER ; + INIT_UH_OLD | INIT_UPDATER | INIT_NONLIN_SOLVER | + INIT_GLOBAL_REFINES ; const Flag MESH_REFINED = 1; const Flag MESH_COARSENED = 2; -- GitLab