コード例 #1
0
ファイル: grid1dhz.c プロジェクト: Volosheniuk/Vychmat
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;
}
コード例 #2
0
ファイル: updatetez.c プロジェクト: aitatanit/uFDTD
/* update magnetic field */
void updateH2d(Grid *g) {
  int mm, nn;

  if (Type == oneDGrid) {

    for (mm = 0; mm < SizeX - 1; mm++)
      Hz1(mm) = Chzh1(mm) * Hz1(mm) 
	- Chze1(mm) * (Ey1(mm + 1) - Ey1(mm));

  } else { 

    for (mm = 0; mm < SizeX - 1; mm++)    /*@ \label{updatetezA} @*/
      for (nn = 0; nn < SizeY - 1; nn++)
	Hz(mm, nn) = Chzh(mm, nn) * Hz(mm, nn) +
	  Chze(mm, nn) * ((Ex(mm, nn + 1) - Ex(mm, nn))
			  - (Ey(mm + 1, nn) - Ey(mm, nn)));
  }

  return;
}