/* office.c オフィス OpenFDTDデータ作成ライブラリ */ #include "ofd_datalib.h" static int nint(double l, double d) {return (int)((l / d) + 0.5);} int main(void) { const double lx = 10.0; // 部屋のX長さ const double ly = 6.0; // 部屋のY長さ const double lz = 2.5; // 部屋のZ長さ const double sx1 = 1.2; // -X側のスペース const double sx2 = 1.2; // +X側のスペース const double sy1 = 1.0; // -Y側のスペース const double sy2 = 1.0; // +Y側のスペース const double dsx = 1.4; // X方向机の間隔 const double dsy = 1.0; // Y方向机の間隔 const int nxdesk = 3; // X方向机の数 const int nydesk = 2; // Y方向机の数 const double hdesk = 0.8; // 机の高さ const double hpart = 1.3; // パーティションの高さ const double dwall = 0.2; // 壁の厚さ const double space = 0.2; // 壁の外の余白 const double xant = 0.2; // アンテナ中心X座標 const double yant = ly / 2; // アンテナ中心Y座標 const double zant = lz - 0.5; // アンテナ中心Z座標 const double lant = 60e-3; // アンテナ長さ const double d = 10e-3; // セルサイズ const double freq = 2.5e9; // 周波数 /* const double lant = 30e-3; // アンテナ長さ const double d = 5e-3; // セルサイズ const double freq = 5e9; // 周波数 */ // initialize ofd_init(); // title ofd_title("オフィス"); // mesh ofd_xsection(2, - dwall - space, lx + dwall + space); ofd_xdivision(1, nint(lx + 2 * (dwall + space), d)); ofd_ysection(2, - dwall - space, ly + dwall + space); ofd_ydivision(1, nint(ly + 2 * (dwall + space), d)); ofd_zsection(2, - dwall - space, lz + dwall + space); ofd_zdivision(1, nint(lz + 2 * (dwall + space), d)); // material ofd_material(5.0, 0.2, 1.0, 0.0, "コンクリート"); // geometry // 床、天井 ofd_geometry(2, 1, - dwall, lx + dwall, - dwall, ly + dwall, - dwall, 0); ofd_geometry(2, 1, - dwall, lx + dwall, - dwall, ly + dwall, lz + dwall, lz); // X壁 ofd_geometry(2, 1, - dwall, 0, - dwall, ly + dwall, - dwall, lz + dwall); ofd_geometry(2, 1, lx + dwall, lx, - dwall, ly + dwall, - dwall, lz + dwall); // Y壁 ofd_geometry(2, 1, - dwall, lx + dwall, - dwall, 0, - dwall, lz + dwall); ofd_geometry(2, 1, - dwall, lx + dwall, ly + dwall, ly, - dwall, lz + dwall); // 机+パーティション (PEC) const double lxdesk = (lx - sx1 - sx2 - (nxdesk - 1) * dsx) / nxdesk; const double lydesk = (ly - sy1 - sy2 - (nydesk - 1) * dsy) / nydesk; for (int i = 0; i < nxdesk; i++) { for (int j = 0; j < nydesk; j++) { const double x = sx1 + i * (lxdesk + dsx); const double y = sy1 + j * (lydesk + dsy); // 机 ofd_geometry(1, 1, x, x + lxdesk, y, y + lydesk, 0, hdesk); // パーティション ofd_geometry(1, 1, x + lxdesk / 2, x + lxdesk / 2, y, y + lydesk, 0, hpart); } } // アンテナ(垂直ダイポール) ofd_geometry(1, 1, xant, xant, yant, yant, zant - lant / 2, zant + lant / 2); // feed ofd_feed('Z', xant, yant, zant, 100, 0, 50); // ABC //ofd_pml(8, 3, 1e-8); // frequency ofd_frequency1(freq, freq, 0); ofd_frequency2(freq, freq, 0); // solver ofd_solver(100000, 200, 3e-3); // iteration ofd_plotiter(1); // frequency //ofd_plotfreq(0, 0, 0, 0, 0, 0); // near-1d //ofd_plotnear1d("E", 'X', ly / 2, hdesk + 0.1); //ofd_near1ddb(1); //ofd_near1dscale(-30, 30, 6); // near-2d ofd_plotnear2d("E", 'Z', hdesk + 0.1); ofd_near2ddim(1, 0); ofd_near2ddb(1); //ofd_near2dscale(-30, 30); ofd_near2dcontour(1); ofd_near2dobj(1); // output ofd_outdata("office.ofd"); return 0; }