1 #include "definitions.h"
2 #include "exit_codes.h"
5 extern unsigned char **oddity;
7 extern int width, height;
9 double find_Ex(int i, int j)
14 if(odd > CONDUCTOR_FLOATING) {
16 if (odd == TOP_LEFT_CORNER || odd == BOTTOM_LEFT_CORNER)
17 Ex=Vij[0][j]-Vij[1][j];
19 else if (odd == TOP_RIGHT_CORNER || odd == BOTTOM_RIGHT_CORNER)
20 Ex=Vij[width-2][0]-Vij[width-1][0];
22 else if (odd == ORDINARY_POINT_TOP_EDGE || odd == ORDINARY_POINT_BOTTOM_EDGE)
23 Ex=0.5*(Vij[i-1][j]-Vij[i+1][j]);
25 else if (odd == ORDINARY_POINT_LEFT_EDGE)
26 Ex=(Vij[i][j]-Vij[i+1][j]);
28 else if (odd == ORDINARY_POINT_RIGHT_EDGE)
29 Ex=(Vij[width-2][j]-Vij[width-1][j]);
31 else if(odd == METAL_LEFT || odd == METAL_BELOW_AND_LEFT || odd == METAL_ABOVE_AND_LEFT)
32 Ex=Vij[i][j]-Vij[i+1][j];
34 else if(odd == METAL_RIGHT || odd == METAL_ABOVE_AND_RIGHT || odd ==METAL_BELOW_AND_RIGHT)
35 Ex=Vij[i-1][j]-Vij[i][j];
37 else if (odd == ORDINARY_INTERIOR_POINT || odd == METAL_ABOVE || odd == METAL_BELOW)
38 Ex=0.5*(Vij[i-1][j]-Vij[i+1][j]);
40 else if (odd >= DIFFERENT_DIELECTRIC_ABOVE_AND_RIGHT && odd < UNDEFINED_ODDITY )
41 Ex=0.5*(Vij[i-1][j]-Vij[i+1][j]);
44 fprintf(stderr,"oddity[%d][%d]=%d\n",i,j,odd);
45 exit_with_msg_and_exit_code("Internal error in find_Ex",INTERNAL_ERROR);
51 double find_Ey(int i, int j)
57 if(odd > CONDUCTOR_FLOATING) {
59 if (odd == TOP_LEFT_CORNER || odd == TOP_RIGHT_CORNER)
60 Ey=Vij[i][1]-Vij[i][0];
62 else if (odd == BOTTOM_LEFT_CORNER || odd == BOTTOM_RIGHT_CORNER)
63 Ey=Vij[i][height-1]-Vij[i][height-2];
65 else if (odd == ORDINARY_POINT_LEFT_EDGE || odd == ORDINARY_POINT_RIGHT_EDGE)
66 Ey=0.5*(Vij[i][j+1]-Vij[i][j-1]);
68 else if (odd == ORDINARY_POINT_BOTTOM_EDGE)
69 Ey=Vij[i][j+1]-Vij[i][j];
71 else if (odd == ORDINARY_POINT_TOP_EDGE)
72 Ey=Vij[i][j]-Vij[i][j-1];
74 else if (odd == METAL_ABOVE || odd == METAL_ABOVE_AND_LEFT || odd == METAL_ABOVE_AND_RIGHT)
75 Ey=Vij[i][j+1]-Vij[i][j];
77 else if (odd == METAL_BELOW || odd == METAL_BELOW_AND_LEFT || odd == METAL_BELOW_AND_RIGHT)
78 Ey=Vij[i][j]-Vij[i][j-1];
80 else if(odd >= DIFFERENT_DIELECTRIC_LOCALLY || odd == ORDINARY_INTERIOR_POINT || odd == METAL_RIGHT || odd == METAL_LEFT)
81 Ey=0.5*(Vij[i][j+1]-Vij[i][j-1]);
84 fprintf(stderr,"oddity[%d][%d]=%d\n",i,j,odd);
85 exit_with_msg_and_exit_code("Internal error in find_Ey",INTERNAL_ERROR);
91 double find_E(int w, int h)