/* reflectarray.c $ cl.exe reflectarray.c ofd_datalib.c $ reflectarray.exe */ #include "ofd_datalib.h" int main(void) { const int nxarray = 6; const int nyarray = 18; const int ns = 3; const double dx = 10e-3; const double dy = 10e-3; const double w = 1e-3; const double er = 2.6; const double tand = 0.02; const double dt = 1.6e-3; const double h = 5.5e-3; const double freq = 14e9; const double d = 0.5e-3; const double margin = 10 * d; const double l[] = {1.0e-3, 8.0e-3, 9.0e-3}; const double eps0 = 8.854e-12; const double pi = 4 * atan(1); // initialize ofd_init(); // title ofd_title("reflect array (meta-surface)"); // mesh const double x0 = -nxarray / 2.0 * ns * dx; const double x1 = -x0; ofd_xsection(4, x0 - margin, x0, x1, x1 + margin); ofd_xdivision(3, NINT(margin, d), nxarray * NINT(ns * dx, d), NINT(margin, d)); const double y0 = -nyarray / 2.0 * dy; const double y1 = -y0; ofd_ysection(4, y0 - margin, y0, y1, y1 + margin); ofd_ydivision(3, NINT(margin, d), nyarray * NINT(dy, d), NINT(margin, d)); const double z0 = 0; const double z1 = z0 + h - dt; const double z2 = z1 + dt; const double z3 = z2 + 30 * d; ofd_zsection(6, z0 - margin, z0, z1, z2, z3, z3 + margin); ofd_zdivision(5, NINT(margin, d), NINT(z1 - z0, d), NINT(z2 - z1, d), NINT(z3 - z2, d), NINT(margin, d)); // material const double sigma = er * tand * (2 * pi * freq) * eps0; ofd_material(er, sigma, 1, 0, ""); // geometry // ground ofd_geometry(1, 1, x0, x1, y0, y1, z0, z0); // substrate ofd_geometry(2, 1, x0, x1, y0, y1, z1, z2); for (int i = 0; i < nxarray; i++) { for (int j = 0; j < nyarray; j++) { const double x = x0 + (i * ns * dx); const double y = y0 + (j + 0.5) * dy; for (int n = 0; n < ns; n++) { const double xa = x + (n + 0.5) * dx; ofd_geometry(1, 1, xa - 0.5 * l[n], xa + 0.5 * l[n], y - 0.5 * w, y + 0.5 * w, z2, z2); ofd_geometry(1, 1, xa - 0.5 * w, xa + 0.5 * w, y - 0.5 * l[n], y + 0.5 * l[n], z2, z2); } } } // plane wave ofd_planewave(0, 90, 1); // ABC ofd_pml(5, 2, 1e-5); // frequency ofd_frequency1(freq, freq, 0); ofd_frequency2(freq, freq, 0); // solver ofd_solver(30000, 100, 1e-3); // iteration ofd_plotiter(1); // far-1d ofd_plotfar1d('Y', 360, 0); // output options ofd_far1dstyle(0); ofd_far1dcomponent(1, 0, 0); ofd_far1ddb(1); ofd_far1dscale(-25, +15, 8); // output ofd_outdata("reflectarray.ofd"); return 0; }