From 77a74fcea5c628bb426b5cce1012e4e5504b10f1 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Mon, 4 Apr 2016 22:35:20 +0200 Subject: Plane wave still broken. --- src/physics.c | 57 ++++++++++++++++++++++++++++++++++++--------------------- src/physics.h | 2 ++ 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/physics.c b/src/physics.c index 947eb60..0925664 100644 --- a/src/physics.c +++ b/src/physics.c @@ -64,7 +64,6 @@ static void phy_calc_uec_E(float *uec, float dt, float fc0, float fc1, uec[3] = 1.0f / tmp * dt / sq(EPS_ZERO) * fc1 * fc2; // equations above are for the D field and E = 1/eps * D - //uec[0] *= 1.0f / eps; uec[1] *= 1.0f / eps; uec[2] *= 1.0f / eps; uec[3] *= 1.0f / eps; @@ -95,7 +94,7 @@ void phy_sim_reset_aux(phy_sim *sim) aux->eps = 1; aux->mu = 1; - { + if (0){ float cx, cy, cz, cr, d; cx = 25, cy = 25, cz = 65; @@ -116,13 +115,19 @@ void phy_sim_reset_aux(phy_sim *sim) phy_calc_fc(fc_H, x, sim->pml_widths, fi->dims, dt, 0.0f); phy_calc_fc(fc_E, x, sim->pml_widths, fi->dims, dt, 0.5f); - phy_calc_uec_H(aux->uec_H[0], dt, fc_H[0], fc_H[1], fc_H[2], aux->mu); - phy_calc_uec_H(aux->uec_H[1], dt, fc_H[1], fc_H[0], fc_H[2], aux->mu); - phy_calc_uec_H(aux->uec_H[2], dt, fc_H[2], fc_H[0], fc_H[1], aux->mu); - - phy_calc_uec_E(aux->uec_E[0], dt, fc_E[0], fc_E[1], fc_E[2], aux->eps); - phy_calc_uec_E(aux->uec_E[1], dt, fc_E[1], fc_E[0], fc_E[2], aux->eps); - phy_calc_uec_E(aux->uec_E[2], dt, fc_E[2], fc_E[0], fc_E[1], aux->eps); + phy_calc_uec_H(aux->uec_H[0], dt, fc_H[0], fc_H[1], fc_H[2], + aux->mu); + phy_calc_uec_H(aux->uec_H[1], dt, fc_H[1], fc_H[0], fc_H[2], + aux->mu); + phy_calc_uec_H(aux->uec_H[2], dt, fc_H[2], fc_H[0], fc_H[1], + aux->mu); + + phy_calc_uec_E(aux->uec_E[0], dt, fc_E[0], fc_E[1], fc_E[2], + aux->eps); + phy_calc_uec_E(aux->uec_E[1], dt, fc_E[1], fc_E[0], fc_E[2], + aux->eps); + phy_calc_uec_E(aux->uec_E[2], dt, fc_E[2], fc_E[0], fc_E[1], + aux->eps); } } @@ -156,7 +161,7 @@ int phy_sim_create(phy_sim *sim) fi->dims[0] = 50; fi->dims[1] = 50; - fi->dims[2] = 100; + fi->dims[2] = 50; fi->spacing = 7e+9f / min3(fi->dims[0], fi->dims[1], fi->dims[2]); sim->time_delta = 0.10f; @@ -176,8 +181,9 @@ int phy_sim_create(phy_sim *sim) sim->source_xyplane.z = fi->dims[2] / 2;//sim->pml_widths[2] + 5; sim->source_xyplane.Px = 0; sim->source_xyplane.Py = 1; - sim->source_xyplane.lambda = 2; - sim->source_xyplane.time = 5; + sim->source_xyplane.lambda = 20; + sim->source_xyplane.time = 2; + sim->source_xyplane.enabled = true; fi->xstr = 3; fi->ystr = fi->xstr * fi->dims[0]; @@ -220,7 +226,7 @@ error: static float gauss(phy_source_xyplane *s, float t) { - return exp(-s->lambda * sq(t - s->time)); + return sin(t); //exp(-s->lambda * sq(t - s->time)); } void phy_sim_add_sources_H(phy_sim *sim) @@ -229,12 +235,18 @@ void phy_sim_add_sources_H(phy_sim *sim) size_t x, y, z; float src_A, src_x, src_y, delay; + if (!sim->source_xyplane.enabled) + return; + z = sim->source_xyplane.z; - delay = -fi->spacing / (2.0f * LIGHT_SPEED) - + sim->time_delta / 2.0f; + delay = fi->spacing / (2.0f * LIGHT_SPEED) + - sim->time_delta / 2.0f + 0.35; - src_A = gauss(&sim->source_xyplane, sim->time + delay); + /*delay = - fi->spacing / (2.0f * LIGHT_SPEED) + + sim->time_delta / 2.0f;*/ + + src_A = gauss(&sim->source_xyplane, sim->time + delay) * 1; src_x = -sim->source_xyplane.Py * src_A; src_y = sim->source_xyplane.Px * src_A; @@ -245,8 +257,8 @@ void phy_sim_add_sources_H(phy_sim *sim) aux = sim->aux + x * fi->xstr1 + y * fi->ystr1 + z * fi->zstr1; - aux->curl_H[0] += 1.0f / fi->spacing * src_y; - aux->curl_H[1] += -1.0f / fi->spacing * src_x; + aux->curl_H[0] += src_y / fi->spacing; + aux->curl_H[1] -= src_x / fi->spacing; } } @@ -256,9 +268,12 @@ void phy_sim_add_sources_E(phy_sim *sim) size_t x, y, z; float src_x, src_y, src_A; + if (!sim->source_xyplane.enabled) + return; + z = sim->source_xyplane.z - 1; - src_A = gauss(&sim->source_xyplane, sim->time); + src_A = gauss(&sim->source_xyplane, sim->time) * 1; src_x = sim->source_xyplane.Px * src_A; src_y = sim->source_xyplane.Py * src_A; @@ -269,8 +284,8 @@ void phy_sim_add_sources_E(phy_sim *sim) aux = sim->aux + x * fi->xstr1 + y * fi->ystr1 + z * fi->zstr1; - aux->curl_E[0] += 1.0f / fi->spacing * src_y; - aux->curl_E[1] += -1.0f / fi->spacing * src_x; + aux->curl_E[0] += src_y / fi->spacing; + aux->curl_E[1] -= src_x / fi->spacing; } } diff --git a/src/physics.h b/src/physics.h index 73ea4d7..04744ee 100644 --- a/src/physics.h +++ b/src/physics.h @@ -34,6 +34,8 @@ typedef struct { } phy_field_aux_point; typedef struct { + bool enabled; + size_t z; float Px, Py; -- cgit