using System; using GP = Science.Physics.GeneralPhysics; namespace ScienceTest.PhysicsTest.GeneralPhysicsTest { public class VectorCalculusTest { public VectorCalculusTest() { } private string result; public string Result { get{return result;} } public void Compute() { GP.Vector.FunctionOfPosition fp = new GP.Vector.FunctionOfPosition(PositionToVector); GP.Vector.FunctionOfTime ft = new GP.Vector.FunctionOfTime(TimeToVector); GP.Vector.Field vf = new GP.Vector.Field(FieldVector); GP.Vector a = new GP.Vector(); a.VectorFunctionOfPosition = fp; a.VectorFunctionOfTime = ft; a.VectorField = vf; GP.Scalar.FunctionOfPosition fp2 = new GP.Scalar.FunctionOfPosition(PositionToScalar); GP.Scalar.FunctionOfTime st = new GP.Scalar.FunctionOfTime(TimeToScalar); GP.Scalar.Field sf = new GP.Scalar.Field(FieldScalar); GP.Scalar a2 = new GP.Scalar(); a2.ScalarFunctionOfPosition = fp2; a2.ScalarFunctionOfTime = st; a2.ScalarField = sf; GP.Position x = new GP.Position(); x.X = 1.0; x.Y = 2.0; x.Z = 3.0; GP.Time t = new GP.Time(); t.s = 3.0; GP.Scalar s = GP.VectorCalculus.Divergence(a,x); GP.Vector v = GP.VectorCalculus.Curl(a, x); GP.Vector v5 = GP.VectorCalculus.Gradient(a2, x); result += s.ToString()+" Divergence : FunctionOfPosition "+"\r\n"; result += " " + "\r\n"; result += v.ToString() + " Curl : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; result += v5.ToString() + " Gradient : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Scalar s2 = GP.VectorCalculus.Divergence(a, x, t); GP.Vector v2 = GP.VectorCalculus.Curl(a, x, t); GP.Vector v6 = GP.VectorCalculus.Gradient(a2, x, t); result += s2.Magnitude.ToString() + " Divergence : Field " + "\r\n"; result += " " + "\r\n"; result += v2.ToString() + " Curl : Field " + "\r\n"; result += " " + "\r\n"; result += v6.ToString() + " Gradient : Field " + "\r\n"; result += " " + "\r\n"; GP.Vector v7 = GP.VectorCalculus.TimeDerivative(a, t); GP.Vector v8 = GP.VectorCalculus.TimePartialDerivative(a, x, t); GP.Scalar s7 = GP.VectorCalculus.TimeDerivative(a2, t); GP.Scalar s8 = GP.VectorCalculus.TimePartialDerivative(a2, x, t); result += s7.ToString() + " Scalar : TimeDerivative : FunctionOfTime " + "\r\n"; result += " " + "\r\n"; result += s8.ToString() + " Scalar : TimePartialDerivative : Field " + "\r\n"; result += " " + "\r\n"; result += v7.ToString() + " Vector : TimeDerivative : FunctionOfTime " + "\r\n"; result += " " + "\r\n"; result += v8.ToString() + " Vector : TimePartialDerivative : Field " + "\r\n"; result += " " + "\r\n"; GP.Time ti = new GP.Time(); ti.s = 0.0; GP.Time tf = new GP.Time(); tf.s = 2.0; GP.Vector v9 = GP.VectorCalculus.TimeIntegral(a, ti, tf); GP.Scalar s10 = GP.VectorCalculus.TimeIntegral(a2, ti, tf); result += s10.ToString() + " Scalar : TimeIntegral : FunctionOfTime " + "\r\n"; result += " " + "\r\n"; result += v9.ToString() + " Vector : TimeIntegral : FunctionOfTime " + "\r\n"; GP.Vector v10 = GP.VectorCalculus.TimeIntegral(a, x, ti, tf); GP.Scalar s11 = GP.VectorCalculus.TimeIntegral(a2, x, ti, tf); result += " " + "\r\n"; result += s11.ToString() + " Scalar : TimeIntegral : Field " + "\r\n"; result += " " + "\r\n"; result += v10.ToString() + " Vector : TimeIntegral : Field " + "\r\n"; result += " " + "\r\n"; GP.Line.Parameterization para = new Science.Physics.GeneralPhysics.Line.Parameterization(ParaToPosition); GP.Line l = new GP.Line(para); l.ParameterStartValue = 0.0; l.ParameterEndValue = 2.0; GP.Vector v12 = GP.VectorCalculus.LineIntegral(a2, l); result += v12.ToString() + " Scalar : LineIntegral : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Vector v13 = GP.VectorCalculus.LineIntegral(a2, l, t); result += v13.ToString() + " Scalar : LineIntegral : Field " + "\r\n"; result += " " + "\r\n"; GP.Scalar s13 = GP.VectorCalculus.LineIntegralDot(a, l); result += s13.Magnitude.ToString() + " Vector : LineIntegralDot : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Scalar s14 = GP.VectorCalculus.LineIntegralDot(a, l, t); result += s14.Magnitude.ToString() + " Vector : LineIntegralDot : Field " + "\r\n"; result += " " + "\r\n"; GP.Vector v15 = GP.VectorCalculus.LineIntegralCross(a, l); result += v15.ToString() + " Vector : LineIntegralCross : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Vector v16 = GP.VectorCalculus.LineIntegralCross(a, l, t); result += v16.ToString() + " Vector : LineIntegralCross : Field " + "\r\n"; result += " " + "\r\n"; GP.Scalar.FunctionOfPosition alone = new GP.Scalar.FunctionOfPosition(PositionToScalar2); GP.Scalar.Field pt = new GP.Scalar.Field(PositionTimeToScalar); GP.Scalar a3 = new GP.Scalar(); a3.ScalarFunctionOfPosition = alone; a3.ScalarField = pt; GP.Surface.Parameterization para2 = new GP.Surface.Parameterization(ParaToPosition2); GP.Surface surface = new GP.Surface(para2); surface.Parameter1StartValue = 0.0; surface.Parameter1EndValue = Math.PI; surface.Parameter2StartValue = 0.0; surface.Parameter2EndValue = 2.0*Math.PI; GP.Vector v17 = GP.VectorCalculus.SurfaceIntegral(a3, surface); result += v17.ToString() + " Scalar : SurfaceIntegral : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Vector v18 = GP.VectorCalculus.SurfaceIntegral(a3, surface, t); result += v18.ToString() + " Scalar : SurfaceIntegral : Field " + "\r\n"; result += " " + "\r\n"; GP.Vector.FunctionOfPosition rhat = new GP.Vector.FunctionOfPosition(PositionToVector2); GP.Vector.Field vpt = new GP.Vector.Field(PositionTimeToVector); GP.Vector a4 = new GP.Vector(); a4.VectorFunctionOfPosition = rhat; a4.VectorField = vpt; GP.Scalar s19 = GP.VectorCalculus.SurfaceIntegralDot(a4, surface); result += s19.ToString() + " Vector : SurfaceIntegralDot : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Scalar s20 = GP.VectorCalculus.SurfaceIntegralDot(a4, surface, t); result += s20.ToString() + " Vector : SurfaceIntegralDot : Field " + "\r\n"; result += " " + "\r\n"; GP.Vector v21 = GP.VectorCalculus.SurfaceIntegralCross(a4, surface); result += v21.ToString() + " Vector : SurfaceIntegralCross : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Vector v22 = GP.VectorCalculus.SurfaceIntegralCross(a4, surface, t); result += v22.ToString() + " Vector : SurfaceIntegralCross : Field " + "\r\n"; result += " " + "\r\n"; GP.Volume.Parameterization para3 = new GP.Volume.Parameterization(ParaToPosition3); GP.Volume vol = new GP.Volume(para3); vol.Parameter1StartValue = 0.0; vol.Parameter1EndValue = 1.0; vol.Parameter2StartValue = 0.0; vol.Parameter2EndValue = Math.PI; vol.Parameter3StartValue = 0.0; vol.Parameter3EndValue = 2.0 * Math.PI; GP.Scalar s23 = GP.VectorCalculus.VolumeIntegral(a3, vol); result += s23.ToString() + " Scalar : VolumeIntegral : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Scalar s24 = GP.VectorCalculus.VolumeIntegral(a3, vol, t); result += s24.ToString() + " Scalar : VolumeIntegral : Field " + "\r\n"; result += " " + "\r\n"; GP.Vector v25 = GP.VectorCalculus.VolumeIntegral(a4, vol); result += v25.ToString() + " Vector : VolumeIntegral : FunctionOfPosition " + "\r\n"; result += " " + "\r\n"; GP.Vector v26 = GP.VectorCalculus.VolumeIntegral(a4, vol, t); result += v26.ToString() + " Vector : VolumeIntegral : Field " + "\r\n"; result += " " + "\r\n"; } private GP.Position ParaToPosition3(double r, double theta, double phi) { GP.Position x = new GP.Position(); x.X = r*Math.Sin(theta) * Math.Cos(phi); x.Y = r*Math.Sin(theta) * Math.Sin(phi); x.Z = r*Math.Cos(theta); return x; } private GP.Vector PositionToVector2(GP.Position x) { GP.Vector res = new GP.Vector(); res.X = x.X; res.Y = x.Y; res.Z = x.Z; return res; } private GP.Vector PositionTimeToVector(GP.Position x, GP.Time t) { GP.Vector res = new GP.Vector(); res.X = x.X*t.s; res.Y = x.Y*t.s; res.Z = x.Z*t.s; return res; } private GP.Scalar PositionToScalar2(GP.Position x) { GP.Scalar res = new GP.Scalar(); res.Magnitude = 1.0; return res; } private GP.Scalar PositionTimeToScalar(GP.Position x, GP.Time t) { GP.Scalar res = new GP.Scalar(); res.Magnitude = t.s; return res; } private GP.Position ParaToPosition2(double theta, double phi) { GP.Position x = new GP.Position(); x.X = Math.Sin(theta) * Math.Cos(phi); x.Y = Math.Sin(theta) * Math.Sin(phi); x.Z = Math.Cos(theta); return x; } private GP.Position ParaToPosition(double t) { GP.Position x = new GP.Position(); x.X = t; x.Y = t * t; x.Z = t * t * t; return x; } private GP.Vector PositionToVector(GP.Position x) { GP.Vector res = new GP.Vector(); res.X = x.Z; res.Y = x.Y*x.Z; res.Z = x.Y*x.X; return res; } private GP.Vector TimeToVector(GP.Time t) { GP.Vector res = new GP.Vector(); res.X = t.s; res.Y = t.s * t.s; res.Z = t.s * t.s * t.s; return res; } private GP.Vector FieldVector(GP.Position x, GP.Time t) { GP.Vector res = new GP.Vector(); res.X = x.Z; res.Y = x.Y * x.Z; res.Z = x.Y * x.X * t.s; return res; } private GP.Scalar PositionToScalar(GP.Position x) { GP.Scalar res = new GP.Scalar(); res.Magnitude = x.Z + x.Y * x.Z + x.Y * x.X; return res; } private GP.Scalar TimeToScalar(GP.Time t) { GP.Scalar res = new GP.Scalar(); res.Magnitude = t.s * t.s * t.s; return res; } private GP.Scalar FieldScalar(GP.Position x, GP.Time t) { GP.Scalar res = new GP.Scalar(); res.Magnitude = x.Z + x.Y* t.s * x.Z + x.Y * x.X * t.s * t.s ; return res; } } } /* 3.00000000000011 +/- 0 Divergence : FunctionOfPosition -0.999999999999829 +/- 0 i -0.999999999999854 +/- 0 j +0 +/- 0 k Curl : FunctionOfPosition 1.99999999999869 +/- 0 i +3.99999999999996 +/- 0 j +3.00000000000011 +/- 0 k Gradient : FunctionOfPosition 3.00000000000011 Divergence : Field 1.00000000000013 +/- 0 i -4.99999999999947 +/- 0 j +0 +/- 0 k Curl : Field 18.0000000000007 +/- 0 i +18.0000000000007 +/- 0 j +6.99999999998179 +/- 0 k Gradient : Field 26.9999999999693 +/- 0 Scalar : TimeDerivative : FunctionOfTime 18.0000000000044 +/- 0 Scalar : TimePartialDerivative : Field 0.999999999999991 +/- 0 i +5.99999999999994 +/- 0 j +26.9999999999693 +/- 0 k Vector : TimeDerivative : FunctionOfTime 0 +/- 0 i +0 +/- 0 j +1.99999999999998 +/- 0 k Vector : TimePartialDerivative : Field 4 +/- 0 Scalar : TimeIntegral : FunctionOfTime 2 +/- 0 i +2.66666666666667 +/- 0 j +4 +/- 0 k Vector : TimeIntegral : FunctionOfTime 23.3333333333333 +/- 0 Scalar : TimeIntegral : Field 6 +/- 0 i +12 +/- 0 j +4 +/- 0 k Vector : TimeIntegral : Field 18.6666666666666 +/- 0 i +62.171428571428 +/- 0 j +160.000000000014 +/- 0 k Scalar : LineIntegral : FunctionOfPosition 71.9999999999995 +/- 0 i +237.714285714283 +/- 0 j +608.000000000053 +/- 0 k Scalar : LineIntegral : Field 72.5714285714309 Vector : LineIntegralDot : FunctionOfPosition 136.571428571436 Vector : LineIntegralDot : Field 83.2000000000094 +/- 0 i -28.0000000000026 +/- 0 j +2.1177541097009 +/- 0 k Vector : LineIntegralCross : FunctionOfPosition 57.6000000000098 +/- 0 i -20.0000000000027 +/- 0 j +2.1177541097009 +/- 0 k Vector : LineIntegralCross : Field -4.97254752065101E-06 +/- 0.000109336068086257 i -0.00014879035039417 +/- 0.000109372948331102 j -3.87833393748529E-05 +/- 7.19885408479239E-05 k Scalar : SurfaceIntegral : FunctionOfPosition -1.49176425369063E-05 +/- 0.000328008204258776 i -0.000446371051202602 +/- 0.000328118844993413 j -0.000116350018141367 +/- 0.000215965622543835 k Scalar : SurfaceIntegral : Field 12.5665462397832 +/- 7.13353462741053E-05 Vector : SurfaceIntegralDot : FunctionOfPosition 37.6996387193494 +/- 0.000214006038822371 Vector : SurfaceIntegralDot : Field 6.85755769281303E-15 +/- 3.52594328211148E-15 i -4.86421508927232E-15 +/- 3.58066278412612E-15 j +1.47004647517673E-13 +/- 5.04198440148479E-15 k Vector : SurfaceIntegralCross : FunctionOfPosition 8.87294192256839E-16 +/- 1.00857856470972E-14 i -7.12649438464866E-15 +/- 1.02979019355857E-14 j +4.34927344580341E-13 +/- 1.45682845079523E-14 k Vector : SurfaceIntegralCross : Field 4.18856785091214 +/- 0.000251094600332222 Scalar : VolumeIntegral : FunctionOfPosition 12.5657035527364 +/- 0.000753283800996715 Scalar : VolumeIntegral : Field -5.52255867337364E-05 +/- 0.000216658871210304 i +0.000389595261010252 +/- 0.000217637820937005 j -0.000102798072028663 +/- 0.000154473291106072 k Vector : VolumeIntegral : FunctionOfPosition -0.000165676760195227 +/- 0.000649976613630911 i +0.00116878578302683 +/- 0.000652913462811031 j -0.000308394216081823 +/- 0.000463419873318197 k Vector : VolumeIntegral : Field */