/* C_FanSA.c / OPenMOM / ch.9 */ #include #include "omm_datalib.h" static void xy(double r, double a, int div, int i, int j, double *x, double *y) { const double dtor = atan(1) / 45; double px1, px2, py1, py2; if (j >= 0) { const double arg = a * (div - j) / div; px1 = 0; py1 = r + r * j / div; px2 = r * sin(arg * dtor); py2 = r * (1 + cos(arg * dtor)); } else { const double x1 = r * sin(a * dtor); const double y1 = r * (1 + cos(a * dtor)); px1 = 0; py1 = r + r * j / div; py2 = y1 + y1 * j / div; px2 = x1 / (y1 * y1) * py2 * (2 * y1 - py2); // x = f(y) = x1 / (y1 * y1) * (2 * y1 - y) } const double f = (div != abs(j)) ? (double)i / (div - abs(j)) : 0; *x = (1 - f) * px1 + f * px2; *y = (1 - f) * py1 + f * py2; } int main(void) { const double fstart = 2e9; const double fstop = 11e9; const int fdiv = 45; const double r = 5.44e-3; const double a = 60; const double gpx = 30e-3; const double gpy = 30e-3; const double dg = 1.0e-3; const double d = 1.0e-3; // Wvf // initialize omm_init(); // title omm_title("Fan-Shaped Card Antenna"); // geometry // feed omm_geometry_yline(0, -dg, 0, 0, 1); omm_feed(1, 0); omm_radius(0.3 * dg); // ground omm_geometry_zrect(0, r - gpx, 0, -dg, -dg - gpy, NINT(gpx - r, d), NINT(gpy, d)); omm_geometry_zrect(0, r, 0, -dg, -dg - gpy, NINT( r, d), NINT(gpy, d)); // fan const int div = NINT(r, d); // h-lines for (int j = - div + 1; j < div; j++) { for (int i = 0; i < div - abs(j); i++) { double xs, xe, ys, ye; xy(r, a, div, i + 0, j, &xs, &ys); xy(r, a, div, i + 1, j, &xe, &ye); omm_geometry_wire(1, +xs, +xe, ys, ye, 0, 0, 1); omm_geometry_wire(1, -xs, -xe, ys, ye, 0, 0, 1); } } // v-lines for (int i = 0; i < div; i++) { for (int j = - div + i; j < div - i; j++) { double xs, xe, ys, ye; xy(r, a, div, i, j + 0, &xs, &ys); xy(r, a, div, i, j + 1, &xe, &ye); omm_geometry_wire(1, +xs, +xe, ys, ye, 0, 0, 1); if (i != 0) omm_geometry_wire(1, -xs, -xe, ys, ye, 0, 0, 1); } } // border for (int j = - div; j < div; j++) { double xs, xe, ys, ye; xy(r, a, div, div - abs(j + 0), j + 0, &xs, &ys); xy(r, a, div, div - abs(j + 1), j + 1, &xe, &ye); omm_geometry_wire(1, +xs, +xe, ys, ye, 0, 0, 1); omm_geometry_wire(1, -xs, -xe, ys, ye, 0, 0, 1); } // radius omm_radiusall(1, 0.2 * d); // Z0 omm_z0(50); // frequency omm_frequency(fstart, fstop, fdiv); // frequency char. omm_plotfrequency(0, 1, 0, 1); // output omm_outdata("C_FanSA.omm"); return 0; }