package fdtd;
public class AbctMz {
// TODO Auto-generated method stub
static double[] ezleft = new double[Gridtmz.SizeY*6];
static double[] ezRight = new double[Gridtmz.SizeY*6];
static double[] ezTop = new double[Gridtmz.SizeX*6];
static double[] ezBottom = new double[Gridtmz.SizeX*6];
static double temp1 = Math.sqrt(Gridtmz.ceze[0][0]*Gridtmz.chye[0][0]);
static double temp2 = 1.0/temp1 + 2.0 +temp1;
static double coef0 = -(1.0 / temp1 - 2.0 + temp1) /temp2;
static double coef1 = -2.0 * (temp1 - 1.0/temp1) /temp2;
static double coef2 = 4.0 * (temp1 + 1.0 / temp1) /temp2;
private static int ind(int a,int b,int c) {
return a*6+b*3+c;
}
public static void abc(double [][] Ez) {
for(int nn = 0; nn < Gridtmz.SizeY;nn++) {
Ez[0][nn] = coef0 * (Ez[2][nn] + ezleft[ind(0,1,nn)]) + coef1 *
(ezleft[ind(0,0,nn)] + ezleft[ind(2,0,nn)]-Ez[1][nn] - ezleft[ind(1,1,nn)])
+ coef2 * ezleft[ind(1,0,nn)] -ezleft[ind(2,1,nn)];
for(int mm = 0;mm < 3; mm++) {
ezleft[ind(mm,1,nn)] = ezleft[ind(mm,0,nn)];
ezleft[ind(mm,0,nn)] = Ez[mm][nn];
}
}
for(int nn = 0; nn <Gridtmz.SizeY; nn++) {
Ez[Gridtmz.SizeX-1][nn] = coef0 * (Ez[Gridtmz.SizeX - 3][nn] + ezRight[ind(0,1,nn)])
+coef1 *(ezRight[ind(0,0,nn)] + ezRight[ind(2,0,nn)]
- Ez[Gridtmz.SizeX - 2][nn] - ezRight[ind(1,1,nn)])
+coef2 * ezRight[ind(1,0,nn)] - ezRight[ind(2,1,nn)];
for(int mm = 0 ; mm < 3; mm++) {
ezRight[ind(mm,1,nn)] = ezRight[ind(mm,0,nn)];
ezRight[ind(mm,0,nn)] = Ez[Gridtmz.SizeX-1-mm][nn];
}
}
for(int mm = 0;mm<Gridtmz.SizeX; mm++) {
Ez[mm][0] = coef0 * (Ez[mm][2] +ezBottom[ind(0,1,mm)])
+ coef1 * (ezBottom[ind(0,0,mm)] + ezBottom[ind(2,0,mm)]
- Ez[mm][1] - ezBottom[ind(1,1,mm)])
+coef2 * ezBottom[ind(1,0,mm)] - ezBottom[ind(2,1,mm)];
for(int nn = 0; nn < 3;nn++) {
ezBottom[ind(nn,1,mm)] = ezBottom[ind(nn,0,mm)];
ezBottom[ind(nn,0,mm)] = Ez[mm][nn];
}
}
for(int mm = 0;mm<Gridtmz.SizeX; mm++) {
Ez[mm][Gridtmz.SizeY-1] = coef0 * (Ez[mm][Gridtmz.SizeY - 3] +ezTop[ind(0,1,mm)])
+ coef1 * (ezTop[ind(0,0,mm)] + ezTop[ind(2,0,mm)]
- Ez[mm][Gridtmz.SizeY - 2] - ezTop[ind(1,1,mm)])
+coef2 * ezTop[ind(1,0,mm)] - ezTop[ind(2,1,mm)];
for(int nn = 0; nn < 3;nn++) {
ezTop[ind(nn,1,mm)] = ezTop[ind(nn,0,mm)];
ezTop[ind(nn,0,mm)] = Ez[mm][Gridtmz.SizeY-1-nn];
}
}
}
}