Functional!
This commit is contained in:
parent
9ce8da5f38
commit
07034a6c7a
|
|
@ -169,20 +169,8 @@ mod riemann {
|
|||
// Γ^i_k_l = .5 * g^i^m * (g_m_k,l + g_m_l,k - g_k_l,m)
|
||||
let g = &space.invmetric(pos); // с верхними индексами
|
||||
let d = space.dmetric(pos);
|
||||
let mut ret: Tens2 = [Mat2::zero(); 2];
|
||||
// ret[i][l][k] = sum((m) => .5f * g[m][i] * (d[k][l][m] + d[l][k][m] - d[m][k][l]))
|
||||
for i in 0..2 {
|
||||
for l in 0..2 {
|
||||
for k in 0..2 {
|
||||
let mut v = 0.0;
|
||||
for m in 0..2 {
|
||||
v += g[m][i] * (d[l][k][m] + d[k][m][l] - d[m][k][l]);
|
||||
}
|
||||
ret[i][l][k] = 0.5 * v;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret
|
||||
make_tens2(|i, l, k| 0.5 * (0..2).map(|m| g[m][i] * (d[l][k][m] + d[k][m][l] - d[m][k][l])).sum::<f32>())
|
||||
}
|
||||
|
||||
fn dir_deriv(f: impl Fn(Vec2) -> Mat2, pos: Vec2, delta: Vec2) -> Mat2 {
|
||||
|
|
@ -206,6 +194,40 @@ mod riemann {
|
|||
fn diagonal(v: Vec2) -> Mat2 {
|
||||
mat2(v.x, 0.0, 0.0, v.y)
|
||||
}
|
||||
|
||||
fn make_vec2(f: impl Fn(usize) -> f32) -> Vec2 {
|
||||
vec2(f(0), f(1))
|
||||
}
|
||||
|
||||
fn make_mat2(f: impl Fn(usize, usize) -> f32) -> Mat2 {
|
||||
mat2(f(0, 0), f(0, 1), f(1, 0), f(1, 1))
|
||||
}
|
||||
|
||||
fn make_tens2(f: impl Fn(usize, usize, usize) -> f32) -> Tens2 {
|
||||
std::array::from_fn(|i| make_mat2(|j, k| f(i, j, k)))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn m2() {
|
||||
let m = make_mat2(|i, j| (i + 2 * j) as f32);
|
||||
assert_eq!(m[0][0], 0.0);
|
||||
assert_eq!(m[1][0], 1.0);
|
||||
assert_eq!(m[0][1], 2.0);
|
||||
assert_eq!(m[1][1], 3.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn t2() {
|
||||
let t = make_tens2(|i, j, k| (i + 2 * j + 4 * k) as f32);
|
||||
assert_eq!(t[0][0][0], 0.0);
|
||||
assert_eq!(t[1][0][0], 1.0);
|
||||
assert_eq!(t[0][1][0], 2.0);
|
||||
assert_eq!(t[1][1][0], 3.0);
|
||||
assert_eq!(t[0][0][1], 4.0);
|
||||
assert_eq!(t[1][0][1], 5.0);
|
||||
assert_eq!(t[0][1][1], 6.0);
|
||||
assert_eq!(t[1][1][1], 7.0);
|
||||
}
|
||||
}
|
||||
|
||||
fn smoothstep(x: f32) -> f32 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user