49 lines
1.8 KiB
Rust
49 lines
1.8 KiB
Rust
use coremem::{mat, SimState};
|
|
use coremem::render::{self, Renderer as _};
|
|
use std::{thread, time};
|
|
|
|
fn main() {
|
|
let width = 201;
|
|
let mut state = SimState::new(width, 101, 1e-3 /* feature size */);
|
|
|
|
for inset in 0..20 {
|
|
for x in 0..width {
|
|
*state.get_mut(x, inset).mat_mut() = mat::Conductor { conductivity: 0.1*(20.0 - inset as f64) }.into();
|
|
}
|
|
for y in 0..100 {
|
|
*state.get_mut(inset, y).mat_mut() = mat::Conductor { conductivity: 0.1*(20.0 - inset as f64) }.into();
|
|
*state.get_mut(width-1 - inset, y).mat_mut() = mat::Conductor { conductivity: 0.1*(20.0 - inset as f64) }.into();
|
|
}
|
|
}
|
|
for y in 75..100 {
|
|
for x in 0..width {
|
|
// from https://www.thoughtco.com/table-of-electrical-resistivity-conductivity-608499
|
|
// NB: different sources give pretty different values for this
|
|
// NB: Simulation misbehaves for values > 10... Proably this model isn't so great.
|
|
// Maybe use \eps or \xi instead of conductivity.
|
|
*state.get_mut(x, y).mat_mut() = mat::Conductor { conductivity: 2.17 }.into();
|
|
}
|
|
}
|
|
|
|
let mut step = 0u64;
|
|
let mut renderer = render::Y4MRenderer::new("test.y4m");
|
|
loop {
|
|
step += 1;
|
|
let imp = if step < 50 {
|
|
250000.0 * ((step as f64)*0.04*std::f64::consts::PI).sin()
|
|
} else {
|
|
0.0
|
|
};
|
|
// state.impulse_ex(50, 50, imp);
|
|
// state.impulse_ey(50, 50, imp);
|
|
// state.impulse_bz(20, 20, (imp / 3.0e8) as _);
|
|
// state.impulse_bz(80, 20, (imp / 3.0e8) as _);
|
|
for x in 0..width {
|
|
state.impulse_bz(x, 20, (imp / 3.0e8) as _);
|
|
}
|
|
renderer.render(&state);
|
|
state.step();
|
|
thread::sleep(time::Duration::from_millis(67));
|
|
}
|
|
}
|