Commit e43e8013 authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

SimpleResidualEstimator ready and documented.

parent 97be72e8
...@@ -92,7 +92,6 @@ SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc ...@@ -92,7 +92,6 @@ SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc
${SOURCE_DIR}/Element.cc ${SOURCE_DIR}/Element.cc
${SOURCE_DIR}/ElementData.cc ${SOURCE_DIR}/ElementData.cc
${SOURCE_DIR}/ElementDofIterator.cc ${SOURCE_DIR}/ElementDofIterator.cc
${SOURCE_DIR}/Estimator.cc
${SOURCE_DIR}/FiniteElemSpace.cc ${SOURCE_DIR}/FiniteElemSpace.cc
${SOURCE_DIR}/FirstOrderAssembler.cc ${SOURCE_DIR}/FirstOrderAssembler.cc
${SOURCE_DIR}/FirstOrderTerm.cc ${SOURCE_DIR}/FirstOrderTerm.cc
...@@ -123,12 +122,10 @@ SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc ...@@ -123,12 +122,10 @@ SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc
${SOURCE_DIR}/Quadrature.cc ${SOURCE_DIR}/Quadrature.cc
${SOURCE_DIR}/RCNeighbourList.cc ${SOURCE_DIR}/RCNeighbourList.cc
${SOURCE_DIR}/Recovery.cc ${SOURCE_DIR}/Recovery.cc
${SOURCE_DIR}/RecoveryEstimator.cc
${SOURCE_DIR}/RefinementManager.cc ${SOURCE_DIR}/RefinementManager.cc
${SOURCE_DIR}/RefinementManager1d.cc ${SOURCE_DIR}/RefinementManager1d.cc
${SOURCE_DIR}/RefinementManager2d.cc ${SOURCE_DIR}/RefinementManager2d.cc
${SOURCE_DIR}/RefinementManager3d.cc ${SOURCE_DIR}/RefinementManager3d.cc
${SOURCE_DIR}/ResidualEstimator.cc
${SOURCE_DIR}/RobinBC.cc ${SOURCE_DIR}/RobinBC.cc
${SOURCE_DIR}/ScalableQuadrature.cc ${SOURCE_DIR}/ScalableQuadrature.cc
${SOURCE_DIR}/SecondOrderAssembler.cc ${SOURCE_DIR}/SecondOrderAssembler.cc
...@@ -147,6 +144,10 @@ SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc ...@@ -147,6 +144,10 @@ SET(AMDIS_SRC ${SOURCE_DIR}/AdaptBase.cc
${SOURCE_DIR}/VertexVector.cc ${SOURCE_DIR}/VertexVector.cc
${SOURCE_DIR}/ZeroOrderAssembler.cc ${SOURCE_DIR}/ZeroOrderAssembler.cc
${SOURCE_DIR}/ZeroOrderTerm.cc ${SOURCE_DIR}/ZeroOrderTerm.cc
${SOURCE_DIR}/est/Estimator.cc
${SOURCE_DIR}/est/RecoveryEstimator.cc
${SOURCE_DIR}/est/ResidualEstimator.cc
${SOURCE_DIR}/est/SimpleResidualEstimator.cc
${SOURCE_DIR}/io/ArhReader.cc ${SOURCE_DIR}/io/ArhReader.cc
${SOURCE_DIR}/io/ArhWriter.cc ${SOURCE_DIR}/io/ArhWriter.cc
${SOURCE_DIR}/io/DataCollector.cc ${SOURCE_DIR}/io/DataCollector.cc
...@@ -345,6 +346,11 @@ INSTALL(FILES ${HEADERS} ...@@ -345,6 +346,11 @@ INSTALL(FILES ${HEADERS}
DESTINATION include/amdis/nonlin/) DESTINATION include/amdis/nonlin/)
list(APPEND deb_add_dirs "include/amdis/nonlin") list(APPEND deb_add_dirs "include/amdis/nonlin")
FILE(GLOB HEADERS "${SOURCE_DIR}/est/*.h")
INSTALL(FILES ${HEADERS}
DESTINATION include/amdis/est/)
list(APPEND deb_add_dirs "include/amdis/est")
FILE(GLOB HEADERS "${SOURCE_DIR}/time/*.h") FILE(GLOB HEADERS "${SOURCE_DIR}/time/*.h")
INSTALL(FILES ${HEADERS} INSTALL(FILES ${HEADERS}
DESTINATION include/amdis/time/) DESTINATION include/amdis/time/)
......
...@@ -59,7 +59,6 @@ ...@@ -59,7 +59,6 @@
#include "Element.h" #include "Element.h"
#include "ElementDofIterator.h" #include "ElementDofIterator.h"
#include "Error.h" #include "Error.h"
#include "Estimator.h"
#include "FiniteElemSpace.h" #include "FiniteElemSpace.h"
#include "FirstOrderTerm.h" #include "FirstOrderTerm.h"
#include "FixVec.h" #include "FixVec.h"
...@@ -112,6 +111,8 @@ ...@@ -112,6 +111,8 @@
#include "VertexVector.h" #include "VertexVector.h"
#include "ZeroOrderTerm.h" #include "ZeroOrderTerm.h"
#include "est/Estimator.h"
#include "io/ArhReader.h" #include "io/ArhReader.h"
#include "io/ArhWriter.h" #include "io/ArhWriter.h"
#include "io/FileWriter.h" #include "io/FileWriter.h"
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "AdaptInstationary.h" #include "AdaptInstationary.h"
#include "Initfile.h" #include "Initfile.h"
#include "Estimator.h" #include "est/Estimator.h"
#include "ProblemIterationInterface.h" #include "ProblemIterationInterface.h"
#include "ProblemTimeInterface.h" #include "ProblemTimeInterface.h"
#include "Serializer.h" #include "Serializer.h"
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "AdaptStationary.h" #include "AdaptStationary.h"
#include "Initfile.h" #include "Initfile.h"
#include "Estimator.h" #include "est/Estimator.h"
#include "ProblemIterationInterface.h" #include "ProblemIterationInterface.h"
#include <math.h> #include <math.h>
......
...@@ -69,7 +69,7 @@ namespace AMDiS { ...@@ -69,7 +69,7 @@ namespace AMDiS {
return; return;
} }
} }
ElementMatrix& mat = rememberElMat ? elementMatrix : userMat; ElementMatrix& mat = rememberElMat ? elementMatrix : userMat;
if (secondOrderAssembler) if (secondOrderAssembler)
...@@ -315,8 +315,8 @@ namespace AMDiS { ...@@ -315,8 +315,8 @@ namespace AMDiS {
FUNCNAME("Assembler::matVecAssemble()"); FUNCNAME("Assembler::matVecAssemble()");
Element *el = elInfo->getElement(); Element *el = elInfo->getElement();
ElementVector uhOldLoc(operat->uhOld->getFeSpace() == rowFeSpace ? nRow : nCol); ElementVector uhOldLoc(operat->uhOld->getFeSpace() == rowFeSpace ?
nRow : nCol);
operat->uhOld->getLocalVector(el, uhOldLoc); operat->uhOld->getLocalVector(el, uhOldLoc);
if (el != lastMatEl) { if (el != lastMatEl) {
......
...@@ -17,14 +17,15 @@ ...@@ -17,14 +17,15 @@
#include "ITL_Preconditioner.h" #include "ITL_Preconditioner.h"
#include "MatrixVector.h" #include "MatrixVector.h"
#include "SystemVector.h" #include "SystemVector.h"
#include "Estimator.h" #include "est/Estimator.h"
#include "RecoveryEstimator.h"
#include "ResidualEstimator.h"
#include "LeafData.h" #include "LeafData.h"
#include "SurfaceRegion_ED.h" #include "SurfaceRegion_ED.h"
#include "ElementRegion_ED.h" #include "ElementRegion_ED.h"
#include "DOFMatrix.h" #include "DOFMatrix.h"
#include "UmfPackSolver.h" #include "UmfPackSolver.h"
#include "est/RecoveryEstimator.h"
#include "est/ResidualEstimator.h"
#include "est/SimpleResidualEstimator.h"
#include "time/RosenbrockMethod.h" #include "time/RosenbrockMethod.h"
#include "nonlin/NonLinSolver.h" #include "nonlin/NonLinSolver.h"
...@@ -102,6 +103,9 @@ namespace AMDiS { ...@@ -102,6 +103,9 @@ namespace AMDiS {
creator = new ResidualEstimator::Creator; creator = new ResidualEstimator::Creator;
addCreator("residual", creator); addCreator("residual", creator);
creator = new SimpleResidualEstimator::Creator;
addCreator("simple-residual", creator);
creator = new RecoveryEstimator::Creator; creator = new RecoveryEstimator::Creator;
addCreator("recovery", creator); addCreator("recovery", creator);
} }
......
...@@ -56,10 +56,12 @@ namespace AMDiS { ...@@ -56,10 +56,12 @@ namespace AMDiS {
dimOfWorld = Global::getGeo(WORLD); dimOfWorld = Global::getGeo(WORLD);
} }
ElInfo::~ElInfo() ElInfo::~ElInfo()
{} {}
void ElInfo::coordToWorld(const DimVec<double>& l, void ElInfo::coordToWorld(const DimVec<double>& l,
WorldVector<double>& w) const WorldVector<double>& w) const
...@@ -80,12 +82,14 @@ namespace AMDiS { ...@@ -80,12 +82,14 @@ namespace AMDiS {
} }
} }
double ElInfo::calcDet() const double ElInfo::calcDet() const
{ {
testFlag(Mesh::FILL_COORDS); testFlag(Mesh::FILL_COORDS);
return calcDet(coord); return calcDet(coord);
} }
double ElInfo::calcDet(const FixVec<WorldVector<double>, VERTEX> &coords) const double ElInfo::calcDet(const FixVec<WorldVector<double>, VERTEX> &coords) const
{ {
FUNCNAME("ElInfo::calcDet()"); FUNCNAME("ElInfo::calcDet()");
...@@ -114,10 +118,8 @@ namespace AMDiS { ...@@ -114,10 +118,8 @@ namespace AMDiS {
det = norm(&e1); det = norm(&e1);
} else { } else {
det = (coords[1][0] - coords[0][0]) * (coords[2][1] - coords[0][1]) - det = (coords[1][0] - coords[0][0]) * (coords[2][1] - coords[0][1]) -
(coords[1][1] - coords[0][1]) * (coords[2][0] - coords[0][0]); (coords[1][1] - coords[0][1]) * (coords[2][0] - coords[0][0]);
} }
break; break;
case 3: case 3:
......
...@@ -735,13 +735,13 @@ namespace AMDiS { ...@@ -735,13 +735,13 @@ namespace AMDiS {
vectorProduct(elementNormal, e0, normal); vectorProduct(elementNormal, e0, normal);
} }
double det = norm(&normal); double detn = norm(&normal);
TEST_EXIT_DBG(det > 1.e-30)("det = 0 on face %d\n", side); TEST_EXIT_DBG(detn > 1.e-30)("det = 0 on face %d\n", side);
normal *= 1.0 / det; normal *= 1.0 / detn;
return det; return detn;
} }
...@@ -762,13 +762,13 @@ namespace AMDiS { ...@@ -762,13 +762,13 @@ namespace AMDiS {
vectorProduct(e0, e1, elementNormal); vectorProduct(e0, e1, elementNormal);
double det = norm(&elementNormal); double detn = norm(&elementNormal);
TEST_EXIT_DBG(det > 1.e-30)("det = 0"); TEST_EXIT_DBG(detn > 1.e-30)("det = 0");
elementNormal *= 1.0 / det; elementNormal *= 1.0 / detn;
return det; return detn;
} }
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
#include "ProblemInstat.h" #include "ProblemInstat.h"
#include "AdaptStationary.h" #include "AdaptStationary.h"
#include "AdaptInstationary.h" #include "AdaptInstationary.h"
#include "Estimator.h"
#include "StandardProblemIteration.h" #include "StandardProblemIteration.h"
#include "est/Estimator.h"
#include "io/FileWriter.h" #include "io/FileWriter.h"
namespace AMDiS { namespace AMDiS {
......
...@@ -14,14 +14,12 @@ ...@@ -14,14 +14,12 @@
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include "ProblemStat.h" #include "ProblemStat.h"
#include "RecoveryEstimator.h"
#include "Serializer.h" #include "Serializer.h"
#include "AbstractFunction.h" #include "AbstractFunction.h"
#include "Operator.h" #include "Operator.h"
#include "SystemVector.h" #include "SystemVector.h"
#include "DOFMatrix.h" #include "DOFMatrix.h"
#include "FiniteElemSpace.h" #include "FiniteElemSpace.h"
#include "Estimator.h"
#include "Marker.h" #include "Marker.h"
#include "AdaptInfo.h" #include "AdaptInfo.h"
#include "io/FileWriter.h" #include "io/FileWriter.h"
...@@ -35,6 +33,7 @@ ...@@ -35,6 +33,7 @@
#include "PeriodicBC.h" #include "PeriodicBC.h"
#include "Lagrange.h" #include "Lagrange.h"
#include "Flag.h" #include "Flag.h"
#include "est/Estimator.h"
#include "io/VtkWriter.h" #include "io/VtkWriter.h"
#include "io/ValueReader.h" #include "io/ValueReader.h"
#include "ProblemStatDbg.h" #include "ProblemStatDbg.h"
...@@ -790,6 +789,8 @@ namespace AMDiS { ...@@ -790,6 +789,8 @@ namespace AMDiS {
if (matrix) if (matrix)
nnz += matrix->getBaseMatrix().nnz(); nnz += matrix->getBaseMatrix().nnz();
} }
// And now assemble boundary conditions on the vectors // And now assemble boundary conditions on the vectors
assembleBoundaryConditions(rhs->getDOFVector(i), assembleBoundaryConditions(rhs->getDOFVector(i),
......
...@@ -11,11 +11,12 @@ ...@@ -11,11 +11,12 @@
#include "RobinBC.h" #include "RobinBC.h"
#include "Estimator.h"
#include "Assembler.h" #include "Assembler.h"
#include "DOFVector.h" #include "DOFVector.h"
#include "DOFMatrix.h" #include "DOFMatrix.h"
#include "SurfaceOperator.h" #include "SurfaceOperator.h"
#include "est/Estimator.h"
#include <math.h> #include <math.h>
namespace AMDiS { namespace AMDiS {
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
// See also license.opensource.txt in the distribution. // See also license.opensource.txt in the distribution.
#include "Estimator.h"
#include "Assembler.h" #include "Assembler.h"
#include "est/Estimator.h"
template<typename T> template<typename T>
void RobinBC<T>::fillLocalBC(DOFVector<T>* vector, void RobinBC<T>::fillLocalBC(DOFVector<T>* vector,
......
...@@ -77,9 +77,9 @@ namespace AMDiS { ...@@ -77,9 +77,9 @@ namespace AMDiS {
newAssembler = new Stand2(op, assembler, quad); newAssembler = new Stand2(op, assembler, quad);
} else { } else {
if (pwConst) { if (pwConst) {
newAssembler = new Pre2(op, assembler, quad); newAssembler = new Pre2(op, assembler, quad);
} else { } else {
newAssembler = new Quad2(op, assembler, quad); newAssembler = new Quad2(op, assembler, quad);
} }
} }
...@@ -330,7 +330,7 @@ namespace AMDiS { ...@@ -330,7 +330,7 @@ namespace AMDiS {
for (int i = 0; i < nRow; i++) { for (int i = 0; i < nRow; i++) {
(*(psi->getGrdPhi(i)))(quadrature->getLambda(iq), grdPsi); (*(psi->getGrdPhi(i)))(quadrature->getLambda(iq), grdPsi);
for (int j = 0; j < nCol; j++) { for (int j = 0; j < nCol; j++) {
tmpVec = (LALt[iq] * grdPhi[j]); tmpVec = (LALt[iq] * grdPhi[j]);
mat[i][j] += quadrature->getWeight(iq) * dot(grdPsi, tmpVec); mat[i][j] += quadrature->getWeight(iq) * dot(grdPsi, tmpVec);
} }
} }
......
...@@ -132,7 +132,8 @@ namespace AMDiS { ...@@ -132,7 +132,8 @@ namespace AMDiS {
} }
/// Implements SecondOrderTerm::getLALt(). /// Implements SecondOrderTerm::getLALt().
inline void getLALt(const ElInfo *elInfo, vector<mtl::dense2D<double> > &LALt) const inline void getLALt(const ElInfo *elInfo,
vector<mtl::dense2D<double> > &LALt) const
{ {
const DimVec<WorldVector<double> > &grdLambda = elInfo->getGrdLambda(); const DimVec<WorldVector<double> > &grdLambda = elInfo->getGrdLambda();
const int nPoints = static_cast<int>(LALt.size()); const int nPoints = static_cast<int>(LALt.size());
......
...@@ -52,16 +52,16 @@ namespace AMDiS { ...@@ -52,16 +52,16 @@ namespace AMDiS {
} }
const FixVec<int, WORLD>& Triangle::sortFaceIndices(int face, const FixVec<int, WORLD>& Triangle::sortFaceIndices(int face,
FixVec<int,WORLD> *vec) const FixVec<int, WORLD> *vec) const
{ {
static MatrixOfFixVecs<FixVec<int,WORLD> > *sorted_2d = NULL; static MatrixOfFixVecs<FixVec<int, WORLD> > *sorted_2d = NULL;
int no = 0; int no = 0;
FixVec<int,WORLD> *val = NULL; FixVec<int, WORLD> *val = NULL;
const int *vof = vertexOfEdge[face]; const int *vof = vertexOfEdge[face];
if (NULL == sorted_2d) { if (NULL == sorted_2d) {
sorted_2d = new MatrixOfFixVecs<FixVec<int,WORLD> >(2, 3, 2, NO_INIT); sorted_2d = new MatrixOfFixVecs<FixVec<int, WORLD> >(2, 3, 2, NO_INIT);
(*sorted_2d)[1][0][1] = (*sorted_2d)[1][1][0] = (*sorted_2d)[1][0][1] = (*sorted_2d)[1][1][0] =
(*sorted_2d)[2][0][0] = (*sorted_2d)[2][1][1] = 0; (*sorted_2d)[2][0][0] = (*sorted_2d)[2][1][1] = 0;
...@@ -83,7 +83,7 @@ namespace AMDiS { ...@@ -83,7 +83,7 @@ namespace AMDiS {
val = &((*sorted_2d)[face][no]); val = &((*sorted_2d)[face][no]);
} }
return *(const_cast<const FixVec<int,WORLD>* >(val)); return *(const_cast<const FixVec<int, WORLD>* >(val));
} }
......
...@@ -95,7 +95,7 @@ namespace AMDiS { ...@@ -95,7 +95,7 @@ namespace AMDiS {
bool hasSide(Element* sideElem) const; bool hasSide(Element* sideElem) const;
/// implements Element::sortFaceIndices /// implements Element::sortFaceIndices
const FixVec<int,WORLD>& sortFaceIndices(int face, FixVec<int,WORLD> *vec) const; const FixVec<int, WORLD>& sortFaceIndices(int face, FixVec<int, WORLD> *vec) const;
/// implements Element::isLine. Returns false because this element is a Triangle /// implements Element::isLine. Returns false because this element is a Triangle
inline bool isLine() const inline bool isLine() const
......
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