diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/physics.c | 57 | ||||
| -rw-r--r-- | 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;  | 
