Functional!

This commit is contained in:
numzero 2024-04-29 00:11:01 +03:00
parent 9ce8da5f38
commit 07034a6c7a

View File

@ -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) // Γ^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 g = &space.invmetric(pos); // с верхними индексами
let d = space.dmetric(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])) // 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 { 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>())
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
} }
fn dir_deriv(f: impl Fn(Vec2) -> Mat2, pos: Vec2, delta: Vec2) -> Mat2 { fn dir_deriv(f: impl Fn(Vec2) -> Mat2, pos: Vec2, delta: Vec2) -> Mat2 {
@ -206,6 +194,40 @@ mod riemann {
fn diagonal(v: Vec2) -> Mat2 { fn diagonal(v: Vec2) -> Mat2 {
mat2(v.x, 0.0, 0.0, v.y) 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 { fn smoothstep(x: f32) -> f32 {