示例#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");
        }
示例#2
0
        public ElectromagneticField(LorentzVectorU potential, LorentzVectorOperatorL del)
        {
            this.Potential = potential;
            this.Del       = del;

            this.ElectricField           = -this.Del.Vector * potential.Scalar - this.Del.Scalar * potential.Vector;
            this.MagneticField           = this.Del.Vector.Cross(potential.Vector);
            this.FieldStrengthTensor     = potential.Curl(this.Del.Invert());
            this.CurrentDensity          = this.Del * this.FieldStrengthTensor;
            this.DualFieldStrengthTensor = new LorentzMatrixLL((i, j) =>
            {
                Symbol symbol = Symbol.Zero;
                for (int k = 0; k < 4; k++)
                {
                    for (int l = 0; l < 4; l++)
                    {
                        symbol = symbol - LeviCivita.Four[i, j, k, l] * this.FieldStrengthTensor[k, l] / 2;
                    }
                }
                return(symbol);
            });
        }
示例#3
0
 static void TestCurrentDensity(LorentzVectorU J, LorentzVectorOperatorL del)
 {
     Assert.AreEqual(del.Dot(J), Symbol.Zero, "Divergence of current density");
 }