Example #1
0
 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);
 }
Example #2
0
 protected override double CreateMatrixElement(
     BoundaryElement <T> elem1,
     BoundaryElement <T> elem2,
     ConditionType conditionType)
 {
     if (conditionType == ConditionType.Robin)
     {
         var IsExponental = true;
         if (IsExponental)
         {
             var enumerator = KirghoffTransformation.U0 * KirghoffTransformation.U0 * KirghoffTransformation.LAMDA0 *
                              Integrator.Integrate(elem1, elem2.Center, FundamentalSolution);
             var denumerator = KirghoffTransformation.BETALAMDA * KirghoffTransformation.BETALAMDA
                               * (U(elem2.Center, solution) + 1);
             return(KirghoffTransformation.Nuv(elem2.Center) * enumerator / denumerator
                    - 0.5 * Kroneker(elem1, elem2) + Integrator.IntegratedQdnx(elem1, elem2, Derivates));
         }
         else
         {
             var enumerator  = Integrator.Integrate(elem1, elem2.Center, FundamentalSolution);
             var denumerator =
                 Math.Sqrt(
                     1
                     + 2 * KirghoffTransformation.BETALAMDA * U(elem2.Center, solution)
                     / (KirghoffTransformation.LAMDA0 * KirghoffTransformation.U0));
             return(KirghoffTransformation.Nuv(elem2.Center) * enumerator / (KirghoffTransformation.LAMDA0 * denumerator)
                    - 0.5 * Kroneker(elem1, elem2) + Integrator.IntegratedQdnx(elem1, elem2, Derivates));
         }
     }
     else
     {
         return(0);
     }
 }
Example #3
0
        protected override double CreateMatrixElement(BoundaryElement <T> elem1, BoundaryElement <T> elem2, ConditionType conditionType)
        {
            switch (conditionType)
            {
            case ConditionType.Dirichlet:
                return(Integrator.Integrate(elem1, elem2.Center, FundamentalSolution));

            case ConditionType.Neumann:
                return(Integrator.IntegratedQdnx(elem1, elem2, Derivates));

            case ConditionType.Robin:
                return(Integrator.Integrate(elem1, elem2.Center, FundamentalSolution)
                       - Integrator.IntegratedQdnx(elem1, elem2, Derivates));
            }
            return(double.NaN);
        }
Example #4
0
        protected override double CreateMatrixElement(BoundaryElement <Point3D> elem1, BoundaryElement <Point3D> elem2,
                                                      ConditionType conditionType)
        {
            if (elem1.Bound.Name == BoundNumber.Bound12 && elem2.Bound.Name == BoundNumber.Bound12)
            {
                return(Integrator.Integrate(elem1, elem2.Center, functionsForSemiSpace.U1));
            }
            if (elem1.Bound.Name == BoundNumber.Bound12 && elem2.Bound.Name == BoundNumber.Bound2)
            {
                return(-Integrator.Integrate(elem1, elem2.Center, functionsForSemiSpace.U2));
            }
            if (elem1.Bound.Name == BoundNumber.Bound12 && elem2.Bound.Name == BoundNumber.Bound13)
            {
                return(Integrator.Integrate(elem1, elem2.Center, functionsForSemiSpace.U1));
            }
            if (elem1.Bound.Name == BoundNumber.Bound12 && elem2.Bound.Name == BoundNumber.Bound3)
            {
                return(0);
            }
            //2-----------------------------------------------
            if (elem1.Bound.Name == BoundNumber.Bound2 && elem2.Bound.Name == BoundNumber.Bound12)
            {
                return(Integrator.IntegratedQdnx(elem1, elem2, FunctionsForSemiSpace.Derivates));
            }
            if (elem1.Bound.Name == BoundNumber.Bound2 && elem2.Bound.Name == BoundNumber.Bound2)
            {
                return(-Integrator.IntegratedQdnx(elem1, elem2, FunctionFactory.Derivates));
            }
            if (elem1.Bound.Name == BoundNumber.Bound2 && elem2.Bound.Name == BoundNumber.Bound13)
            {
                return(Integrator.IntegratedQdnx(elem1, elem2, FunctionsForSemiSpace.Derivates));
            }
            if (elem1.Bound.Name == BoundNumber.Bound2 && elem2.Bound.Name == BoundNumber.Bound3)
            {
                return(0);
            }
            //3-----------------------------------------------
            if (elem1.Bound.Name == BoundNumber.Bound13 && elem2.Bound.Name == BoundNumber.Bound12)
            {
                return(Integrator.Integrate(elem1, elem2.Center, functionsForSemiSpace.U1));
            }
            if (elem1.Bound.Name == BoundNumber.Bound13 && elem2.Bound.Name == BoundNumber.Bound2)
            {
                return(0);
            }
            if (elem1.Bound.Name == BoundNumber.Bound13 && elem2.Bound.Name == BoundNumber.Bound13)
            {
                return(Integrator.Integrate(elem1, elem2.Center, functionsForSemiSpace.U1));
            }
            if (elem1.Bound.Name == BoundNumber.Bound13 && elem2.Bound.Name == BoundNumber.Bound3)
            {
                return(-(Integrator.Integrate(elem1, elem2.Center, functionsForSemiSpace.U3)));
            }
            //4------------------------------------------------
            if (elem1.Bound.Name == BoundNumber.Bound3 && elem2.Bound.Name == BoundNumber.Bound12)
            {
                return(Integrator.IntegratedQdnx(elem1, elem2, FunctionsForSemiSpace.Derivates));
            }
            if (elem1.Bound.Name == BoundNumber.Bound3 && elem2.Bound.Name == BoundNumber.Bound2)
            {
                return(0);
            }
            if (elem1.Bound.Name == BoundNumber.Bound3 && elem2.Bound.Name == BoundNumber.Bound13)
            {
                return(Integrator.IntegratedQdnx(elem1, elem2, FunctionsForSemiSpace.Derivates));
            }
            if (elem1.Bound.Name == BoundNumber.Bound3 && elem2.Bound.Name == BoundNumber.Bound3)
            {
                return(-Integrator.IntegratedQdnx(elem1, elem2, FunctionFactory.Derivates));
            }

            throw new Exception("Invalid boundaries");
        }