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