double TransportGradientPeriodic :: domainSize(Domain *d, int setNum) { int nsd = d->giveNumberOfSpatialDimensions(); double domain_size = 0.0; // This requires the boundary to be consistent and ordered correctly. Set *set = d->giveSet(setNum); const IntArray &boundaries = set->giveBoundaryList(); for ( int pos = 1; pos <= boundaries.giveSize() / 2; ++pos ) { Element *e = d->giveElement( boundaries.at(pos * 2 - 1) ); int boundary = boundaries.at(pos * 2); FEInterpolation *fei = e->giveInterpolation(); domain_size += fei->evalNXIntegral( boundary, FEIElementGeometryWrapper(e) ); } return fabs(domain_size / nsd); }
double MixedGradientPressureBC :: domainSize() { int nsd = this->domain->giveNumberOfSpatialDimensions(); double domain_size = 0.0; // This requires the boundary to be consistent and ordered correctly. Set *set = this->giveDomain()->giveSet(this->set); const IntArray &boundaries = set->giveBoundaryList(); for ( int pos = 1; pos <= boundaries.giveSize() / 2; ++pos ) { Element *e = this->giveDomain()->giveElement( boundaries.at(pos * 2 - 1) ); int boundary = boundaries.at(pos * 2); FEInterpolation *fei = e->giveInterpolation(); domain_size += fei->evalNXIntegral( boundary, FEIElementGeometryWrapper(e) ); } return domain_size / nsd; }