Prefer clone_from over assign
This commit is contained in:
@@ -152,10 +152,10 @@ impl EmbeddedButcherTableau for BogackiShampine {
|
||||
}
|
||||
|
||||
pub trait Integrable {
|
||||
type State;
|
||||
/// This type should support `clone_from`
|
||||
type State: Clone;
|
||||
type Diff;
|
||||
|
||||
fn assign(s: &mut Self::State, o: &Self::State);
|
||||
fn scaled_add(s: &mut Self::State, o: &Self::Diff, scale: Float);
|
||||
}
|
||||
|
||||
@@ -186,11 +186,11 @@ pub fn integrate<BTableau: ButcherTableau, F: Integrable, RHS>(
|
||||
let simtime;
|
||||
match i {
|
||||
0 => {
|
||||
F::assign(fut, prev);
|
||||
fut.clone_from(prev);
|
||||
simtime = *time;
|
||||
}
|
||||
i if i < BTableau::S => {
|
||||
F::assign(fut, prev);
|
||||
fut.clone_from(prev);
|
||||
for (&a, k) in BTableau::A[i - 1].iter().zip(k.iter()) {
|
||||
if a == 0.0 {
|
||||
continue;
|
||||
@@ -200,7 +200,7 @@ pub fn integrate<BTableau: ButcherTableau, F: Integrable, RHS>(
|
||||
simtime = *time + dt * BTableau::C[i - 1];
|
||||
}
|
||||
_ if i == BTableau::S => {
|
||||
F::assign(fut, prev);
|
||||
fut.clone_from(prev);
|
||||
for (&b, k) in BTableau::B.iter().zip(k.iter()) {
|
||||
if b == 0.0 {
|
||||
continue;
|
||||
@@ -236,7 +236,7 @@ pub fn integrate_embedded_rk<BTableau: EmbeddedButcherTableau, F: Integrable, RH
|
||||
RHS: FnMut(&mut F::Diff, &F::State, Float),
|
||||
{
|
||||
integrate::<BTableau, F, RHS>(rhs, prev, fut, time, dt, k);
|
||||
F::assign(fut2, prev);
|
||||
fut2.clone_from(prev);
|
||||
for (&b, k) in BTableau::BSTAR.iter().zip(k.iter()) {
|
||||
if b == 0.0 {
|
||||
continue;
|
||||
@@ -256,10 +256,6 @@ fn ballistic() {
|
||||
impl Integrable for Ball {
|
||||
type State = Ball;
|
||||
type Diff = (Float, Float);
|
||||
fn assign(s: &mut Self::State, o: &Self::State) {
|
||||
s.z = o.z;
|
||||
s.v = o.v;
|
||||
}
|
||||
fn scaled_add(s: &mut Self::State, o: &Self::Diff, sc: Float) {
|
||||
s.z += o.0 * sc;
|
||||
s.v += o.1 * sc;
|
||||
|
||||
Reference in New Issue
Block a user