33#ifndef __H__UG__LIB_DISC__FUNCTION_SPACES__INTEGRATE__
34#define __H__UG__LIB_DISC__FUNCTION_SPACES__INTEGRATE__
63template <
typename TGr
idFunction>
96 template <
typename TElem>
97 size_t dof_indices(TElem* elem, std::vector<DoFIndex>& ind,
bool bHang =
false,
bool bClear =
true)
const
118template <
typename TData,
int TWorldDim>
146 const size_t numIP) = 0;
153 const size_t numIP) = 0;
160 const size_t numIP) = 0;
178template <
typename TData,
int TWorldDim,
typename TImpl>
198 getImpl().template evaluate<1>(vValue,vGlobIP,pElem,vCornerCoords,vLocIP,vJT,numIP);
208 getImpl().template evaluate<2>(vValue,vGlobIP,pElem,vCornerCoords,vLocIP,vJT,numIP);
218 getImpl().template evaluate<3>(vValue,vGlobIP,pElem,vCornerCoords,vLocIP,vJT,numIP);
224 TImpl&
getImpl() {
return static_cast<TImpl&
>(*this);}
227 const TImpl&
getImpl()
const {
return static_cast<const TImpl&
>(*this);}
258template <
int WorldDim,
int dim,
typename TConstIterator>
260 TConstIterator iterEnd,
263 int quadOrder, std::string quadType,
266 *paaElemContribs = NULL
276 TConstIterator iter = iterBegin;
283 if(quadType.empty()) quadType =
"best";
289 aaElemContribs = *paaElemContribs;
292 std::vector<MathVector<WorldDim> > vCorner;
293 std::vector<MathVector<WorldDim> > vGlobIP;
294 std::vector<MathMatrix<dim, WorldDim> > vJT;
295 std::vector<number> vValue;
298 for(; iter != iterEnd; ++iter)
301 grid_base_object* pElem = *iter;
313 = ReferenceMappingProvider::get<dim, WorldDim>(roid);
316 const size_t numIP = rQuadRule.
size();
322 mapping.
update(&vCorner[0]);
325 vGlobIP.resize(numIP);
333 vValue.resize(numIP);
336 integrand.
values(&(vValue[0]), &(vGlobIP[0]),
337 pElem, &vCorner[0], rQuadRule.
points(),
341 UG_CATCH_THROW(
"Unable to compute values of integrand at integration point.");
347 for(
size_t ip = 0; ip < numIP; ++ip)
356 intValElem += vValue[ip] * weightIP * det;
360 integral += intValElem;
361 if(aaElemContribs.
valid())
362 aaElemContribs[pElem] = intValElem;
371template <
typename TGr
idFunction,
int dim>
373 TGridFunction& spGridFct,
374 int si,
int quadOrder, std::string quadType)
377 typedef typename TGridFunction::template dim_traits<dim>::grid_base_object grid_base_object;
378 typedef typename TGridFunction::template dim_traits<dim>::const_iterator const_iterator;
382 return Integrate<TGridFunction::dim,dim,const_iterator>
383 (spGridFct.template begin<grid_base_object>(si),
384 spGridFct.template end<grid_base_object>(si),
385 spGridFct.domain()->position_accessor(),
387 quadOrder, quadType);
391template <
typename TGr
idFunction>
393 TGridFunction& spGridFct,
394 const char* subsets,
int quadOrder,
395 std::string quadType = std::string())
398 static const int dim = TGridFunction::dim;
401 SubsetGroup ssGrp(spGridFct.domain()->subset_handler());
406 "Cannot integrate on subsets of different dimensions.");
407 UG_LOG(
"IntegrateSubsets for subsets="<<subsets<<
"\n");
420 for(
size_t i = 0; i < ssGrp.
size(); ++i)
423 const int si = ssGrp[i];
426 UG_COND_THROW(ssGrp.
dim(i) > dim,
"IntegrateSubsets: Dimension of subset is "<<ssGrp.
dim(i)<<
", but "
427 " world dimension is "<<dim<<
". Cannot integrate this.");
434 case 1: value += IntegrateSubset<TGridFunction, 1>(spIntegrand, spGridFct, si, quadOrder, quadType);
break;
435 case 2: value += IntegrateSubset<TGridFunction, 2>(spIntegrand, spGridFct, si, quadOrder, quadType);
break;
436 case 3: value += IntegrateSubset<TGridFunction, 3>(spIntegrand, spGridFct, si, quadOrder, quadType);
break;
437 default:
UG_THROW(
"IntegrateSubsets: Dimension "<<ssGrp.
dim(i)<<
" not supported. "
438 " World dimension is "<<dim<<
".");
441 UG_CATCH_THROW(
"IntegrateSubsets: Integration failed on subset "<<si);
464template <
typename TData,
typename TGr
idFunction>
466 :
public StdIntegrand<TData, TGridFunction::dim, UserDataIntegrand<TData, TGridFunction> >
488 TGridFunction* spGridFct,
492 m_spData->set_function_pattern(spGridFct->function_pattern());
501 "UserDataIntegrand: Missing GridFunction, but data requires grid function.");
505 template <
int elemDim>
532 (*m_spData)(vValue, vGlobIP,
m_time, this->
m_si, pElem,
533 vCornerCoords, vLocIP, numIP, &u, &vJT[0]);
541 (*m_spData)(vValue, vGlobIP,
m_time, this->
m_si, numIP);
553template <
typename TData,
typename TGr
idFunction>
555 :
public StdIntegrand<number, TGridFunction::dim, UserDataIntegrandSq<TData, TGridFunction> >
577 const TGridFunction* pGridFct,
581 m_spData->set_function_pattern(pGridFct->function_pattern());
590 UG_THROW(
"UserDataIntegrand: Missing GridFunction, but "
591 " data requires grid function.")
596 template <
int elemDim>
606 std::vector<TData> tmpValues(numIP);
627 (*m_spData)(&tmpValues.front(), vGlobIP,
m_time, this->
m_si, pElem,
628 vCornerCoords, vLocIP, numIP, &u, &vJT[0]);
636 (*m_spData)(&tmpValues.front(), vGlobIP,
m_time, this->
m_si, numIP);
641 for (
size_t i=0; i<numIP; ++i)
643 vValue[i]=
inner_prod(tmpValues[i], tmpValues[i]);
657 {
UG_ASSERT(0,
"NOT IMPLEMENTED");
return 0.0;}
664template <
typename TData,
typename TGr
idFunction>
666 :
public StdIntegrand<number, TGridFunction::dim, UserDataDistIntegrandSq<TData, TGridFunction> >
693 TGridFunction& coarseGridFct,
size_t coarseCmp)
699 UG_THROW(
"UserDataDistIntegrandSq: fine and top level inverted.");
702 UG_THROW(
"UserDataDistIntegrandSq: grid functions defined on different domains.");
711 UG_THROW(
"UserDataDistIntegrandSq: Grid function component"
712 <<
m_fineData.fct()<<
" not defined on subset "<<si);
714 UG_THROW(
"UserDataDistIntegrandSq: Grid function component"
720 template <
int elemDim>
732 if(!
m_spData->requires_grid_fct()) {
733 for (
size_t i=0; i<numIP; ++i) { vValue[i]=0.0; }
740 int parentLevel =
m_spMG->get_level(pCoarseElem);
742 pCoarseElem =
m_spMG->get_parent(pCoarseElem);
743 parentLevel =
m_spMG->get_level(pCoarseElem);
748 typedef typename TGridFunction::template dim_traits<elemDim>::grid_base_object TElem;
749 std::vector<MathVector<worldDim> > vCornerCoarse;
755 = ReferenceMappingProvider::get<elemDim, worldDim>(coarseROID, vCornerCoarse);
757 std::vector<MathVector<elemDim> > vCoarseLocIP;
758 vCoarseLocIP.resize(numIP);
759 for(
size_t ip = 0; ip < vCoarseLocIP.size(); ++ip)
VecSet(vCoarseLocIP[ip], 0.0);
780 std::vector<TData> fineValues(numIP);
781 std::vector<TData> coarseValues(numIP);
790 m_coarseData.grid_function().indices(pCoarseElem, indCoarse);
791 uCoarse.
resize(indCoarse);
794 (*m_spData)(&(coarseValues[0]), vGlobIP,
m_time, this->
m_si, pCoarseElem,
795 &vCornerCoarse[0], &vCoarseLocIP[0], numIP, &uCoarse, &vJT[0]);
796 }
UG_CATCH_THROW(
"UserDataDistIntegrandSq: Cannot evaluate coarse data.");
804 m_fineData.grid_function().indices(pFineElem, indFine);
808 (*m_spData)(&(fineValues[0]), vGlobIP,
m_time, this->
m_si, pFineElem,
809 vCornerCoords, vFineLocIP, numIP, &uFine, &vJT[0]);
810 }
UG_CATCH_THROW(
"UserDataDistIntegrandSq: Cannot evaluate fine data.");
813 for(
size_t ip = 0; ip < numIP; ++ip)
815 vValue[ip] =
inner_dist2(fineValues[ip], coarseValues[ip]);
831 {
UG_ASSERT(0,
"NOT IMPLEMENTED");
return 0.0;}
836 {
return (v1-v2)*(v1-v2); }
843 {
UG_ASSERT(0,
"NOT IMPLEMENTED");
return 0.0;}
854template <
typename TGr
idFunction>
856 TGridFunction& spGridFct,
857 const char* subsets,
number time,
858 int quadOrder, std::string quadType)
861 return IntegrateSubsets(spIntegrand, spGridFct, subsets, quadOrder, quadType);
864template <
typename TGr
idFunction>
866 const char* subsets,
number time,
int quadOrder, std::string quadType)
867{
return Integral(spData, *spGridFct, subsets, time, quadOrder, quadType); }
869template <
typename TGr
idFunction>
871{
return Integral(spData, spGridFct, subsets, time, order,
"best");}
873template <
typename TGr
idFunction>
875{
return Integral(spData, spGridFct, subsets, time, 1,
"best");}
877template <
typename TGr
idFunction>
879{
return Integral(spData, spGridFct, NULL, time, 1,
"best");}
881template <
typename TGr
idFunction>
883{
return Integral(spData, spGridFct, subsets, 0.0, 1,
"best");}
885template <
typename TGr
idFunction>
887{
return Integral(spData, spGridFct, NULL, 0.0, 1,
"best");}
893template <
typename TGr
idFunction>
896 number time,
int quadOrder)
898 static const int dim = TGridFunction::dim;
901 return Integral(sp, spGridFct, subsets, time, quadOrder);
904template <
typename TGr
idFunction>
906{
return Integral(val, spGridFct, subsets, time, 1);}
908template <
typename TGr
idFunction>
910{
return Integral(val, spGridFct, NULL, time, 1);}
912template <
typename TGr
idFunction>
914{
return Integral(val, spGridFct, subsets, 0.0, 1);}
916template <
typename TGr
idFunction>
918{
return Integral(val, spGridFct, NULL, 0.0, 1);}
925template <
typename TGr
idFunction>
928 const char* subsets,
number time,
929 int quadOrder, std::string quadType)
931 static const int dim = TGridFunction::dim;
934 return Integral(sp, *spGridFct, subsets, time, quadOrder, quadType);
937template <
typename TGr
idFunction>
939{
return Integral(luaFct, spGridFct, subsets, time, quadOrder,
"best");}
941template <
typename TGr
idFunction>
943{
return Integral(luaFct, spGridFct, subsets, time, 1,
"best");}
945template <
typename TGr
idFunction>
947{
return Integral(luaFct, spGridFct, NULL, time, 1,
"best");}
949template <
typename TGr
idFunction>
951{
return Integral(luaFct, spGridFct, subsets, 0.0, 1,
"best");}
953template <
typename TGr
idFunction>
955{
return Integral(luaFct, spGridFct, NULL, 0.0, 1,
"best");}
961template <
typename TGr
idFunction>
963 :
public StdIntegrand<number, TGridFunction::dim, MaximumDistIntegrand<TGridFunction> >
979 m_max(-
std::numeric_limits<float>::infinity()),
980 m_min(
std::numeric_limits<float>::infinity())
995 m_min = std::numeric_limits<double>::infinity();
996 m_max = -std::numeric_limits<double>::infinity();
1003 template <
int elemDim>
1018 LocalFiniteElementProvider::get<elemDim>(roid,
m_scalarData.id());
1021 const size_t num_sh = rTrialSpace.
num_sh();
1024 std::vector<DoFIndex> ind;
1028 UG_COND_THROW(ind.size() != num_sh,
"L2ErrorIntegrand::evaluate: Wrong number of multi indices.");
1031 for(
size_t sh = 0; sh < num_sh; ++sh)
1041 }
UG_CATCH_THROW(
"L2ErrorIntegrand::evaluate: trial space missing.");
1046template <
typename TGr
idFunction>
1050 const size_t fct = gridFct.fct_id_by_name(cmp);
1052 "L2Error: Function space does not contain a function with name " << cmp <<
".");
1057 return spIntegrand.
min();
1060template <
typename TGr
idFunction>
1062{
return GetMinimum(*spGridFct, cmp, subsets); }
1069template <
typename TGr
idFunction>
1071 :
public StdIntegrand<number, TGridFunction::dim, L2ErrorIntegrand<TGridFunction> >
1089 TGridFunction& gridFct,
size_t cmp,
1101 UG_THROW(
"L2ErrorIntegrand: Grid function component"
1107 template <
int elemDim>
1122 LocalFiniteElementProvider::get<elemDim>(roid,
m_scalarData.id());
1125 const size_t num_sh = rTrialSpace.
num_sh();
1128 std::vector<DoFIndex> ind;
1132 if(ind.size() != num_sh)
1133 UG_THROW(
"L2ErrorIntegrand::evaluate: Wrong number of"
1137 for(
size_t ip = 0; ip < numIP; ++ip)
1141 (*m_spExactSolution)(exactSolIP, vGlobIP[ip],
m_time, this->
subset());
1144 number approxSolIP = 0.0;
1145 for(
size_t sh = 0; sh < num_sh; ++sh)
1151 approxSolIP += valSH * rTrialSpace.
shape(sh, vLocIP[ip]);
1155 vValue[ip] = (exactSolIP - approxSolIP);
1156 vValue[ip] *= vValue[ip];
1160 UG_CATCH_THROW(
"L2ErrorIntegrand::evaluate: trial space missing.");
1183template <
typename TGr
idFunction>
1185 TGridFunction& gridFct,
const char* cmp,
1186 number time,
int quadOrder,
const char* subsets)
1189 const size_t fct = gridFct.fct_id_by_name(cmp);
1193 "L2Error: Function space does not contain a function with name " << cmp <<
".");
1199template <
typename TGr
idFunction>
1202 number time,
int quadOrder,
const char* subsets)
1203{
return L2Error(spExactSol, *spGridFct, cmp, time, quadOrder, subsets); }
1205template <
typename TGr
idFunction>
1208 number time,
int quadOrder)
1209{
return L2Error(spExactSol, *spGridFct, cmp, time, quadOrder, NULL); }
1215template <
typename TGr
idFunction>
1218 number time,
int quadOrder,
const char* subsets)
1221 =
make_sp(
new LuaUserData<number, TGridFunction::domain_type::dim>(ExactSol));
1222 return L2Error(spExactSol, spGridFct, cmp, time, quadOrder, subsets);
1225template <
typename TGr
idFunction>
1228 number time,
int quadOrder)
1230 return L2Error(ExactSol, spGridFct, cmp, time, quadOrder, NULL);
1238template <
int worldDim,
int elemDim>
1239void CheckGeneralizedInverse(
const MathMatrix<elemDim, worldDim> &JT,
const MathMatrix<worldDim, elemDim> &JTInv)
1241 if (worldDim==elemDim)
return;
1243 MathMatrix<worldDim, elemDim> myTmp;
1248 "The inverse matrix is not identity to the map jacobian transposed inverse.");
1258template <
typename TGr
idFunction>
1260 :
public StdIntegrand<number, TGridFunction::dim, H1ErrorIntegrand<TGridFunction> >
1283 TGridFunction& gridFct,
size_t cmp,
1295 UG_THROW(
"H1Error: Grid function component"
1301 template <
int elemDim>
1314 = ReferenceMappingProvider::get<elemDim, worldDim>(roid, vCornerCoords);
1319 LocalFiniteElementProvider::get<elemDim>(roid,
m_scalarData.id());
1322 const size_t num_sh = rTrialSpace.
num_sh();
1325 std::vector<DoFIndex> ind;
1329 if(ind.size() != num_sh)
1330 UG_THROW(
"H1ErrorIntegrand::evaluate: Wrong number of"
1334 std::vector<MathVector<elemDim> > vLocGradient(num_sh);
1335 for(
size_t ip = 0; ip < numIP; ++ip)
1339 (*m_spExactSolution)(exactSolIP, vGlobIP[ip],
m_time, this->
subset());
1343 (*m_spExactGrad)(exactGradIP, vGlobIP[ip],
m_time, this->
subset());
1346 rTrialSpace.
grads(&vLocGradient[0], vLocIP[ip]);
1349 number approxSolIP = 0.0;
1351 for(
size_t sh = 0; sh < num_sh; ++sh)
1357 approxSolIP += valSH * rTrialSpace.
shape(sh, vLocIP[ip]);
1369 CheckGeneralizedInverse<worldDim,elemDim>(vJT[ip], JTInv);
1375 vValue[ip] = (exactSolIP - approxSolIP) * (exactSolIP - approxSolIP);
1380 UG_CATCH_THROW(
"H1ErrorIntegrand::evaluate: trial space missing.");
1398template <
typename TGr
idFunction>
1402 number time,
int quadOrder,
const char* subsets)
1405 const size_t fct = spGridFct->fct_id_by_name(cmp);
1408 if(fct >= spGridFct->num_fct())
1409 UG_THROW(
"H1Error: Function space does not contain"
1410 " a function with name " << cmp <<
".");
1413 return sqrt(
IntegrateSubsets(spIntegrand, *spGridFct, subsets, quadOrder));
1416template <
typename TGr
idFunction>
1420 number time,
int quadOrder)
1422 return H1Error(spExactSol, spExactGrad, spGridFct, cmp, time, quadOrder, NULL);
1426template <
typename TGr
idFunction>
1429 number time,
int quadOrder,
const char* subsets)
1431 static const int dim = TGridFunction::domain_type::dim;
1433 =
make_sp(
new LuaUserData<number, dim>(ExactSol));
1435 =
make_sp(
new LuaUserData<MathVector<dim>, dim>(ExactGrad));
1436 return H1Error(spExactSol, spExactGrad, spGridFct, cmp, time, quadOrder, subsets);
1439template <
typename TGr
idFunction>
1442 number time,
int quadOrder)
1444 return H1Error(ExactSol, ExactGrad, spGridFct, cmp, time, quadOrder, NULL);
1464template <
typename TDistIntegrand,
typename TGr
idFunction>
1466 TGridFunction& spGridFct2,
const char* cmp2,
1467 int quadOrder,
const char* subsets)
1470 const size_t fct1 = spGridFct1.fct_id_by_name(cmp1);
1471 const size_t fct2 = spGridFct2.fct_id_by_name(cmp2);
1474 if(fct1 >= spGridFct1.num_fct())
1475 UG_THROW(
"GridFunctionDistance: Function space does not contain"
1476 " a function with name " << cmp1 <<
".");
1477 if(fct2 >= spGridFct2.num_fct())
1478 UG_THROW(
"GridFunctionDistance: Function space does not contain"
1479 " a function with name " << cmp2 <<
".");
1482 const int level1 = spGridFct1.dof_distribution()->grid_level().level();
1483 const int level2 = spGridFct2.dof_distribution()->grid_level().level();
1485 if(level1 > level2){
1487 TDistIntegrand spIntegrand(spGridFct1, fct1, spGridFct2, fct2);
1490 TDistIntegrand spIntegrand(spGridFct2, fct2, spGridFct1, fct1);
1497template <
typename TDistIntegrand,
typename TGr
idFunction>
1499 TGridFunction& spGridFct2,
const char* cmp2,
1503 const size_t fct1 = spGridFct1.fct_id_by_name(cmp1);
1504 const size_t fct2 = spGridFct2.fct_id_by_name(cmp2);
1507 if(fct1 >= spGridFct1.num_fct())
1508 UG_THROW(
"GridFunctionDistance: Function space does not contain"
1509 " a function with name " << cmp1 <<
".");
1510 if(fct2 >= spGridFct2.num_fct())
1511 UG_THROW(
"GridFunctionDistance: Function space does not contain"
1512 " a function with name " << cmp2 <<
".");
1515 const int level1 = spGridFct1.dof_distribution()->grid_level().level();
1516 const int level2 = spGridFct2.dof_distribution()->grid_level().level();
1519 if(level1 > level2){
1520 TDistIntegrand spIntegrand(spGridFct1, fct1, spGridFct2, fct2, spWeights);
1523 TDistIntegrand spIntegrand(spGridFct2, fct2, spGridFct1, fct1, spWeights);
1530template <
typename TDistIntegrand,
typename TGr
idFunction>
1532 TGridFunction& spGridFct2,
const char* cmp2,
1533 int quadOrder,
const char* subsets,
1538 const size_t fct1 = spGridFct1.fct_id_by_name(cmp1);
1539 const size_t fct2 = spGridFct2.fct_id_by_name(cmp2);
1542 if(fct1 >= spGridFct1.num_fct())
1543 UG_THROW(
"GridFunctionDistance: Function space does not contain"
1544 " a function with name " << cmp1 <<
".");
1545 if(fct2 >= spGridFct2.num_fct())
1546 UG_THROW(
"GridFunctionDistance: Function space does not contain"
1547 " a function with name " << cmp2 <<
".");
1550 const int level1 = spGridFct1.dof_distribution()->grid_level().level();
1551 const int level2 = spGridFct2.dof_distribution()->grid_level().level();
1554 if(level1 > level2){
1555 TDistIntegrand spIntegrand(spGridFct1, fct1, spGridFct2, fct2, spWeights, distAvg12);
1558 TDistIntegrand spIntegrand(spGridFct2, fct2, spGridFct1, fct1, spWeights, -distAvg12);
1570template <
typename TGr
idFunction>
1572 :
public StdIntegrand<number, TGridFunction::dim, L2Integrand<TGridFunction> >
1603 UG_THROW(
"L2ErrorIntegrand: Grid function component" <<
m_scalarData.fct() <<
" not defined on subset "<<si);
1608 template <
int elemDim>
1622 std::vector<ipdata_type> locElemWeights(numIP, 1.0);
1629 LocalFiniteElementProvider::get<elemDim>(roid,
m_scalarData.id());
1632 const size_t num_sh = rTrialSpace.
num_sh();
1635 std::vector<DoFIndex> ind;
1639 if(ind.size() != num_sh)
1640 UG_THROW(
"L2Integrand::evaluate: Wrong number of multi indices.");
1643 for(
size_t ip = 0; ip < numIP; ++ip)
1647 number approxSolIP = 0.0;
1648 for(
size_t sh = 0; sh < num_sh; ++sh)
1653 approxSolIP += valSH * rTrialSpace.
shape(sh, vLocIP[ip]);
1657 vValue[ip] = locElemWeights[ip]*approxSolIP*approxSolIP;
1678template <
typename TGr
idFunction>
1680 int quadOrder,
const char* subsets,
1684 const size_t fct = u.fct_id_by_name(cmp);
1687 UG_COND_THROW(fct >= u.num_fct(),
"L2Norm: Function space does not contain"
1688 " a function with name " << cmp <<
".");
1694template <
typename TGr
idFunction>
1696 int quadOrder,
const char* subsets)
1699 const size_t fct = u.fct_id_by_name(cmp);
1702 UG_COND_THROW(fct >= u.num_fct(),
"L2Norm: Function space does not contain"
1703 " a function with name " << cmp <<
".");
1709template <
typename TGr
idFunction>
1711 int quadOrder,
const char* subsets)
1713 return sqrt(
L2Norm2(u, cmp, quadOrder, subsets));
1723template <
typename TGr
idFunction>
1725{
return L2Norm(gridFct, cmp, quadOrder, NULL); }
1727template <
typename TGr
idFunction>
1729{
return L2Norm(*spGridFct, cmp, quadOrder, subsets); }
1731template <
typename TGr
idFunction>
1733{
return L2Norm(spGridFct, cmp, quadOrder, NULL); }
1737template <
typename TGr
idFunction>
1739 :
public StdIntegrand<number, TGridFunction::dim, L2DistIntegrand<TGridFunction> >
1765 TGridFunction& coarseGridFct,
size_t coarseCmp)
1772 "L2DiffIntegrand: fine and top level inverted.");
1774 "L2DiffIntegrand: grid functions defined on different domains.");
1786 "L2DiffIntegrand: fine and top level inverted.");
1788 "L2DiffIntegrand: grid functions defined on different domains.");
1800 "L2DiffIntegrand: fine and top level inverted.");
1802 "L2DiffIntegrand: grid functions defined on different domains.");
1812 "L2DiffIntegrand: Grid function component" <<
m_fineData.fct()<<
" not defined on subset "<<si);
1814 "L2DiffIntegrand: Grid function component" <<
m_coarseData.fct()<<
" not defined on subset "<<si);
1819 template <
int elemDim>
1828 typedef typename TGridFunction::template dim_traits<elemDim>::grid_base_object Element;
1833 int parentLevel =
m_spMG->get_level(pCoarseElem);
1835 pCoarseElem =
m_spMG->get_parent(pCoarseElem);
1836 parentLevel =
m_spMG->get_level(pCoarseElem);
1845 std::vector<MathVector<worldDim> > vCornerCoarse;
1850 = ReferenceMappingProvider::get<elemDim, worldDim>(coarseROID, vCornerCoarse);
1852 std::vector<MathVector<elemDim> > vCoarseLocIP;
1853 vCoarseLocIP.resize(numIP);
1854 for(
size_t ip = 0; ip < vCoarseLocIP.size(); ++ip)
VecSet(vCoarseLocIP[ip], 0.0);
1859 std::vector<ipdata_type> fineElemWeights(numIP, 1.0);
1866 LocalFiniteElementProvider::get<elemDim>(fineROID,
m_fineData.id());
1868 LocalFiniteElementProvider::get<elemDim>(coarseROID,
m_coarseData.id());
1871 std::vector<DoFIndex> vFineMI, vCoarseMI;
1876 for(
size_t ip = 0; ip < numIP; ++ip)
1880 for(
size_t sh = 0; sh < vFineMI.size(); ++sh)
1886 fineSolIP += val * rFineLSFS.
shape(sh, vFineLocIP[ip]);
1888 number coarseSolIP = 0.0;
1889 for(
size_t sh = 0; sh < vCoarseMI.size(); ++sh)
1895 coarseSolIP += val * rCoarseLSFS.
shape(sh, vCoarseLocIP[ip]);
1903 UG_CATCH_THROW(
"L2DistIntegrand::evaluate: trial space missing.");
1909template <
typename TGr
idFunction>
1911 TGridFunction& spGridFct2,
const char* cmp2,
1912 int quadOrder,
const char* subsets,
1915 return GridFunctionDistance2<L2DistIntegrand<TGridFunction>, TGridFunction>
1916 (spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets, spWeight, avgDist12);
1921template <
typename TGr
idFunction>
1923 TGridFunction& spGridFct2,
const char* cmp2,
1924 int quadOrder,
const char* subsets)
1926 return GridFunctionDistance2<L2DistIntegrand<TGridFunction>, TGridFunction>
1927 (spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets);
1931template <
typename TGr
idFunction>
1933 TGridFunction& spGridFct2,
const char* cmp2,
1934 int quadOrder,
const char* subsets)
1936 return sqrt(
L2Distance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets));
1940template <
typename TGr
idFunction>
1945 return L2Distance(*spGridFct1, cmp1, *spGridFct2, cmp2, quadOrder, NULL);
1948template <
typename TGr
idFunction>
1951 int quadOrder,
const char* subsets)
1953 return L2Distance(*spGridFct1, cmp1, *spGridFct2, cmp2, quadOrder, subsets);
1963template <
typename TGr
idFunction>
1965 :
public StdIntegrand<number, TGridFunction::dim, H1SemiIntegrand<TGridFunction> >
2001 template <
int elemDim>
2012 const TGridFunction &gridFct=
m_scalarData.grid_function();
2015 = ReferenceMappingProvider::get<elemDim, worldDim>(roid, vCornerCoords);
2028 gridFct.indices(pElem, ind);
2035 vCornerCoords, vLocIP, numIP, &uloc, NULL);
2036 }
UG_CATCH_THROW(
"H1SemiIntegrand: Cannot evaluate weight data.");
2043 }
UG_CATCH_THROW(
"H1SemiIntegrand: Cannot evaluate weight data.");
2054 LocalFiniteElementProvider::get<elemDim>(roid,
m_scalarData.id());
2057 const size_t num_sh = rTrialSpace.
num_sh();
2060 std::vector<DoFIndex> ind;
2064 UG_COND_THROW(ind.size() != num_sh,
"H1SemiNormFuncIntegrand::evaluate: Wrong number of multi-)indices.");
2067 std::vector<MathVector<elemDim> > vLocGradient(num_sh);
2068 for(
size_t ip = 0; ip < numIP; ++ip)
2071 rTrialSpace.
grads(&vLocGradient[0], vLocIP[ip]);
2074 number approxSolIP = 0.0;
2076 for(
size_t sh = 0; sh < num_sh; ++sh)
2082 approxSolIP += valSH * rTrialSpace.
shape(sh, vLocIP[ip]);
2094 CheckGeneralizedInverse<worldDim,elemDim>(vJT[ip], JTInv);
2101 MatVecMult(approxDGradIP, elemWeights[ip], approxGradIP);
2102 vValue[ip] =
VecDot(approxDGradIP, approxGradIP);
2106 UG_CATCH_THROW(
"H1SemiIntegrand::evaluate: trial space missing.");
2123template <
typename TGr
idFunction>
2128 const size_t fct = gridFct.fct_id_by_name(cmp);
2131 UG_COND_THROW(fct >= gridFct.num_fct(),
"H1SemiNorm: Function space does not contain"
2132 " a function with name " << cmp <<
".");
2133 if (weights.invalid()) {
2143template <
typename TGr
idFunction>
2144number H1SemiNorm(TGridFunction& gridFct,
const char* cmp,
int quadOrder,
const char* subsets=NULL,
2147 return (sqrt(
H1SemiNorm2(gridFct, cmp, quadOrder, subsets, weights)));
2151template <
typename TGr
idFunction>
2153{
return H1SemiNorm(*spGridFct, cmp, quadOrder, subsets); }
2155template <
typename TGr
idFunction>
2158{
return H1SemiNorm(*spGridFct, cmp, quadOrder, subsets, weights); }
2160template <
typename TGr
idFunction>
2162{
return H1SemiNorm(*spGridFct, cmp, quadOrder, NULL); }
2164template <
typename TGr
idFunction>
2167{
return H1SemiNorm(*spGridFct, cmp, quadOrder, NULL, weights); }
2170template <
typename TGr
idFunction>
2194 TGridFunction& coarseGridFct,
size_t coarseCmp)
2196 m_fineTopLevel(fineGridFct.dof_distribution()->grid_level().level()),
2199 m_spMG(fineGridFct.domain()->grid()),
2203 UG_THROW(
"H1SemiDiffIntegrand: fine and top level inverted.");
2206 UG_THROW(
"H1SemiDiffIntegrand: grid functions defined on different domains.");
2211 TGridFunction& coarseGridFct,
size_t coarseCmp,
2214 m_fineTopLevel(fineGridFct.dof_distribution()->grid_level().level()),
2217 m_spMG(fineGridFct.domain()->grid()),
2230 <<
m_fineData.fct()<<
" not defined on subset "<<si);
2237 template <
int elemDim>
2246 typedef typename TGridFunction::template dim_traits<elemDim>::grid_base_object Element;
2248 const TGridFunction &fineGridFct =
m_fineData.grid_function();
2249 const TGridFunction &coarseGridFct =
m_coarseData.grid_function();
2254 int parentLevel =
m_spMG->get_level(pCoarseElem);
2256 pCoarseElem =
m_spMG->get_parent(pCoarseElem);
2257 parentLevel =
m_spMG->get_level(pCoarseElem);
2266 std::vector<MathVector<worldDim> > vCornerCoarse;
2271 = ReferenceMappingProvider::get<elemDim, worldDim>(coarseROID, vCornerCoarse);
2273 = ReferenceMappingProvider::get<elemDim, worldDim>(fineROID, vCornerCoords);
2275 std::vector<MathVector<elemDim> > vCoarseLocIP;
2276 vCoarseLocIP.resize(numIP);
2277 for(
size_t ip = 0; ip < vCoarseLocIP.size(); ++ip)
VecSet(vCoarseLocIP[ip], 0.0);
2291 fineGridFct.indices(pFineElem, ind);
2298 vCornerCoords, vFineLocIP, numIP, &u, NULL);
2314 LocalFiniteElementProvider::get<elemDim>(fineROID,
m_fineData.id());
2316 LocalFiniteElementProvider::get<elemDim>(coarseROID,
m_coarseData.id());
2319 std::vector<DoFIndex> vFineMI, vCoarseMI;
2323 std::vector<MathVector<elemDim> > vFineLocGradient(vFineMI.size());
2324 std::vector<MathVector<elemDim> > vCoarseLocGradient(vCoarseMI.size());
2327 for(
size_t ip = 0; ip < numIP; ++ip)
2330 rFineLSFS.
grads(&vFineLocGradient[0], vFineLocIP[ip]);
2331 rCoarseLSFS.
grads(&vCoarseLocGradient[0], vCoarseLocIP[ip]);
2336 for(
size_t sh = 0; sh < vFineMI.size(); ++sh)
2339 fineSolIP += val * rFineLSFS.
shape(sh, vFineLocIP[ip]);
2343 number coarseSolIP = 0.0;
2345 for(
size_t sh = 0; sh < vCoarseMI.size(); ++sh)
2347 const number val =
DoFRef(coarseGridFct, vCoarseMI[sh]);
2348 coarseSolIP += val * rCoarseLSFS.
shape(sh, vCoarseLocIP[ip]);
2358 CheckGeneralizedInverse<worldDim,elemDim>(vJT[ip], fineJTInv);
2361 MatVecMult(fineGradIP, fineJTInv, fineLocTmp);
2367 MatVecMult(coarseGradIP, coarseJTInv, coarseLocTmp);
2372 vValue[ip] =
VecDistanceSq(coarseGradIP, fineGradIP, elemWeights[ip]);
2376 UG_CATCH_THROW(
"H1SemiDiffIntegrand::evaluate: trial space missing.");
2382template <
typename TGr
idFunction>
2385 int quadOrder,
const char* subsets)
2387 return GridFunctionDistance2<H1SemiDistIntegrand<TGridFunction>, TGridFunction>
2388 (*spGridFct1, cmp1, *spGridFct2, cmp2, quadOrder, subsets);
2392template <
typename TGr
idFunction>
2395 int quadOrder,
const char* subsets)
2397 return sqrt(
H1SemiError2(*spGridFct1, cmp1, *spGridFct2, cmp2, quadOrder, subsets));
2401template <
typename TGr
idFunction>
2406 return H1SemiError(*spGridFct1, cmp1, *spGridFct2, cmp2, quadOrder, NULL);
2410template <
typename TGr
idFunction>
2412 TGridFunction& spGridFct2,
const char* cmp2,
2413 int quadOrder,
const char* subsets,
2416 return GridFunctionDistance2<H1SemiDistIntegrand<TGridFunction>, TGridFunction>
2417 (spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets, weights);
2421template <
typename TGr
idFunction>
2423 TGridFunction& spGridFct2,
const char* cmp2,
2424 int quadOrder,
const char* subsets,
2426{
return sqrt(
H1SemiDistance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets, weights)); }
2429template <
typename TGr
idFunction>
2431 TGridFunction& spGridFct2,
const char* cmp2,
2433{
return H1SemiDistance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, NULL, weights); }
2436template <
typename TGr
idFunction>
2438 TGridFunction& spGridFct2,
const char* cmp2,
2440{
return sqrt(
H1SemiDistance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, NULL, weights)); }
2450template <
typename TGr
idFunction>
2452 :
public StdIntegrand<number, TGridFunction::dim, H1EnergyIntegrand<TGridFunction> >
2488 template <
int elemDim>
2499 const TGridFunction &gridFct=
m_scalarData.grid_function();
2502 = ReferenceMappingProvider::get<elemDim, worldDim>(roid, vCornerCoords);
2504 typedef typename weight_type::data_type ipdata_type;
2515 gridFct.indices(pElem, ind);
2522 vCornerCoords, vLocIP, numIP, &uloc, NULL);
2523 }
UG_CATCH_THROW(
"H1EnergyIntegrand: Cannot evaluate weight data.");
2530 }
UG_CATCH_THROW(
"H1EnergyIntegrand: Cannot evaluate weight data.");
2541 LocalFiniteElementProvider::get<elemDim>(roid,
m_scalarData.id());
2544 const size_t num_sh = rTrialSpace.
num_sh();
2547 std::vector<DoFIndex> ind;
2551 UG_COND_THROW(ind.size() != num_sh,
"H1EnergyIntegrand::evaluate: Wrong number of multi-)indices.");
2554 std::vector<MathVector<elemDim> > vLocGradient(num_sh);
2555 for(
size_t ip = 0; ip < numIP; ++ip)
2558 rTrialSpace.
grads(&vLocGradient[0], vLocIP[ip]);
2561 number approxSolIP = 0.0;
2563 for(
size_t sh = 0; sh < num_sh; ++sh)
2569 approxSolIP += valSH * rTrialSpace.
shape(sh, vLocIP[ip]);
2581 CheckGeneralizedInverse<worldDim,elemDim>(vJT[ip], JTInv);
2589 MatVecMult(approxDGradIP, elemWeights[ip], approxGradIP);
2594 UG_CATCH_THROW(
"H1EnergyIntegrand::evaluate: trial space missing.");
2611template <
typename TGr
idFunction>
2616 const size_t fct = gridFct.fct_id_by_name(cmp);
2619 UG_COND_THROW(fct >= gridFct.num_fct(),
"H1SemiNorm: Function space does not contain"
2620 " a function with name " << cmp <<
".");
2621 if (weights.invalid()) {
2629template <
typename TGr
idFunction>
2633 return (sqrt(
H1EnergyNorm2(gridFct, cmp, quadOrder, subsets, weights)));
2636template <
typename TGr
idFunction>
2639{
return H1EnergyNorm(*spGridFct, cmp, quadOrder, subsets, weights); }
2641template <
typename TGr
idFunction>
2643{
return H1EnergyNorm(spGridFct, cmp, quadOrder, NULL); }
2645template <
typename TGr
idFunction>
2648{
return H1EnergyNorm(spGridFct, cmp, quadOrder, NULL, weights); }
2654template <
typename TGr
idFunction>
2656 :
public StdIntegrand<number, TGridFunction::dim, H1EnergyDistIntegrand<TGridFunction> >
2679 TGridFunction& coarseGridFct,
size_t coarseCmp)
2681 m_fineTopLevel(fineGridFct.dof_distribution()->grid_level().level()),
2684 m_spMG(fineGridFct.domain()->grid()),
2688 UG_THROW(
"H1EnergyDistIntegrand: fine and top level inverted.");
2691 UG_THROW(
"H1EnergyDistIntegrand: grid functions defined on different domains.");
2696 TGridFunction& coarseGridFct,
size_t coarseCmp,
2699 m_fineTopLevel(fineGridFct.dof_distribution()->grid_level().level()),
2702 m_spMG(fineGridFct.domain()->grid()),
2706 UG_THROW(
"H1EnergyDistIntegrand: fine and top level inverted.");
2709 UG_THROW(
"H1EnergyDistIntegrand: grid functions defined on different domains.");
2717 UG_THROW(
"H1EnergyDistIntegrand: Grid function component"
2718 <<
m_fineData.fct()<<
" not defined on subset "<<si);
2720 UG_THROW(
"H1EnergyDistIntegrand: Grid function component"
2726 template <
int elemDim>
2735 typedef typename TGridFunction::template dim_traits<elemDim>::grid_base_object Element;
2737 const TGridFunction &fineGridFct =
m_fineData.grid_function();
2738 const TGridFunction &coarseGridFct =
m_coarseData.grid_function();
2743 int parentLevel =
m_spMG->get_level(pCoarseElem);
2745 pCoarseElem =
m_spMG->get_parent(pCoarseElem);
2746 parentLevel =
m_spMG->get_level(pCoarseElem);
2755 std::vector<MathVector<worldDim> > vCornerCoarse;
2760 = ReferenceMappingProvider::get<elemDim, worldDim>(coarseROID, vCornerCoarse);
2762 = ReferenceMappingProvider::get<elemDim, worldDim>(fineROID, vCornerCoords);
2764 std::vector<MathVector<elemDim> > vCoarseLocIP;
2765 vCoarseLocIP.resize(numIP);
2766 for(
size_t ip = 0; ip < vCoarseLocIP.size(); ++ip)
VecSet(vCoarseLocIP[ip], 0.0);
2780 fineGridFct.indices(pFineElem, ind);
2787 vCornerCoords, vFineLocIP, numIP, &u, NULL);
2803 LocalFiniteElementProvider::get<elemDim>(fineROID,
m_fineData.id());
2805 LocalFiniteElementProvider::get<elemDim>(coarseROID,
m_coarseData.id());
2808 std::vector<DoFIndex> vFineMI, vCoarseMI;
2812 std::vector<MathVector<elemDim> > vFineLocGradient(vFineMI.size());
2813 std::vector<MathVector<elemDim> > vCoarseLocGradient(vCoarseMI.size());
2816 for(
size_t ip = 0; ip < numIP; ++ip)
2819 rFineLSFS.
grads(&vFineLocGradient[0], vFineLocIP[ip]);
2820 rCoarseLSFS.
grads(&vCoarseLocGradient[0], vCoarseLocIP[ip]);
2825 for(
size_t sh = 0; sh < vFineMI.size(); ++sh)
2828 fineSolIP += val * rFineLSFS.
shape(sh, vFineLocIP[ip]);
2832 number coarseSolIP = 0.0;
2834 for(
size_t sh = 0; sh < vCoarseMI.size(); ++sh)
2836 const number val =
DoFRef(coarseGridFct, vCoarseMI[sh]);
2837 coarseSolIP += val * rCoarseLSFS.
shape(sh, vCoarseLocIP[ip]);
2847 CheckGeneralizedInverse<worldDim,elemDim>(vJT[ip], fineJTInv);
2851 MatVecMult(fineGradIP, fineJTInv, fineLocTmp);
2853 MatVecMult(fineWorldLocTmp, elemWeights[ip], fineGradIP);
2859 MatVecMult(coarseGradIP, coarseJTInv, coarseLocTmp);
2861 MatVecMult(coarseWorldLocTmp, elemWeights[ip], coarseGradIP);
2864 vValue[ip] =
VecDistanceSq(fineWorldLocTmp, coarseWorldLocTmp);
2869 UG_CATCH_THROW(
"H1EnergyDiffIntegrand::evaluate: trial space missing.");
2875template <
typename TGr
idFunction>
2877 TGridFunction& spGridFct2,
const char* cmp2,
2878 int quadOrder,
const char* subsets,
2881 return GridFunctionDistance2<H1EnergyDistIntegrand<TGridFunction>, TGridFunction>
2882 (spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets, weights);
2886template <
typename TGr
idFunction>
2888 TGridFunction& spGridFct2,
const char* cmp2,
2889 int quadOrder,
const char* subsets,
2891{
return sqrt(
H1EnergyDistance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets, weights)); }
2894template <
typename TGr
idFunction>
2896 TGridFunction& spGridFct2,
const char* cmp2,
2898{
return H1EnergyDistance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, NULL, weights); }
2901template <
typename TGr
idFunction>
2903 TGridFunction& spGridFct2,
const char* cmp2,
2905{
return sqrt(
H1EnergyDistance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, NULL, weights)); }
2913template <
typename TGr
idFunction>
2915 :
public StdIntegrand<number, TGridFunction::dim, H1NormIntegrand<TGridFunction> >
2936 UG_THROW(
"H1Norm: Grid function component"
2942 template <
int elemDim>
2955 = ReferenceMappingProvider::get<elemDim, worldDim>(roid, vCornerCoords);
2960 LocalFiniteElementProvider::get<elemDim>(roid,
m_scalarData.id());
2963 const size_t num_sh = rTrialSpace.
num_sh();
2966 std::vector<DoFIndex> ind;
2970 if(ind.size() != num_sh)
2971 UG_THROW(
"H1ErrorIntegrand::evaluate: Wrong number of"
2975 std::vector<MathVector<elemDim> > vLocGradient(num_sh);
2976 for(
size_t ip = 0; ip < numIP; ++ip)
2980 rTrialSpace.
grads(&vLocGradient[0], vLocIP[ip]);
2983 number approxSolIP = 0.0;
2985 for(
size_t sh = 0; sh < num_sh; ++sh)
2991 approxSolIP += valSH * rTrialSpace.
shape(sh, vLocIP[ip]);
3003 CheckGeneralizedInverse<worldDim,elemDim>(vJT[ip], JTInv);
3009 vValue[ip] = approxSolIP * approxSolIP;
3010 vValue[ip] +=
VecDot(approxGradIP, approxGradIP);
3014 UG_CATCH_THROW(
"H1SemiNormFuncIntegrand::evaluate: trial space missing.");
3021template <
typename TGr
idFunction>
3023 int quadOrder,
const char* subsets=NULL)
3026 const size_t fct = u.fct_id_by_name(cmp);
3029 if(fct >= u.num_fct())
3030 UG_THROW(
"H1Norm: Function space does not contain"
3031 " a function with name " << cmp <<
".");
3038template <
typename TGr
idFunction>
3040 int quadOrder,
const char* subsets=NULL)
3042 return sqrt(
H1Norm2(u, cmp, quadOrder,subsets));
3045template <
typename TGr
idFunction>
3047 int quadOrder,
const char* subsets)
3049 return H1Norm(*spGridFct, cmp, quadOrder, subsets);
3052template <
typename TGr
idFunction>
3055 return H1Norm(*spGridFct, cmp, quadOrder, NULL);
3061template <
typename TGr
idFunction>
3063 :
public StdIntegrand<number, TGridFunction::dim, H1DistIntegrand<TGridFunction> >
3082 TGridFunction& coarseGridFct,
size_t coarseCmp)
3084 m_fineTopLevel(fineGridFct.dof_distribution()->grid_level().level()),
3087 m_spMG(fineGridFct.domain()->grid())
3090 UG_THROW(
"H1DiffIntegrand: fine and top level inverted.");
3092 if(fineGridFct.domain().get() !=
3093 coarseGridFct.domain().get())
3094 UG_THROW(
"H1DiffIntegrand: grid functions defined on different domains.");
3104 UG_THROW(
"H1DiffIntegrand: Grid function component"
3105 <<
m_fineData.fct()<<
" not defined on subset "<<si);
3107 UG_THROW(
"H1DiffIntegrand: Grid function component"
3113 template <
int elemDim>
3122 typedef typename TGridFunction::template dim_traits<elemDim>::grid_base_object Element;
3127 int parentLevel =
m_spMG->get_level(pCoarseElem);
3129 pCoarseElem =
m_spMG->get_parent(pCoarseElem);
3130 parentLevel =
m_spMG->get_level(pCoarseElem);
3139 std::vector<MathVector<worldDim> > vCornerCoarse;
3144 = ReferenceMappingProvider::get<elemDim, worldDim>(coarseROID, vCornerCoarse);
3146 = ReferenceMappingProvider::get<elemDim, worldDim>(fineROID, vCornerCoords);
3148 std::vector<MathVector<elemDim> > vCoarseLocIP;
3149 vCoarseLocIP.resize(numIP);
3150 for(
size_t ip = 0; ip < vCoarseLocIP.size(); ++ip)
VecSet(vCoarseLocIP[ip], 0.0);
3156 LocalFiniteElementProvider::get<elemDim>(fineROID,
m_fineData.id());
3158 LocalFiniteElementProvider::get<elemDim>(coarseROID,
m_coarseData.id());
3161 std::vector<DoFIndex> vFineMI, vCoarseMI;
3165 std::vector<MathVector<elemDim> > vFineLocGradient(vFineMI.size());
3166 std::vector<MathVector<elemDim> > vCoarseLocGradient(vCoarseMI.size());
3169 for(
size_t ip = 0; ip < numIP; ++ip)
3172 rFineLSFS.
grads(&vFineLocGradient[0], vFineLocIP[ip]);
3173 rCoarseLSFS.
grads(&vCoarseLocGradient[0], vCoarseLocIP[ip]);
3178 for(
size_t sh = 0; sh < vFineMI.size(); ++sh)
3181 fineSolIP += val * rFineLSFS.
shape(sh, vFineLocIP[ip]);
3184 number coarseSolIP = 0.0;
3186 for(
size_t sh = 0; sh < vCoarseMI.size(); ++sh)
3189 coarseSolIP += val * rCoarseLSFS.
shape(sh, vCoarseLocIP[ip]);
3199 CheckGeneralizedInverse<worldDim,elemDim>(vJT[ip], fineJTInv);
3203 MatVecMult(fineGradIP, fineJTInv, fineLocTmp);
3209 MatVecMult(coarseGradIP, coarseJTInv, coarseLocTmp);
3212 vValue[ip] = (coarseSolIP - fineSolIP);
3213 vValue[ip] *= vValue[ip];
3218 UG_CATCH_THROW(
"H1DiffIntegrand::evaluate: trial space missing.");
3224template <
typename TGr
idFunction>
3226 TGridFunction& spGridFct2,
const char* cmp2,
3227 int quadOrder,
const char* subsets=NULL)
3229 return GridFunctionDistance2<H1DistIntegrand<TGridFunction>, TGridFunction>
3230 (spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets);
3234template <
typename TGr
idFunction>
3236 TGridFunction& spGridFct2,
const char* cmp2,
3237 int quadOrder,
const char* subsets=NULL)
3239 return sqrt(
H1Distance2(spGridFct1, cmp1, spGridFct2, cmp2, quadOrder, subsets));
3242template <
typename TGr
idFunction>
3245 int quadOrder,
const char* subsets)
3247 return H1Distance(*spGridFct1, cmp1, *spGridFct2, cmp2, quadOrder, subsets);
3251template <
typename TGr
idFunction>
3256 return H1Distance(*spGridFct1, cmp1, *spGridFct2, cmp2, quadOrder, NULL);
3264template <
typename TGr
idFunction>
3266 :
public StdIntegrand<number, TGridFunction::dim, StdFuncIntegrand<TGridFunction> >
3291 UG_THROW(
"L2ErrorIntegrand: Grid function component"
3292 <<
m_fct<<
" not defined on subset "<<si);
3297 template <
int elemDim>
3314 LocalFiniteElementProvider::get<elemDim>(roid, m_id);
3317 const size_t num_sh = rTrialSpace.
num_sh();
3321 std::vector<DoFIndex> ind;
3326 "StdFuncIntegrand::evaluate: Wrong number of multi indices.");
3329 for(
size_t ip = 0; ip < numIP; ++ip)
3333 number approxSolIP = 0.0;
3334 for(
size_t sh = 0; sh < num_sh; ++sh)
3339 approxSolIP += valSH * rTrialSpace.
shape(sh, vLocIP[ip]);
3343 vValue[ip] = approxSolIP;
3348 UG_CATCH_THROW(
"StdFuncIntegrand::evaluate: trial space missing.");
3353template <
typename TGr
idFunction>
3359 typedef typename TGridFunction::template dim_traits<0>::grid_base_object grid_base_object;
3360 typedef typename TGridFunction::template dim_traits<0>::const_iterator const_iterator;
3367 const_iterator iter = gridFct.template begin<grid_base_object>(si);
3368 const_iterator iterEnd = gridFct.template end<grid_base_object>(si);
3371 for(; iter != iterEnd; ++iter)
3374 grid_base_object* pElem = *iter;
3376 std::vector<DoFIndex> ind;
3377 gridFct.dof_indices(pElem, fct, ind);
3381 for(
size_t sh = 0; sh < ind.size(); ++sh)
3383 value +=
DoFRef(gridFct, ind[sh]);
3395template <
typename TGr
idFunction>
3400template <
typename TGr
idFunction>
3402 const char* subsets,
int quadOrder)
3405 const size_t fct = gridFct.fct_id_by_name(cmp);
3408 UG_COND_THROW(fct >= gridFct.num_fct(),
"L2Norm: Function space does not contain"
3409 " a function with name " << cmp <<
".");
3412 SubsetGroup ssGrp(gridFct.domain()->subset_handler());
3417 UG_THROW(
"IntegrateSubsets: Subsets '"<<subsets<<
"' do not have same dimension."
3418 "Can not integrate on subsets of different dimensions.");
3428 bool bOnlyVertex =
true;
3429 for(
size_t s = 0;
s < ssGrp.
size(); ++
s)
3430 if(ssGrp.
dim(
s) != 0) bOnlyVertex =
false;
3435 for(
size_t s = 0;
s < ssGrp.
size(); ++
s)
3454template <
typename TGr
idFunction>
3456 const char* subsets,
int quadOrder)
3457{
return Integral(*spGridFct, cmp, subsets, quadOrder); }
3460template <
typename TGr
idFunction>
3462 const char* subsets)
3464 return Integral(spGridFct, cmp, subsets, 1);
3466template <
typename TGr
idFunction>
3469 return Integral(spGridFct, cmp, NULL, 1);
3479template <
int WorldDim,
int dim,
typename TConstIterator>
3481 TConstIterator iterEnd,
3492 TConstIterator iter = iterBegin;
3502 for(
size_t s = 0;
s < bndSSGrp.
size(); ++
s)
3505 const int bndSubset = bndSSGrp[
s];
3513 std::vector<MathVector<WorldDim> > vCorner;
3516 for(; iter != iterEnd; ++iter)
3519 grid_base_object* pElem = *iter;
3526 geo.
update(pElem, &vCorner[0], ish);
3529 "Cannot update Finite Volume Geometry.");
3532 for(
size_t s = 0;
s < bndSSGrp.
size(); ++
s)
3535 const int bndSubset = bndSSGrp[
s];
3539 const std::vector<BF>& vBF = geo.
bf(bndSubset);
3542 for(
size_t b = 0; b < vBF.size(); ++b)
3545 const BF& bf = vBF[b];
3557 integrand.values(&value, &(bf.global_ip()),
3558 pElem, &vCorner[0], &(bf.local_ip()),
3562 UG_CATCH_THROW(
"IntegralNormalComponentOnManifold: Unable to compute values of "
3563 "integrand at integration point.");
3566 integral +=
VecDot(value, bf.normal());
3577template <
int WorldDim,
int dim,
typename TConstIterator>
3579 TConstIterator iterBegin,
3580 TConstIterator iterEnd,
3593 TConstIterator iter = iterBegin;
3601 std::vector<MathVector<WorldDim> > vCorner;
3602 std::vector<int> vSubsetIndex;
3605 for(; iter != iterEnd; ++iter)
3608 Element* pElem = *iter;
3619 vSubsetIndex.resize(vSide.size());
3620 for(
size_t i = 0; i < vSide.size(); ++i)
3624 = ReferenceMappingProvider::get<dim, WorldDim>(elemRoid, vCorner);
3627 = ReferenceElementProvider::get<dim>(elemRoid);
3630 for(
size_t side = 0; side < vSide.size(); ++side)
3633 if(!bndSSGrp.
contains(vSubsetIndex[side]))
continue;
3636 Side* pSide = vSide[side];
3638 std::vector<MathVector<WorldDim> > vSideCorner(rRefElem.
num(dim-1, side, 0));
3639 std::vector<MathVector<dim> > vLocalSideCorner(rRefElem.
num(dim-1, side, 0));
3640 for(
size_t co = 0; co < vSideCorner.size(); ++co){
3641 vSideCorner[co] = vCorner[rRefElem.
id(dim-1, side, 0, co)];
3642 vLocalSideCorner[co] = rRefElem.
corner(rRefElem.
id(dim-1, side, 0, co));
3652 ElementNormal<WorldDim>(sideRoid, Normal, &vSideCorner[0]);
3655 const number* vWeight = rSideQuadRule.weights();
3656 const size_t nip = rSideQuadRule.size();
3657 std::vector<MathVector<dim> > vLocalIP(nip);
3658 std::vector<MathVector<dim> > vGlobalIP(nip);
3663 for(
size_t ip = 0; ip < nip; ++ip)
3666 for(
size_t ip = 0; ip < nip; ++ip)
3670 std::vector<
MathMatrix<dim-1, WorldDim> > vJT(nip);
3671 map.jacobian_transposed(&(vJT[0]), rSideQuadRule.points(), nip);
3673 std::vector<MathMatrix<dim, WorldDim> > vElemJT(nip);
3676 std::vector<MathVector<WorldDim> > vValue(nip);
3681 integrand.values(&vValue[0], &vGlobalIP[0],
3682 pElem, &vCorner[0], &vLocalIP[0],
3686 UG_CATCH_THROW(
"IntegralNormalComponentOnManifold: Unable to compute values of "
3687 "integrand at integration point.");
3690 for(
size_t ip = 0; ip < nip; ++ip)
3693 const number weightIP = vWeight[ip];
3699 integral +=
VecDot(vValue[ip], Normal) * weightIP * det;
3708template <
typename TGr
idFunction,
int dim>
3711 int si,
const SubsetGroup& bndSSGrp,
int quadOrder)
3714 typedef typename TGridFunction::template dim_traits<dim>::grid_base_object grid_base_object;
3715 typedef typename TGridFunction::template dim_traits<dim>::const_iterator const_iterator;
3716 static const int WorldDim = TGridFunction::dim;
3721 return IntegralNormalComponentOnManifoldUsingFV1Geom<WorldDim,dim,const_iterator>
3722 (spGridFct->template begin<grid_base_object>(si),
3723 spGridFct->template end<grid_base_object>(si),
3724 spGridFct->domain()->position_accessor(),
3725 spGridFct->domain()->subset_handler().
get(),
3726 *spIntegrand, bndSSGrp);
3728 UG_LOG(
" #### IntegralNormalComponentOnManifoldSubset ####:\n")
3729 return IntegralNormalComponentOnManifoldGeneral<WorldDim,dim,const_iterator>
3730 (spGridFct->template begin<grid_base_object>(si),
3731 spGridFct->template end<grid_base_object>(si),
3732 spGridFct->domain()->position_accessor(),
3733 spGridFct->domain()->subset_handler().
get(),
3734 *spIntegrand, bndSSGrp, quadOrder, *spGridFct->domain()->grid());
3738template <
typename TGr
idFunction>
3742 const char* BndSubsets,
const char* InnerSubsets,
3746 static const int dim = TGridFunction::dim;
3749 SubsetGroup innerSSGrp(spGridFct->domain()->subset_handler());
3750 if(InnerSubsets != NULL)
3754 UG_THROW(
"IntegralNormalComponentOnManifold: Subsets '"<<InnerSubsets<<
"' do not have same dimension."
3755 "Can not integrate on subsets of different dimensions.");
3765 SubsetGroup bndSSGrp(spGridFct->domain()->subset_handler());
3766 if(BndSubsets != NULL)
3769 UG_THROW(
"IntegralNormalComponentOnManifold: No boundary subsets passed.");
3775 for(
size_t i = 0; i < innerSSGrp.
size(); ++i)
3778 const int si = innerSSGrp[i];
3782 UG_THROW(
"IntegralNormalComponentOnManifold: Dimension of inner subset is "<<
3783 innerSSGrp.
dim(i)<<
", but only World Dimension "<<dim<<
3784 " subsets can be used for inner subsets.");
3787 switch(innerSSGrp.
dim(i))
3790 case dim: value += IntegralNormalComponentOnManifoldSubset<TGridFunction, dim>(spIntegrand, spGridFct, si, bndSSGrp, quadOrder);
break;
3791 default:
UG_THROW(
"IntegralNormalComponentOnManifold: Dimension "<<innerSSGrp.
dim(i)<<
" not supported. "
3792 " World dimension is "<<dim<<
".");
3810template <
typename TGr
idFunction>
3814 const char* BndSubset,
const char* InnerSubset,
3824template <
typename TGr
idFunction>
3828 const char* BndSubset,
const char* InnerSubset,
3832template <
typename TGr
idFunction>
3836 const char* BndSubset,
3840template <
typename TGr
idFunction>
3844 const char* BndSubset,
const char* InnerSubset)
3847template <
typename TGr
idFunction>
3851 const char* BndSubset)
3859template <
typename TGr
idFunction>
3862 const char* BndSubset,
const char* InnerSubset,
3863 number time,
int quadOrder)
3865 static const int dim = TGridFunction::dim;
3867 LuaUserDataFactory<MathVector<dim>, dim>
::create(luaFct);
3871template <
typename TGr
idFunction>
3874 const char* BndSubset,
const char* InnerSubset,
3878template <
typename TGr
idFunction>
3881 const char* BndSubset,
3885template <
typename TGr
idFunction>
3888 const char* BndSubset,
const char* InnerSubset)
3891template <
typename TGr
idFunction>
3894 const char* BndSubset)
3913template <
typename TGr
idFunction>
3915 const char* BndSubset)
3918 const size_t fct = u.fct_id_by_name(cmp);
3921 if(fct >= u.num_fct())
3922 UG_THROW(
"IntegrateNormalComponentOnManifold: Function space does not contain"
3923 " a function with name " << cmp <<
".");
3926 UG_THROW(
"IntegrateNormalComponentOnManifold:"
3927 "Only implemented for Lagrange P1 functions.");
3930 SubsetGroup bndSSGrp(u.domain()->subset_handler());
3937 for(
size_t i = 0; i < bndSSGrp.
size(); ++i)
3940 const int si = bndSSGrp[i];
3943 if(!u.is_def_in_subset(fct, si))
continue;
3946 static const int dim = TGridFunction::dim;
3952 typedef typename TGridFunction::template dim_traits<dim>::const_iterator const_iterator;
3953 const_iterator iter = u.template begin<grid_base_object>();
3954 const_iterator iterEnd = u.template end<grid_base_object>();
3960 for(
size_t s = 0;
s < bndSSGrp.
size(); ++
s)
3963 const int bndSubset = bndSSGrp[
s];
3971 std::vector<MathVector<dim> > vCorner;
3974 for( ; iter != iterEnd; ++iter)
3977 grid_base_object* elem = *iter;
3984 geo.
update(elem, &vCorner[0], u.domain()->subset_handler().get());
3987 "Cannot update Finite Volume Geometry.");
3990 std::vector<DoFIndex> ind;
3991 u.dof_indices(elem, fct, ind);
3994 for(
size_t s = 0;
s < bndSSGrp.
size(); ++
s)
3997 const int bndSubset = bndSSGrp[
s];
4001 const std::vector<BF>& vBF = geo.
bf(bndSubset);
4004 for(
size_t b = 0; b < vBF.size(); ++b)
4007 const BF& bf = vBF[b];
4014 "IntegrateNormalComponentOnManifold::values: Wrong number of"
4015 " multi indices, ind: "<<ind.size() <<
", bf.num_sh: "
4019 for(
size_t sh = 0; sh < bf.num_sh(); ++sh)
4027 value -=
VecDot(val, normal);
4062template <
typename TGr
idFunction>
4064 const char* BndSubset,
const char* InnerSubset = NULL)
4067 const size_t fct = u.fct_id_by_name(cmp);
4070 if(fct >= u.num_fct())
4071 UG_THROW(
"IntegrateNormalGradientOnManifold: Function space does not contain"
4072 " a function with name " << cmp <<
".");
4075 UG_THROW(
"IntegrateNormalGradientOnManifold:"
4076 "Only implemented for Lagrange P1 functions.");
4079 SubsetGroup innerSSGrp(u.domain()->subset_handler());
4080 if(InnerSubset != NULL)
4086 SubsetGroup bndSSGrp(u.domain()->subset_handler());
4087 if(InnerSubset != NULL){
4091 UG_THROW(
"IntegrateNormalGradientOnManifold: No boundary subsets specified. Aborting.");
4098 for(
size_t i = 0; i < innerSSGrp.
size(); ++i)
4101 const int si = innerSSGrp[i];
4104 if(!u.is_def_in_subset(fct, si))
continue;
4107 if (innerSSGrp.
dim(i) != TGridFunction::dim)
4108 UG_THROW(
"IntegrateNormalGradientOnManifold: Element dimension does not match world dimension!");
4111 static const int dim = TGridFunction::dim;
4117 typedef typename TGridFunction::template dim_traits<dim>::const_iterator const_iterator;
4118 const_iterator iter = u.template begin<grid_base_object>();
4119 const_iterator iterEnd = u.template end<grid_base_object>();
4125 for(
size_t s = 0;
s < bndSSGrp.
size(); ++
s)
4128 const int bndSubset = bndSSGrp[
s];
4136 std::vector<MathVector<dim> > vCorner;
4139 for( ; iter != iterEnd; ++iter)
4142 grid_base_object* elem = *iter;
4149 geo.
update(elem, &vCorner[0], u.domain()->subset_handler().get());
4152 "Cannot update Finite Volume Geometry.");
4155 std::vector<DoFIndex> ind;
4156 u.dof_indices(elem, fct, ind);
4159 for(
size_t s = 0;
s < bndSSGrp.
size(); ++
s)
4162 const int bndSubset = bndSSGrp[
s];
4166 const std::vector<BF>& vBF = geo.
bf(bndSubset);
4169 for(
size_t b = 0; b < vBF.size(); ++b)
4172 const BF& bf = vBF[b];
4179 "IntegrateNormalGradientOnManifold::values: Wrong number of"
4180 " multi indices, ind: "<<ind.size() <<
", bf.num_sh: "
4185 for(
size_t sh = 0; sh < bf.num_sh(); ++sh)
4189 VecScaleAdd(grad, 1.0, grad, fctVal, bf.global_grad(sh));
4193 value -=
VecDot(grad, normal);
Definition smart_pointer.h:296
bool valid() const
returns true if the pointer is valid, false if not.
Definition smart_pointer.h:415
Definition smart_pointer.h:107
T * get()
returns encapsulated pointer
Definition smart_pointer.h:197
Definition pcl_process_communicator.h:70
void allreduce(const void *sendBuf, void *recBuf, int count, DataType type, ReduceOperation op) const
performs MPI_Allreduce on the processes of the communicator.
Definition pcl_process_communicator.cpp:318
bool valid() const
Definition attachment_pipe.h:553
constant matrix user data
Definition const_user_data.h:232
constant scalar user data
Definition const_user_data.h:153
boundary face
Definition fv1_geom.h:903
Geometry and shape functions for 1st order Vertex-Centered Finite Volume.
Definition fv1_geom.h:665
const BF & bf(int si, size_t i) const
returns the boundary face i for subsetIndex
Definition fv1_geom.h:1135
void update(GridObject *elem, const MathVector< worldDim > *vCornerCoords, const ISubsetHandler *ish=NULL)
update data for given element
Definition fv1_geom.cpp:669
void add_boundary_subset(int subsetIndex)
add subset that is interpreted as boundary subset.
Definition fv1_geom.h:1104
dimension dependent base class for reference elements
Definition reference_element.h:183
const MathVector< dim > & corner(size_t i) const
coordinates of reference corner (i = 0 ... num(0))
Definition reference_element.h:192
virtual base class for reference mappings
Definition reference_mapping_provider.h:53
virtual void jacobian_transposed(MathMatrix< dim, worldDim > &JT, const MathVector< dim > &locPos) const =0
returns transposed of jacobian
virtual number jacobian_transposed_inverse(MathMatrix< worldDim, dim > &JTInv, const MathVector< dim > &locPos) const =0
returns transposed of the inverse of the jacobian and returns sqrt of gram determinante
virtual void local_to_global(MathVector< worldDim > &globPos, const MathVector< dim > &locPos) const =0
map local coordinate to global coordinate
virtual void update(const MathVector< worldDim > *vCornerCoord)=0
refresh mapping for new set of corners
virtual void global_to_local(MathVector< dim > &locPos, const MathVector< worldDim > &globPos, const size_t maxIter=1000, const number tol=1e-10) const =0
map global coordinate to local coordinate
the generic attachment-accessor for access to grids attachment pipes.
Definition grid.h:182
Manages the elements of a grid and their interconnection.
Definition grid.h:132
void associated_elements_sorted(traits< Vertex >::secure_container &elemsOut, TElem *e)
Puts all elements of type TAss which are contained in 'e' into elemsOut in the reference elements ord...
Definition grid_impl.hpp:503
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition grid_base_objects.h:157
virtual ReferenceObjectID reference_object_id() const =0
Integrand for the distance of two grid functions - evaluated in the H1 norm.
Definition integrate.h:3064
const int m_fineTopLevel
Definition integrate.h:3071
const int m_coarseTopLevel
Definition integrate.h:3074
ScalarGridFunctionData< TGridFunction > m_fineData
Definition integrate.h:3070
SmartPtr< MultiGrid > m_spMG
multigrid
Definition integrate.h:3077
virtual ~H1DistIntegrand()
DTOR.
Definition integrate.h:3098
ScalarGridFunctionData< TGridFunction > m_coarseData
Definition integrate.h:3073
static const int worldDim
world dimension of grid function
Definition integrate.h:3067
virtual void set_subset(int si)
sets subset
Definition integrate.h:3101
H1DistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp)
constructor (1 is fine grid function)
Definition integrate.h:3081
void evaluate(number vValue[], const MathVector< worldDim > vFineGlobIP[], GridObject *pFineElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vFineLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:3114
Integrand for the distance of two grid functions - evaluated in the norm .
Definition integrate.h:2657
ConstSmartPtr< weight_type > m_spWeight
scalar weight (optional)
Definition integrate.h:2674
static const int worldDim
world dimension of grid function
Definition integrate.h:2660
SmartPtr< MultiGrid > m_spMG
multigrid
Definition integrate.h:2671
H1SemiIntegrand< TGridFunction >::weight_type weight_type
Definition integrate.h:2661
virtual void set_subset(int si)
sets subset
Definition integrate.h:2714
ScalarGridFunctionData< TGridFunction > m_fineData
Definition integrate.h:2664
virtual ~H1EnergyDistIntegrand()
Definition integrate.h:2711
void evaluate(number vValue[], const MathVector< worldDim > vFineGlobIP[], GridObject *pFineElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vFineLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:2727
const int m_fineTopLevel
Definition integrate.h:2665
ScalarGridFunctionData< TGridFunction > m_coarseData
Definition integrate.h:2667
H1EnergyDistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp, ConstSmartPtr< weight_type > spWeight)
constructor
Definition integrate.h:2695
H1EnergyDistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp)
constructor
Definition integrate.h:2678
const int m_coarseTopLevel
Definition integrate.h:2668
Norm of a grid function, evaluated in (weighted) H1-semi norm.
Definition integrate.h:2453
ConstSmartPtr< weight_type > m_spWeight
scalar weight (optional)
Definition integrate.h:2464
virtual void set_subset(int si)
sets subset
Definition integrate.h:2479
static const int worldDim
world dimension of grid function
Definition integrate.h:2456
UserData< MathMatrix< worldDim, worldDim >, worldDim > weight_type
Definition integrate.h:2457
ScalarGridFunctionData< TGridFunction > m_scalarData
grid function data
Definition integrate.h:2461
virtual ~H1EnergyIntegrand()
DTOR.
Definition integrate.h:2476
H1EnergyIntegrand(TGridFunction &gridFct, size_t cmp, ConstSmartPtr< weight_type > spWeight)
constructor
Definition integrate.h:2472
H1EnergyIntegrand(TGridFunction &gridFct, size_t cmp)
constructor
Definition integrate.h:2468
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:2489
Definition integrate.h:1261
virtual void set_subset(int si)
sets subset
Definition integrate.h:1292
SmartPtr< UserData< MathVector< worldDim >, worldDim > > m_spExactGrad
exact gradient
Definition integrate.h:1274
H1ErrorIntegrand(SmartPtr< UserData< number, worldDim > > spExactSol, SmartPtr< UserData< MathVector< worldDim >, worldDim > > spExactGrad, TGridFunction &gridFct, size_t cmp, number time)
constructor
Definition integrate.h:1281
ScalarGridFunctionData< TGridFunction > m_scalarData
grid function
Definition integrate.h:1268
SmartPtr< UserData< number, worldDim > > m_spExactSolution
exact solution
Definition integrate.h:1271
static const int worldDim
world dimension of grid function
Definition integrate.h:1264
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:1302
number m_time
time
Definition integrate.h:1277
Definition integrate.h:2916
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:2943
ScalarGridFunctionData< TGridFunction > m_scalarData
Definition integrate.h:2922
virtual ~H1NormIntegrand()
DTOR.
Definition integrate.h:2930
virtual void set_subset(int si)
sets subset
Definition integrate.h:2933
static const int worldDim
world dimension of grid function
Definition integrate.h:2919
H1NormIntegrand(TGridFunction &gridFct, size_t cmp)
CTOR.
Definition integrate.h:2926
Integrand for the distance of two grid functions - evaluated in the (weighted) H1-semi norm.
Definition integrate.h:2172
void evaluate(number vValue[], const MathVector< worldDim > vFineGlobIP[], GridObject *pFineElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vFineLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:2238
H1SemiDistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp, ConstSmartPtr< weight_type > spWeight)
constructor
Definition integrate.h:2210
const int m_fineTopLevel
Definition integrate.h:2180
H1SemiDistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp)
constructor
Definition integrate.h:2193
ScalarGridFunctionData< TGridFunction > m_fineData
Definition integrate.h:2179
virtual ~H1SemiDistIntegrand()
Definition integrate.h:2223
ConstSmartPtr< weight_type > m_spWeight
scalar weight (optional)
Definition integrate.h:2189
H1SemiIntegrand< TGridFunction >::weight_type weight_type
Definition integrate.h:2176
virtual void set_subset(int si)
sets subset
Definition integrate.h:2226
static const int worldDim
world dimension of grid function
Definition integrate.h:2175
SmartPtr< MultiGrid > m_spMG
multigrid
Definition integrate.h:2186
ScalarGridFunctionData< TGridFunction > m_coarseData
Definition integrate.h:2182
const int m_coarseTopLevel
Definition integrate.h:2183
Norm of a grid function, evaluated in (weighted) H1-semi norm.
Definition integrate.h:1966
UserData< MathMatrix< worldDim, worldDim >, worldDim > weight_type
Definition integrate.h:1970
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:2002
static const int worldDim
world dimension of grid function
Definition integrate.h:1969
H1SemiIntegrand(TGridFunction &gridFct, size_t cmp, ConstSmartPtr< weight_type > spWeight)
constructor
Definition integrate.h:1985
ScalarGridFunctionData< TGridFunction > m_scalarData
grid function data
Definition integrate.h:1974
ConstSmartPtr< weight_type > m_spWeight
scalar weight (optional)
Definition integrate.h:1977
virtual void set_subset(int si)
sets subset
Definition integrate.h:1992
H1SemiIntegrand(TGridFunction &gridFct, size_t cmp)
constructor
Definition integrate.h:1981
virtual ~H1SemiIntegrand()
DTOR.
Definition integrate.h:1989
Abstract integrand interface.
Definition integrate.h:120
virtual void values(TData vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< 1 > vLocIP[], const MathMatrix< 1, worldDim > vJT[], const size_t numIP)=0
returns the values of the integrand for a bunch of ips
virtual void set_subset(int si)
sets the subset
Definition integrate.h:167
static const int worldDim
world dimension
Definition integrate.h:123
int subset() const
returns the subset
Definition integrate.h:170
virtual void values(TData vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< 3 > vLocIP[], const MathMatrix< 3, worldDim > vJT[], const size_t numIP)=0
returns the values of the integrand for a bunch of ips
int m_si
subset
Definition integrate.h:174
TData data_type
data type
Definition integrate.h:126
virtual void values(TData vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< 2 > vLocIP[], const MathMatrix< 2, worldDim > vJT[], const size_t numIP)=0
returns the values of the integrand for a bunch of ips
virtual ~IIntegrand()
Definition integrate.h:163
Definition subset_handler_interface.h:223
int get_subset_index(GridObject *elem) const
Definition subset_handler_interface.cpp:560
Integrand for the distance of two grid functions - evaluated in the (weighted) H1-semi norm.
Definition integrate.h:1740
const int m_coarseTopLevel
Definition integrate.h:1751
void evaluate(number vValue[], const MathVector< worldDim > vFineGlobIP[], GridObject *pFineElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vFineLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:1820
virtual ~L2DistIntegrand()
Definition integrate.h:1806
double m_deltaFineCoarse
shift
Definition integrate.h:1759
static const int worldDim
world dimension of grid function
Definition integrate.h:1743
L2DistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp, ConstSmartPtr< weight_type > spWeight)
constructor (1st is fine grid function)
Definition integrate.h:1778
ConstSmartPtr< weight_type > m_spWeight
Definition integrate.h:1756
const int m_fineTopLevel
Definition integrate.h:1748
L2DistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp)
constructor (1st is fine grid function)
Definition integrate.h:1764
ScalarGridFunctionData< TGridFunction > m_coarseData
Definition integrate.h:1750
L2DistIntegrand(TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp, ConstSmartPtr< weight_type > spWeight, number dist12)
constructor (1st is fine grid function)
Definition integrate.h:1792
virtual void set_subset(int si)
sets subset
Definition integrate.h:1809
L2Integrand< TGridFunction >::weight_type weight_type
Definition integrate.h:1744
SmartPtr< MultiGrid > m_spMG
multigrid
Definition integrate.h:1754
ScalarGridFunctionData< TGridFunction > m_fineData
Definition integrate.h:1747
Definition integrate.h:1072
L2ErrorIntegrand(SmartPtr< UserData< number, worldDim > > spExactSol, TGridFunction &gridFct, size_t cmp, number time)
constructor
Definition integrate.h:1088
static const int worldDim
world dimension of grid function
Definition integrate.h:1075
number m_time
time
Definition integrate.h:1084
ScalarGridFunctionData< TGridFunction > m_scalarData
Definition integrate.h:1078
SmartPtr< UserData< number, worldDim > > m_spExactSolution
exact solution
Definition integrate.h:1081
virtual void set_subset(int si)
sets subset
Definition integrate.h:1098
virtual ~L2ErrorIntegrand()
Definition integrate.h:1095
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:1108
Grid function as L2 integrand.
Definition integrate.h:1573
ScalarGridFunctionData< TGridFunction > m_scalarData
Definition integrate.h:1581
virtual void set_subset(int si)
sets subset
Definition integrate.h:1600
UserData< number, worldDim > weight_type
Definition integrate.h:1577
L2Integrand(TGridFunction &spGridFct, size_t cmp, ConstSmartPtr< weight_type > spWeight)
Definition integrate.h:1592
virtual ~L2Integrand()
DTOR.
Definition integrate.h:1597
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:1609
static const int worldDim
Definition integrate.h:1576
L2Integrand(TGridFunction &spGridFct, size_t cmp)
CTOR.
Definition integrate.h:1588
ConstSmartPtr< weight_type > m_spWeight
scalar weight (optional, default is 1.0)
Definition integrate.h:1584
Identifier for Local Finite Elements.
Definition local_finite_element_id.h:98
@ LAGRANGE
Definition local_finite_element_id.h:104
virtual size_t num_sh() const
Definition local_dof_set.cpp:46
Definition local_algebra.h:50
virtual base class for local shape function sets
Definition local_shape_function_set.h:70
virtual void grads(grad_type *vGrad, const MathVector< dim > &x) const =0
returns all gradients evaluated at a point
virtual shape_type shape(size_t i, const MathVector< dim > &x) const =0
evaluates the shape function
Definition local_algebra.h:198
void resize(const LocalIndices &ind)
resize for current local indices
Definition local_algebra.h:214
static SmartPtr< LuaUserData< TData, dim, TRet > > create(const std::string &name)
Definition lua_user_data.h:223
A class for fixed size, dense matrices.
Definition math_matrix.h:63
a mathematical Vector with N entries.
Definition math_vector.h:97
Definition integrate.h:964
ScalarGridFunctionData< TGridFunction > m_scalarData
Definition integrate.h:970
double max()
Definition integrate.h:1000
virtual void set_subset(int si)
sets subset
Definition integrate.h:986
static const int worldDim
world dimension of grid function
Definition integrate.h:967
MaximumDistIntegrand(TGridFunction &gridFct, size_t cmp)
constructor
Definition integrate.h:976
void reset()
Definition integrate.h:993
double m_min
Definition integrate.h:972
double min()
Definition integrate.h:999
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:1004
double m_max
Definition integrate.h:972
virtual ~MaximumDistIntegrand()
Definition integrate.h:983
provides quadrature rule for a Reference Dimension
Definition quadrature.h:70
number weight(size_t i) const
return the i'th weight
Definition quadrature.h:105
size_t size() const
number of integration points
Definition quadrature.h:92
const MathVector< dim > * points() const
returns all positions in an array of size()
Definition quadrature.h:102
static const QuadratureRule< TDim > & get(size_t order, QuadType type=BEST)
gets quadrature rule of requested order
Definition quadrature_provider_impl.h:40
size_t num(int dim) const
returns the number of geometric objects of dim
Definition reference_element.h:95
int id(int dim_i, size_t i, int dim_j, size_t j) const
id of object j in dimension dim_j of obj i in dimension dim_i
Definition reference_element.h:127
static DimReferenceMapping< TDim, TWorldDim > & get(ReferenceObjectID roid)
returns a reference to a DimReferenceMapping
Definition reference_mapping_provider.h:225
Definition integrate.h:65
TGridFunction & grid_function()
Definition integrate.h:74
TGridFunction::domain_type domain_type
Definition integrate.h:67
const TGridFunction & grid_function() const
Definition integrate.h:77
size_t m_fct
component of function
Definition integrate.h:105
size_t fct()
Definition integrate.h:80
TGridFunction & m_gridFct
grid function
Definition integrate.h:102
ConstSmartPtr< domain_type > domain() const
returns const domain (forward)
Definition integrate.h:94
ScalarGridFunctionData(TGridFunction &gridFct, size_t cmp)
Definition integrate.h:69
SmartPtr< domain_type > domain()
returns domain (forward)
Definition integrate.h:91
size_t dof_indices(TElem *elem, std::vector< DoFIndex > &ind, bool bHang=false, bool bClear=true) const
Definition integrate.h:97
LFEID m_id
local finite element id
Definition integrate.h:108
const LFEID & id() const
Definition integrate.h:83
bool is_def_in_subset(int si) const
returns true, iff scalar function is defined in subset si
Definition integrate.h:87
Definition integrate.h:3267
const size_t m_fct
Definition integrate.h:3277
virtual void set_subset(int si)
sets subset
Definition integrate.h:3288
TGridFunction * m_pGridFct
Definition integrate.h:3274
static const int worldDim
Definition integrate.h:3270
virtual ~StdFuncIntegrand()
Definition integrate.h:3285
StdFuncIntegrand(TGridFunction *pGridFct, size_t cmp)
constructor
Definition integrate.h:3281
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:3298
Abstract integrand interface (using CRTP)
Definition integrate.h:180
virtual void values(TData vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< 1 > vLocIP[], const MathMatrix< 1, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:190
virtual void values(TData vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< 2 > vLocIP[], const MathMatrix< 2, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:200
TImpl & getImpl()
access to implementation
Definition integrate.h:224
const TImpl & getImpl() const
const access to implementation
Definition integrate.h:227
static const int worldDim
world dimension
Definition integrate.h:183
TData data_type
data type
Definition integrate.h:186
virtual void values(TData vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< 3 > vLocIP[], const MathMatrix< 3, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:210
Group of subsets.
Definition subset_group.h:51
size_t size() const
number of subsets in this group
Definition subset_group.h:122
void add_all()
select all subsets of underlying subset handler
Definition subset_group.cpp:133
int dim(size_t i) const
dimension of subset
Definition subset_group.cpp:237
void add(int si)
adds a subset by number to this group
Definition subset_group.cpp:64
bool contains(int si) const
returns true if subset is contained in this group
Definition subset_group.cpp:272
For arbitrary UserData and grid functions and , this class (should) define the integrand .
Definition integrate.h:667
ScalarGridFunctionData< TGridFunction > m_coarseData
Definition integrate.h:677
number inner_prod(const MathVector< worldDim > &d1, const MathVector< worldDim > &d2)
Definition integrate.h:826
number inner_dist2(const number &v1, const number &v2)
Definition integrate.h:835
number inner_prod(const number &d1, const number &d2)
Definition integrate.h:823
virtual ~UserDataDistIntegrandSq()
Definition integrate.h:705
ScalarGridFunctionData< TGridFunction > m_fineData
Definition integrate.h:674
const int m_fineTopLevel
Definition integrate.h:675
static const int worldDim
world dimension of grid function
Definition integrate.h:670
SmartPtr< MultiGrid > m_spMG
multigrid
Definition integrate.h:681
number inner_prod(const T &d1, const T &d2)
Definition integrate.h:830
number inner_dist2(const MathVector< worldDim > &v1, const MathVector< worldDim > &v2)
Definition integrate.h:838
UserDataDistIntegrandSq(SmartPtr< UserData< TData, worldDim > > spData, TGridFunction &fineGridFct, size_t fineCmp, TGridFunction &coarseGridFct, size_t coarseCmp)
constructor (1st is fine grid function)
Definition integrate.h:692
double m_time
Definition integrate.h:688
const int m_coarseTopLevel
Definition integrate.h:678
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pFineElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vFineLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:721
SmartPtr< UserData< TData, worldDim > > m_spData
Definition integrate.h:685
virtual void set_subset(int si)
sets subset
Definition integrate.h:708
number inner_dist2(const T &d1, const T &d2)
Definition integrate.h:842
Type based UserData.
Definition user_data.h:144
virtual bool requires_grid_fct() const =0
returns if grid function is needed for evaluation
number data_type
Definition user_data.h:146
For arbitrary UserData , this class defines the integrand .
Definition integrate.h:467
UserDataIntegrand(SmartPtr< UserData< TData, worldDim > > spData, number time)
constructor
Definition integrate.h:496
static const int worldDim
Definition integrate.h:470
TData data_type
Definition integrate.h:473
TGridFunction * m_spGridFct
Definition integrate.h:480
UserDataIntegrand(SmartPtr< UserData< TData, worldDim > > spData, TGridFunction *spGridFct, number time)
constructor
Definition integrate.h:487
number m_time
Definition integrate.h:483
SmartPtr< UserData< TData, worldDim > > m_spData
Definition integrate.h:477
void evaluate(TData vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:506
For arbitrary UserData (of type TData), this class defines the integrand .
Definition integrate.h:556
number inner_prod(const MathVector< worldDim > &d1, const MathVector< worldDim > &d2)
Definition integrate.h:652
UserDataIntegrandSq(SmartPtr< UserData< TData, worldDim > > spData, const TGridFunction *pGridFct, number time)
constructor
Definition integrate.h:576
SmartPtr< UserData< TData, worldDim > > m_spData
Definition integrate.h:566
void evaluate(number vValue[], const MathVector< worldDim > vGlobIP[], GridObject *pElem, const MathVector< worldDim > vCornerCoords[], const MathVector< elemDim > vLocIP[], const MathMatrix< elemDim, worldDim > vJT[], const size_t numIP)
returns the values of the integrand for a bunch of ips
Definition integrate.h:597
static const int worldDim
Definition integrate.h:559
TData data_type
Definition integrate.h:562
number m_time
Definition integrate.h:572
const TGridFunction * m_pGridFct
Definition integrate.h:569
number inner_prod(const number &d1, const number &d2)
Definition integrate.h:649
number inner_prod(const T &d1, const T &d2)
Definition integrate.h:656
UserDataIntegrandSq(SmartPtr< UserData< TData, worldDim > > spData, number time)
constructor
Definition integrate.h:585
void CollectCornerCoordinates(std::vector< typename TAAPos::ValueType > &vCornerCoordsOut, const TElem &elem, const TAAPos &aaPos, bool clearContainer=true)
returns the corner coordinates of a geometric object
Definition domain_util_impl.h:75
MathMatrix< N, M, T >::value_type SqrtGramDeterminant(const MathMatrix< N, M, T > &m)
Square root of Gram Determinant of a matrix.
Definition math_matrix_functions_common_impl.hpp:508
MathMatrix< N, M, T >::value_type GeneralizedInverse(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Definition math_matrix_functions_common_impl.hpp:751
matrix_t::value_type MatMaxNorm(matrix_t &m)
Definition math_matrix_functions_common_impl.hpp:1024
MathMatrix< N, M, T >::value_type Inverse(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Inverse of a matrix.
Definition math_matrix_functions_common_impl.hpp:560
void MatSubtract(matrix_t &mOut, const matrix_t &m1, const matrix_t &m2)
subtracts m2 from m1 and stores the result in a mOut
Definition math_matrix_functions_common_impl.hpp:68
#define PCL_RO_SUM
Definition pcl_methods.h:63
#define PCL_DT_DOUBLE
Definition pcl_datatype.h:57
int NumProcs()
returns the number of processes
Definition pcl_base.cpp:91
const NullSmartPtr SPNULL
The equivalent to NULL for smart pointers.
Definition smart_pointer.h:89
#define UG_ASSERT(expr, msg)
Definition assert.h:70
#define UG_CATCH_THROW(msg)
Definition error.h:64
#define UG_THROW(msg)
Definition error.h:57
#define UG_LOG(msg)
Definition log.h:367
#define UG_COND_THROW(cond, msg)
UG_COND_THROW(cond, msg) : performs a UG_THROW(msg) if cond == true.
Definition error.h:61
double number
Definition types.h:124
void MatVecMult(vector_t_out &vOut, const matrix_t &m, const vector_t_in &v)
Matrix - Vector Multiplication.
Definition math_matrix_vector_functions_common_impl.hpp:49
void VecScaleAppend(vector_t &vOut, typename vector_t::value_type s1, const vector_t &v1)
Scales a Vector and adds it to a second vector.
Definition math_vector_functions_common_impl.hpp:126
void VecSet(vector_t &vInOut, typename vector_t::value_type s)
Set each vector component to scalar (componentwise)
Definition math_vector_functions_common_impl.hpp:539
void VecScaleAdd(vector_t &vOut, typename vector_t::value_type s1, const vector_t &v1, typename vector_t::value_type s2, const vector_t &v2)
Scales two Vectors, adds them and returns the sum in a third vector.
Definition math_vector_functions_common_impl.hpp:265
vector_t::value_type VecTwoNormSq(const vector_t &v)
Definition math_vector_functions_common_impl.hpp:585
vector_t::value_type VecDistanceSq(const vector_t &v1, const vector_t &v2)
returns the squared distance of two vector_ts.
Definition math_vector_functions_common_impl.hpp:351
vector_t::value_type VecDot(const vector_t &v1, const vector_t &v2)
returns the dot-product of two vector_ts
Definition math_vector_functions_common_impl.hpp:385
function util LuaCallbackHelper create(func)
Definition smart_pointer.h:817
number H1SemiDistance2(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets, ConstSmartPtr< typename H1SemiDistIntegrand< TGridFunction >::weight_type > weights)
Squared distance in H1 semi norm (with select subsets & weights)
Definition integrate.h:2411
number H1SemiError2(SmartPtr< TGridFunction > spGridFct1, const char *cmp1, SmartPtr< TGridFunction > spGridFct2, const char *cmp2, int quadOrder, const char *subsets)
Distance in H1 semi norm (with subset selection)
Definition integrate.h:2383
number IntegrateNormalGradientOnManifold(TGridFunction &u, const char *cmp, const char *BndSubset, const char *InnerSubset=NULL)
Integrates the Flux of a component over some boundary subsets.
Definition integrate.h:4063
number Integrate(TConstIterator iterBegin, TConstIterator iterEnd, typename domain_traits< WorldDim >::position_accessor_type &aaPos, IIntegrand< number, WorldDim > &integrand, int quadOrder, std::string quadType, Grid::AttachmentAccessor< typename domain_traits< dim >::grid_base_object, ANumber > *paaElemContribs=NULL)
integrates on the whole domain
Definition integrate.h:259
number L2Distance2(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets, ConstSmartPtr< typename L2Integrand< TGridFunction >::weight_type > spWeight, number avgDist12=0.0)
computes the squared l2 distance between two functions
Definition integrate.h:1910
number H1Norm(TGridFunction &u, const char *cmp, int quadOrder, const char *subsets=NULL)
Definition integrate.h:3039
number H1SemiNorm2(TGridFunction &gridFct, const char *cmp, int quadOrder, const char *subsets=NULL, ConstSmartPtr< typename H1SemiIntegrand< TGridFunction >::weight_type > weights=SPNULL)
compute H1 semi-norm of a function on the whole domain (or on selected subsets)
Definition integrate.h:2124
QuadType GetQuadratureType(const std::string &name)
returns Identifier from string
Definition quadrature_provider.cpp:299
ReferenceObjectID
these ids are used to identify the shape of a geometric object.
Definition grid_base_objects.h:74
number IntegralNormalComponentOnManifoldGeneral(TConstIterator iterBegin, TConstIterator iterEnd, typename domain_traits< WorldDim >::position_accessor_type &aaPos, const ISubsetHandler *ish, IIntegrand< MathVector< WorldDim >, WorldDim > &integrand, const SubsetGroup &bndSSGrp, int quadOrder, Grid &grid)
Definition integrate.h:3578
number IntegrateNormalComponentOnManifold(TGridFunction &u, const char *cmp, const char *BndSubset)
Integrates a component over some boundary subsets.
Definition integrate.h:3914
number L2Norm2(TGridFunction &u, const char *cmp, int quadOrder, const char *subsets, ConstSmartPtr< typename L2Integrand< TGridFunction >::weight_type > spWeight)
Definition integrate.h:1679
const number SMALL
Definition math_constants.h:41
number L2Distance(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets)
computes the l2 distance between two functions
Definition integrate.h:1932
number H1Error(SmartPtr< UserData< number, TGridFunction::dim > > spExactSol, SmartPtr< UserData< MathVector< TGridFunction::dim >, TGridFunction::dim > > spExactGrad, SmartPtr< TGridFunction > spGridFct, const char *cmp, number time, int quadOrder, const char *subsets)
compute H1 error of a function on the whole domain or on some subsets
Definition integrate.h:1399
number IntegrateSubsets(IIntegrand< number, TGridFunction::dim > &spIntegrand, TGridFunction &spGridFct, const char *subsets, int quadOrder, std::string quadType=std::string())
Definition integrate.h:392
number IntegralNormalComponentOnManifoldUsingFV1Geom(TConstIterator iterBegin, TConstIterator iterEnd, typename domain_traits< WorldDim >::position_accessor_type &aaPos, const ISubsetHandler *ish, IIntegrand< MathVector< WorldDim >, WorldDim > &integrand, const SubsetGroup &bndSSGrp)
Definition integrate.h:3480
number H1SemiDistance(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets, ConstSmartPtr< typename H1SemiDistIntegrand< TGridFunction >::weight_type > weights)
Distance in H1 semi norm (with select subsets & weights)
Definition integrate.h:2422
void TokenizeString(const string &str, vector< string > &vToken, const char delimiter)
Definition string_util.cpp:56
number IntegrateSubset(IIntegrand< number, TGridFunction::dim > &spIntegrand, TGridFunction &spGridFct, int si, int quadOrder, std::string quadType)
Definition integrate.h:372
number H1EnergyNorm(TGridFunction &gridFct, const char *cmp, int quadOrder, const char *subsets=NULL, ConstSmartPtr< typename H1SemiIntegrand< TGridFunction >::weight_type > weights=SPNULL)
Definition integrate.h:2630
number H1Distance2(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets=NULL)
Definition integrate.h:3225
number IntegralNormalComponentOnManifold(SmartPtr< UserData< MathVector< TGridFunction::dim >, TGridFunction::dim > > spData, SmartPtr< TGridFunction > spGridFct, const char *BndSubset, const char *InnerSubset, number time, int quadOrder)
Definition integrate.h:3811
bool SameDimensionsInAllSubsets(const SubsetGroup &subsetGroup)
Definition subset_group.cpp:299
number Minimum(SmartPtr< TGridFunction > spGridFct, const char *cmp, const char *subsets)
Definition integrate.h:1061
number StdFuncIntegralOnVertex(TGridFunction &gridFct, size_t fct, int si)
Definition integrate.h:3354
number IntegralNormalComponentOnManifoldSubsets(SmartPtr< IIntegrand< MathVector< TGridFunction::dim >, TGridFunction::dim > > spIntegrand, SmartPtr< TGridFunction > spGridFct, const char *BndSubsets, const char *InnerSubsets, int quadOrder)
Definition integrate.h:3739
number H1SemiNorm(TGridFunction &gridFct, const char *cmp, int quadOrder, const char *subsets=NULL, ConstSmartPtr< typename H1SemiIntegrand< TGridFunction >::weight_type > weights=SPNULL)
Computes the H1SemiNorm.
Definition integrate.h:2144
number IntegralNormalComponentOnManifoldSubset(SmartPtr< IIntegrand< MathVector< TGridFunction::dim >, TGridFunction::dim > > spIntegrand, SmartPtr< TGridFunction > spGridFct, int si, const SubsetGroup &bndSSGrp, int quadOrder)
Definition integrate.h:3709
void GetLocalVector(LocalVector &lvec, const TVector &vec)
Definition local_algebra.h:739
void RemoveLowerDimSubsets(SubsetGroup &subsetGroup)
Definition subset_group.cpp:315
number H1Norm2(TGridFunction &u, const char *cmp, int quadOrder, const char *subsets=NULL)
Definition integrate.h:3022
number L2Error(SmartPtr< UserData< number, TGridFunction::dim > > spExactSol, TGridFunction &gridFct, const char *cmp, number time, int quadOrder, const char *subsets)
computes the l2 error function on the whole domain or on some subsets
Definition integrate.h:1184
number H1Distance(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets=NULL)
Definition integrate.h:3235
number GridFunctionDistance2(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets)
computes an (abstract) distance between two functions
Definition integrate.h:1465
number H1SemiError(SmartPtr< TGridFunction > spGridFct1, const char *cmp1, SmartPtr< TGridFunction > spGridFct2, const char *cmp2, int quadOrder, const char *subsets)
Distance in H1 semi norm (with subset selection)
Definition integrate.h:2393
number H1EnergyDistance(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets, ConstSmartPtr< typename H1SemiDistIntegrand< TGridFunction >::weight_type > weights)
Distance in H1 semi norm (with select subsets & weights)
Definition integrate.h:2887
number L2Norm(TGridFunction &u, const char *cmp, int quadOrder, const char *subsets)
Definition integrate.h:1710
number Integral(SmartPtr< UserData< number, TGridFunction::dim > > spData, TGridFunction &spGridFct, const char *subsets, number time, int quadOrder, std::string quadType)
Definition integrate.h:855
number H1EnergyDistance2(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets, ConstSmartPtr< typename H1SemiDistIntegrand< TGridFunction >::weight_type > weights)
Squared distance in H1 semi norm (with select subsets & weights)
Definition integrate.h:2876
number & DoFRef(TMatrix &mat, const DoFIndex &iInd, const DoFIndex &jInd)
Definition multi_index.h:276
number GetMinimum(TGridFunction &gridFct, const char *cmp, const char *subsets)
Definition integrate.h:1047
number H1EnergyNorm2(TGridFunction &gridFct, const char *cmp, int quadOrder, const char *subsets=NULL, ConstSmartPtr< typename H1SemiIntegrand< TGridFunction >::weight_type > weights=SPNULL)
compute energy -norm of a function on the whole domain (or on selected subsets)
Definition integrate.h:2612
@ DIM_SUBSET_EMPTY_GRID
Definition subset_dim_util.h:92
#define PROFILE_FUNC()
Definition profiler.h:257
QuadType
types of quadratures
Definition quadrature_provider.h:41
SmartPtr< T, FreePolicy > make_sp(T *inst)
returns a SmartPtr for the passed raw pointer
Definition smart_pointer.h:839
PointerConstArray< TElem * > secure_container
Definition grid.h:146
Definition domain_traits.h:53