summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2016-04-04 22:35:20 +0200
committerPaweł Redman <pawel.redman@gmail.com>2016-04-04 22:35:20 +0200
commit77a74fcea5c628bb426b5cce1012e4e5504b10f1 (patch)
tree296253fc5d851497bd36890014143afab20fb398
parent5e519dca5f8fbf567f8d07f72327f62659eee14d (diff)
Plane wave still broken.
-rw-r--r--src/physics.c57
-rw-r--r--src/physics.h2
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;