예제 #1
0
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;
}
예제 #2
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];
}
예제 #3
0
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();
}
예제 #4
0
파일: R2d2lri.cpp 프로젝트: lucmil/cubmark
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;
	}
}
예제 #5
0
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];
}