protected override double CreateMatrixElement(BoundaryElement <T> elem1, BoundaryElement <T> elem2, ConditionType conditionType) { switch (conditionType) { case ConditionType.Dirichlet: if (elem1.Bound.IsOuter && elem2.Bound.IsOuter) { return(Integrator.Integrate(elem1, elem2.Center, FundamentalSolution)); } if (elem1.Bound.IsOuter && !elem2.Bound.IsOuter) { return(Integrator.IntegratedQdnx(elem1, elem2, Derivates)); } if (!elem1.Bound.IsOuter && elem2.Bound.IsOuter) { return(Integrator.IntegratedQdny(elem1, elem2, Derivates)); } if (!elem1.Bound.IsOuter && !elem2.Bound.IsOuter) { return(lambda * Kroneker(elem1, elem2) + Integrator.IntegratedQdnxdny(elem1, elem2, Derivates)); } break; } return(double.NaN); }
public override double U(T x) { return(CalculateSolutiuon(Solution, (bound, element) => { if (bound.IsOuter) { return -1 * Integrator.IntegratedQdny(element, x, Derivates); } return Integrator.Integrate(element, x, FundamentalSolution); })); }
public double Q(T x, Vector solution) { return(CalculateSolutiuon( solution, (bound, element) => Integrator.IntegratedQdny(element, x, Derivates))); }