Skip to main content

scale_by_field

Function scale_by_field 

Source
pub fn scale_by_field<T>(
    backend: ComputeBackend,
    v: &Field<T>,
    s: &Field<f64>,
) -> Field<T>
where T: Copy + Send + Sync + Mul<f64, Output = T>,
Expand description

Scale a vector/tensor field by a per-element scalar field: c[i] = v[i] * s[i].

This is rho*U (density field times velocity field) and every other “coefficient field times ranked field” product. Units multiply: [v]*[s].

Bit-identical to Field::scale for Field<Vector3>.

§Panics

Panics if v.len() != s.len().

use outram_foam_basic_lib::compute::ComputeBackend;
use outram_foam_basic_lib::fields::field::Field;
use outram_foam_basic_lib::fields::parallel;
use outram_foam_basic_lib::primitives::Vector3;

let u = Field::uniform(2, Vector3::new(1.0, 2.0, 3.0));   // [m/s]
let rho = Field::new(vec![2.0, 0.5]);                     // [kg/m^3]
let rho_u = parallel::scale_by_field(ComputeBackend::CpuMulti, &u, &rho); // [kg/(m^2 s)]
assert_eq!(rho_u[0], Vector3::new(2.0, 4.0, 6.0));
assert_eq!(rho_u[1], Vector3::new(0.5, 1.0, 1.5));