Example #1
0
        static void TestPotential(Func <LorentzVectorVariableU, LorentzVectorU> createPotential, EuclideanVector3 v)
        {
            LorentzVectorVariableU coordinates = new LorentzVectorVariableU("t", "x", "y", "z");

            LorentzVectorU         potential = createPotential(coordinates);
            LorentzVectorOperatorL del       = coordinates.Del;

            ElectromagneticField field0 = new ElectromagneticField(potential, del);

            TestField(field0);

            ElectromagneticField field1 = field0.Transform(v);

            TestField(field1);
            TestFieldTransforms(field0.ElectricField, field0.MagneticField, field1.ElectricField, field1.MagneticField, v);
            CompareInvariantScalars(field0, field1);

            ElectromagneticField field2 = field1.Transform(-v);

            TestField(field2);
            TestFieldTransforms(field1.ElectricField, field1.MagneticField, field2.ElectricField, field2.MagneticField, -v);
            CompareInvariantScalars(field1, field2);

            Assert.AreEqual(field0.Potential, field2.Potential, "A dual transform");
            Assert.AreEqual(field0.Del.ToString(), field2.Del.ToString(), "Del dual transform");
            Assert.AreEqual(field0.ElectricField, field2.ElectricField, "E dual transform");
            Assert.AreEqual(field0.MagneticField, field2.MagneticField, "B dual transform");
            Assert.AreEqual(field0.CurrentDensity, field2.CurrentDensity, "J dual transform");
        }
Example #2
0
 static void TestField(ElectromagneticField field)
 {
     TestFieldStrength(field.FieldStrengthTensor, field.ElectricField, field.MagneticField);
     TestDualFieldStrength(field.DualFieldStrengthTensor, field.ElectricField, field.MagneticField);
     TestMaxwellsEquations(field);
     TestBianchiIdentities(field.FieldStrengthTensor, field.Del.Invert());
     TestCurrentDensity(field.CurrentDensity, field.Del);
 }
Example #3
0
        static void CompareInvariantScalars(ElectromagneticField field1, ElectromagneticField field2)
        {
            EuclideanVector3 E1 = field1.ElectricField;
            EuclideanVector3 B1 = field1.MagneticField;
            EuclideanVector3 E2 = field2.ElectricField;
            EuclideanVector3 B2 = field2.MagneticField;

            //Symbol comparison failure
            // Expected:<2(y^2+z^2)^-1>. Actual:<2(-v^2+1)^-1*(y^2+z^2)^-2*(z^2+v^2*(-z^2-y^2)+y^2)>.
            //Assert.AreEqual(field1.FieldStrengthTensor.InvariantScalar, field2.FieldStrengthTensor.InvariantScalar);
            Assert.AreEqual(field1.FieldStrengthTensor.Dot(field1.DualFieldStrengthTensor), field2.FieldStrengthTensor.Dot(field2.DualFieldStrengthTensor));
        }
Example #4
0
        static void TestMaxwellsEquations(ElectromagneticField F)
        {
            Operator dt = F.Del.Scalar;
            EuclideanVector3Operator del    = F.Del.Vector;
            Symbol           chargeDensity  = F.CurrentDensity.Scalar;
            EuclideanVector3 currentDensity = F.CurrentDensity.Vector;

            Assert.AreEqual(del.Dot(F.ElectricField), chargeDensity, "Gauss' Law:");
            Assert.AreEqual(del.Dot(F.MagneticField), Symbol.Zero, "Gauss' Law for Magnetism:");
            Assert.AreEqual(del.Cross(F.ElectricField) + dt * F.MagneticField, EuclideanVector3.Zero, "Faraday's Law of Induction");
            Assert.AreEqual(del.Cross(F.MagneticField) - dt * F.ElectricField, currentDensity, "Ampere's Law");
        }