Esempio n. 1
0
        public void IntegrateOverRealPlane()
        {
            Func <double, double, double> integrand = (x, y) => Math.Exp(-x * x - y * y) / Math.PI;
            double result = ImproperQuadrature.IntegrateOverRealPlane(integrand, 1, 32);

            AssertHelper.AssertApproximatelyEqual(1, result, 4);
        }
        public double CalculateLongitudinalElectricComponent(
            double effectiveTime_fm,
            double radialDistance_fm,
            double conductivity_MeV
            )
        {
            Func <double, double, double> integrand = (x_fm, y_fm) =>
            {
                SpatialVector pointChargePosition = new SpatialVector(radialDistance_fm - x_fm, -y_fm, 0);

                return(Nucleus.GetProtonNumberColumnDensity_per_fm3(x_fm, y_fm)
                       * PointChargeEMF.CalculateElectromagneticField(
                           EMFComponent.LongitudinalElectricComponent,
                           effectiveTime_fm,
                           pointChargePosition.Norm,
                           conductivity_MeV)
                       * pointChargePosition.Direction.X);
            };

            double integral = ImproperQuadrature.IntegrateOverRealPlane(
                integrand,
                2 * Nucleus.NuclearRadius_fm,
                QuadratureOrder);

            return(integral);
        }
Esempio n. 3
0
        public void IntegrateOverRealAxis()
        {
            Func <double, double> integrand = x => Functions.GaussianDistributionNormalized1D(x, 1);

            double result = ImproperQuadrature.IntegrateOverRealAxis(integrand, 2.7, 64);

            AssertHelper.AssertApproximatelyEqual(1, result);
        }
Esempio n. 4
0
        public void IntegrateOverPositiveAxis()
        {
            double diffuseness              = 1;
            double nuclearRadius            = 5;
            Func <double, double> integrand = r => 4 * Math.PI * r * r
                                              * Functions.WoodsSaxonPotentialNormalized3D(r, nuclearRadius, diffuseness);

            double result = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 2 * nuclearRadius, 64);

            AssertHelper.AssertApproximatelyEqual(1, result);
        }
Esempio n. 5
0
        protected virtual double UnnormalizedColumnDensity(
            double x_fm,
            double y_fm
            )
        {
            Func <double, double> integrand
                = z => UnnormalizedDensity(Math.Sqrt(x_fm * x_fm + y_fm * y_fm + z * z));

            double integral
                = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 2 * NuclearRadius_fm, 64);

            // factor two because integral runs from minus to plus infinity
            return(2 * integral);
        }
Esempio n. 6
0
            private double CalculateRadialElectricComponent(
                double effectiveTime_fm,
                double radialDistance_fm,
                double conductivity_MeV
                )
            {
                if (effectiveTime_fm > 0)
                {
                    Func <double, double> integrand = k => PointChargeRadialElectricComponentIntegrand(
                        k, effectiveTime_fm, radialDistance_fm, conductivity_MeV);

                    double integral = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 1, 64);

                    return(2 * Coupling / conductivity_MeV * Constants.HbarC_MeV_fm * integral);
                }
                else
                {
                    return(0);
                }
            }
Esempio n. 7
0
            /****************************************************************************************
            * Private/protected members, functions and properties
            ****************************************************************************************/

            private double CalculateLongitudinalElectricComponent(
                double effectiveTime_fm,
                double radialDistance_fm,
                double conductivity_MeV
                )
            {
                if (effectiveTime_fm > 0)
                {
                    Func <double, double> integrand = k => PointChargeLongitudinalElectricComponentIntegrand(
                        k, effectiveTime_fm, radialDistance_fm, conductivity_MeV);

                    double integral = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 1, 64);

                    return(Coupling * PointChargeVelocity * integral);
                }
                else
                {
                    return(0);
                }
            }