// mul1N pointwise multiplies a scalar (1-component) with an N-component vector, // yielding an N-component vector stored in dst. func mul1N(dst, a, b *data.Slice) { util.Assert(a.NComp() == 1) util.Assert(dst.NComp() == b.NComp()) for c := 0; c < dst.NComp(); c++ { cuda.Mul(dst.Comp(c), a, b.Comp(c)) } }
// Sets dst to the full (unnormalized) magnetization in A/m func SetMFull(dst *data.Slice) { // scale m by Msat... msat, rM := Msat.Slice() if rM { defer cuda.Recycle(msat) } for c := 0; c < 3; c++ { cuda.Mul(dst.Comp(c), M.Buffer().Comp(c), msat) } // ...and by cell volume if applicable vol, rV := geometry.Slice() if rV { defer cuda.Recycle(vol) } if !vol.IsNil() { for c := 0; c < 3; c++ { cuda.Mul(dst.Comp(c), dst.Comp(c), vol) } } }
// mulNN pointwise multiplies two N-component vectors, // yielding an N-component vector stored in dst. func mulNN(dst, a, b *data.Slice) { cuda.Mul(dst, a, b) }