/// <summary> /// result = f0 * t0 + f1 * t1 /// </summary> public static void AddScaled(this IDiscreteField <double> f0, IDiscreteField <double> t0, IDiscreteField <double> f1, IDiscreteField <double> t1, IDiscreteField <double> result, bool parallel = false) { if (parallel) { ArrayMath.Parallel.AddScaled(f0.Values, t0.Values, f1.Values, t1.Values, f0.Count, result.Values); } else { ArrayMath.AddScaled(f0.Values, t0.Values, f1.Values, t1.Values, f0.Count, result.Values); } }
/// <summary> /// result = f0 + f1 * t /// </summary> public static void AddScaled(this IDiscreteField <Vec3d> f0, IDiscreteField <Vec3d> f1, double t, IDiscreteField <Vec3d> result, bool parallel = false) { if (parallel) { ArrayMath.AddScaledParallel(f0.Values, f1.Values, t, f0.Count, result.Values); } else { ArrayMath.AddScaled(f0.Values, f1.Values, t, f0.Count, result.Values); } }
/// <summary> /// /// </summary> /// <param name="field"></param> /// <param name="deltas"></param> /// <param name="timeStep"></param> /// <param name="parallel"></param> public static void Update(IDiscreteField <Vec3d> field, Vec3d[] deltas, double timeStep, bool parallel = false) { var vals = field.Values; int n = field.Count; if (parallel) { ArrayMath.Parallel.AddScaled(vals, deltas, timeStep, n, vals); } else { ArrayMath.AddScaled(vals, deltas, timeStep, n, vals); } Array.Clear(deltas, 0, n); }