double RD28Builder::integral(const Boundary& boundary) { CHECK( feq(boundary.l(0), 2.0) && feq(boundary.u(0), 1.0) && boundary.l(1) == -inf && feq(boundary.u(1), -1.0), "Unsupported boundary."); return -1.0; }
double G6Builder::integral(const Boundary& boundary) { CHECK( feq0(boundary.l(0)) && feq(boundary.u(0), 1.0) && feq0(boundary.l(1)) && feq(boundary.u(1), 1.0), InvalidValueError("Only unit square solution available.")); return ( exp(dC[0] * dx0[0]) - 1 ) / dC[0] * ( exp(dC[1] * dx0[1]) - 1 ) / dC[1]; }
double QP1Builder::integral(const Boundary& boundary) { CHECK(feq0(boundary.l(0)) && feq0(boundary.l(1)) , InvalidValueError("Lower boundary has to be 0")); CHECK(boundary.u(0) == inf && boundary.u(1) == inf, InvalidValueError("Upper boundary has to be infinite")); return 0.25 * PI * c(); }
void R2d2lri::setBoundary(const Boundary& boundary) { if(boundary.isValid()) { const double a = boundary.l(0); const double b = boundary.u(0); this->a = isinf(a) ? copysign(INFINITE, a) : a; this->b = isinf(b) ? copysign(INFINITE, b) : b; adapterSetFunctor(g, Constant(boundary.l(1))); adapterSetFunctor(h, Constant(boundary.u(1))); if(this->hasIntegrand()) { this->setIntegrand(this->getIntegrand()); } } else { this->a = NaN; this->b = NaN; } }
double G2Builder::integral(const Boundary& boundary) { return K(boundary.l(1), boundary.u(1), dC[1], dx0[1]) * K(boundary.l(0), boundary.u(0), dC[0], dx0[0])/dC[0]/dC[1]; }