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; }
/* 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; }