Liebe Gitlab-Nutzerin, lieber Gitlab-Nutzer,
es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Die Konten 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 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
......
...@@ -322,7 +322,7 @@ namespace AMDiS { ...@@ -322,7 +322,7 @@ namespace AMDiS {
} }
if (D2uhqp == NULL && degree > 2 && (*it)->secondOrderTerms()) { if (D2uhqp == NULL && degree > 2 && (*it)->secondOrderTerms()) {
D2uhqp = new WorldMatrix<double>[nPoints]; D2uhqp = new WorldMatrix<double>[nPoints];
uh[system]->getD2AtQPs(elInfo, NULL, quadFast[system], D2uhqp); uh[system]->getD2AtQPs(elInfo, NULL, quadFast[system], D2uhqp);
} }
} }
} }
...@@ -533,11 +533,13 @@ namespace AMDiS { ...@@ -533,11 +533,13 @@ namespace AMDiS {
if (factor) { if (factor) {
if (D2UhIq) if (D2UhIq)
(*it)->evalSecondOrder(nPoints, uhIq, grdUhIq, D2UhIq, result, -factor); (*it)->evalSecondOrder(nPoints, uhIq, grdUhIq, D2UhIq, result, -factor);
if (grdUhIq) { if (grdUhIq) {
(*it)->evalFirstOrderGrdPsi(nPoints, uhIq, grdUhIq, D2UhIq, result, factor); (*it)->evalFirstOrderGrdPsi(nPoints, uhIq, grdUhIq, D2UhIq,
(*it)->evalFirstOrderGrdPhi(nPoints, uhIq, grdUhIq, D2UhIq, result, factor); result, factor);
(*it)->evalFirstOrderGrdPhi(nPoints, uhIq, grdUhIq, D2UhIq,
result, factor);
} }
if (num_rows(uhIq) > 0) if (num_rows(uhIq) > 0)
......
...@@ -59,7 +59,7 @@ namespace AMDiS { ...@@ -59,7 +59,7 @@ namespace AMDiS {
* \ingroup Estimator * \ingroup Estimator
* *
* \brief * \brief
* Estimator for scalar problems. * Residual estimator.
*/ */
class ResidualEstimator : public Estimator class ResidualEstimator : public Estimator
{ {
...@@ -88,8 +88,8 @@ namespace AMDiS { ...@@ -88,8 +88,8 @@ namespace AMDiS {
virtual void init(double timestep); virtual void init(double timestep);
/** \brief /** \brief
* Estimates the error on an element. For more information about the parameter, * Estimates the error on an element. For more information about the
* see the description \ref Estimator::estimateElement. * parameter, see the description \ref Estimator::estimateElement.
*/ */
virtual void estimateElement(ElInfo *elInfo, DualElInfo *dualElInfo = NULL); virtual void estimateElement(ElInfo *elInfo, DualElInfo *dualElInfo = NULL);
......
//
// Software License for AMDiS
//
// Copyright (c) 2010 Dresden University of Technology
// All rights reserved.
// Authors: Simon Vey, Thomas Witkowski et al.
//
// This file is part of AMDiS
//
// See also license.opensource.txt in the distribution.
#include "est/SimpleResidualEstimator.h"
#include "Operator.h"
#include "DOFMatrix.h"
#include "DOFVector.h"
#include "Assembler.h"
#include "Traverse.h"
#include "Initfile.h"
namespace AMDiS {