Ejemplo n.º 1
0
void gridInit1d(Grid *g) {
	double imp0 = 377.0, depthInLayer = 0.0, lossFactor;
	int mm;

	SizeX += NLOSS;		// size of domain
	Type = oneDGrid; 	// set grid type
	
	g->hz = (double *)calloc(SizeX - 1, sizeof(double));
	g->chzh = (double *)calloc(SizeX - 1, sizeof(double));
	g->chze = (double *)calloc(SizeX - 1, sizeof(double));
	g->ey = (double *)calloc(SizeX, sizeof(double));
	g->ceye = (double *)calloc(SizeX, sizeof(double));
	g->ceyh = (double *)calloc(SizeX, sizeof(double));

	/* set electric-field update coefficients */
	for (mm = 0; mm < SizeX - 1; mm++) {
		if (mm < SizeX - 1 - NLOSS) {
			Ceye1(mm) = 1.0;
			Ceyh1(mm) = Cdtds * imp0;
			Chzh1(mm) = 1.0;
			Chze1(mm) = Cdtds / imp0;
		} else {
			depthInLayer += 0.5;
			lossFactor = MAX_LOSS * pow(depthInLayer / NLOSS, 2);
			Ceye1(mm) = (1.0 - lossFactor) / (1.0 + lossFactor);
			Ceyh1(mm) = Cdtds * imp0 / (1.0 + lossFactor);
			depthInLayer += 0.5;
			lossFactor = MAX_LOSS * pow(depthInLayer / NLOSS, 2);
			Chzh1(mm) = (1.0 - lossFactor) / (1.0 + lossFactor);
			Chze1(mm) = Cdtds / imp0 / (1.0 + lossFactor);
		}
	}

return;
}
Ejemplo n.º 2
0
/* update electric field */
void updateE2d(Grid *g) {
  int mm, nn;

  if (Type == oneDGrid) {

    for (mm = 1; mm < SizeX - 1; mm++)
      Ey1(mm) = Ceye1(mm) * Ey1(mm) 
	- Ceyh1(mm) * (Hz1(mm) - Hz1(mm - 1));

  } else { 

    for (mm = 0; mm < SizeX - 1; mm++)    /*@ \label{updatetezB} @*/
      for (nn = 1; nn < SizeY - 1; nn++)
	Ex(mm, nn) = Cexe(mm, nn) * Ex(mm, nn) +
	  Cexh(mm, nn) * (Hz(mm, nn) - Hz(mm, nn - 1));

    for (mm = 1; mm < SizeX - 1; mm++)
      for (nn = 0; nn < SizeY - 1; nn++)
	Ey(mm, nn) = Ceye(mm, nn) * Ey(mm, nn) -
	  Ceyh(mm, nn) * (Hz(mm, nn) - Hz(mm - 1, nn));
  }

  return;
}