class Parameters{ static public float display_scale = 0.01f; static public int exe_speed = 2; static public float size_x = 0.0f; //DPFサイズ[μm] static public float size_y = 0.0f; static public float size_z = 0.0f; static public float border = 80.0f; //DPFのx, z方向切り出し長さ[μm] static public float xbox_size; //計算ブロックサイズ[μm] static public float ybox_size; static public float zbox_size; static public float cluc_scale;//ブロック分割スケール(小さいほど細かく分割) static public int xbox_num; //計算ブロック数 static public int ybox_num; static public int zbox_num; static public String dpf_filename = "SiC_IVE_ascii.stl"; static public int dpf_poly_num;//DPFポリゴン数 static public float pm_radius = 3.0f;//発生PM平均半径[μm] static public float pm_radius_sigma = 0.1f;//発生PM半径標準偏差[μm] static public float pm_generate_num = 2.0f;//PM粒子発生速度[個/s] static public float pm_flow = 1.0f;//PM流れ速度[μm/s] static public float pm_diffuse = 1.0f;//PM拡散速度[μm/s] static public float pm_burn = 0.1f;//DPFと接触したときに燃焼して減少するPMの半径[μm/s] static public float step = 1.0f;//計算時間間隔[step/s] static public int s_pm_generate_num;//PM粒子発生速度[個/step] static public float s_pm_flow;//PM流れ速度[μm/step] static public float s_pm_diffuse;//PM拡散速度[μm/steo] static public float s_pm_burn;//DPFと接触したときに燃焼して減少するPMの半径[μm/step] static public float depth_shift;//シミュレーション気相空間(yシフト)[μm] static public float bottom;//シミュレーション下層空間(y座標)[μm] static public float current_time;//シミュレーション時間[s] static public int current_step;//シミュレーションステップ[step] static public float end_time = Float.POSITIVE_INFINITY;//シミュレーション終了時間[s] static public int end_step;//シミュレーション終了ステップ[step] static public int pm_num; static int[] get_index(Point3f position){ int vertex[] = new int[3]; vertex[0] = (int)(position.x/Parameters.xbox_size); vertex[1] = (int)(position.y/Parameters.ybox_size); vertex[2] = (int)(position.z/Parameters.zbox_size); return vertex; } static void pm_init(boolean first){ if(first){ Date currentDate = new Date(); Pm.generator = new Random(currentDate.getTime()); Parameters.pm_num = 0; Parameters.current_time = 0.0f; Parameters.current_step = 0; Parameters.exe_speed = 2; PMSimulator.first = false; } Parameters.s_pm_burn = Parameters.pm_burn/Parameters.step; Parameters.s_pm_flow = Parameters.pm_flow/Parameters.step; Parameters.s_pm_diffuse = Parameters.pm_diffuse/Parameters.step; Parameters.s_pm_generate_num = (int)(Parameters.pm_generate_num/Parameters.step); Parameters.end_step = Math.round(Parameters.end_time/Parameters.step); } static void setbox_num(Vector<Point3f> dpf){ float min_size = Math.min(Parameters.size_x, Math.min(Parameters.size_y, Parameters.size_z)); Parameters.cluc_scale = 2.0f*(Parameters.pm_radius + Parameters.pm_radius_sigma); //計算ブロック数設定(ブロックは立方体) Parameters.xbox_num = Math.round(Parameters.size_x/Parameters.cluc_scale); Parameters.ybox_num = Math.round(Parameters.size_y/Parameters.cluc_scale); Parameters.zbox_num = Math.round(Parameters.size_z/Parameters.cluc_scale); //計算ブロックサイズ設定 Parameters.xbox_size = Parameters.size_x/(float)Parameters.xbox_num; Parameters.ybox_size = Parameters.size_y/(float)Parameters.ybox_num; Parameters.zbox_size = Parameters.size_z/(float)Parameters.zbox_num; Parameters.dpf_poly_num = dpf.size()/3; } } class Coordinate{ static MyTransformGroup coordinate = null; static void set_coordinate(Material mat){ MyCylinder cx = new MyCylinder(1.0f, 120.0f, mat, null); cx.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, (float)Math.PI/2.0f)); cx.mulTranslation(new Vector3f(60.0f, 0.0f, 0.0f)); coordinate.addChild(cx); MyCylinder cy = new MyCylinder(1.0f, 120.0f, mat, null); cy.mulTranslation(new Vector3f(0.0f, 60.0f, 0.0f)); coordinate.addChild(cy); MyCylinder cz = new MyCylinder(1.0f, 120.0f, mat, null); cz.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f)); cz.mulTranslation(new Vector3f(0.0f, 0.0f, 60.0f)); coordinate.addChild(cz); MySphere org = new MySphere(3.0f, mat, null); coordinate.addChild(org); } static void set_label(Material mat){ MyCylinder cxl = new MyCylinder(3.0f, 1.0f, mat, null); cxl.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, (float)Math.PI/2.0f)); cxl.mulTranslation(new Vector3f(100.0f, 0.0f, 0.0f)); coordinate.addChild(cxl); MyCylinder cyl = new MyCylinder(3.0f, 1.0f, mat, null); cyl.mulTranslation(new Vector3f(0.0f, 100.0f, 0.0f)); coordinate.addChild(cyl); MyCylinder czl = new MyCylinder(3.0f, 1.0f, mat, null); czl.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f)); czl.mulTranslation(new Vector3f(0.0f, 0.0f, 100.0f)); coordinate.addChild(czl); } static void set_vector(Material mat){ MyCone vx = new MyCone(3.0f, 3.0f, mat, null); vx.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, -(float)Math.PI/2.0f)); vx.mulTranslation(new Vector3f(120.0f, 0.0f, 0.0f)); coordinate.addChild(vx); MyCone vy = new MyCone(3.0f, 3.0f, mat, null); vy.mulTranslation(new Vector3f(0.0f, 120.0f, 0.0f)); coordinate.addChild(vy); MyCone vz = new MyCone(3.0f, 3.0f, mat, null); vz.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f)); vz.mulTranslation(new Vector3f(0.0f, 0.0f, 120.0f)); coordinate.addChild(vz); } static void set_font(Material mat, Font font){ MyText3D fx = new MyText3D("x[μm]", font, mat, null, MyText3D.ALIGN_CENTER); fx.mulScale(new Vector3f(10.0f, 10.0f, 10.0f)); fx.mulTranslation(new Vector3f(140.0f, 0.0f, 0.0f)); MyText3D fy = new MyText3D("y[μm]", font, mat, null, MyText3D.ALIGN_CENTER); fy.mulScale(new Vector3f(10.0f, 10.0f, 10.0f)); fy.mulTranslation(new Vector3f(0.0f, 140.0f, 0.0f)); MyText3D fz = new MyText3D("z[μm]", font, mat, null, MyText3D.ALIGN_CENTER); fz.mulScale(new Vector3f(10.0f, 10.0f, 10.0f)); fz.mulTranslation(new Vector3f(0.0f, 0.0f, 140.0f)); MyTransformGroup bx = new MyTransformGroup(); bx.addChild(fx); MyTransformGroup targetx = new MyTransformGroup(); targetx.addChild(bx); Point3f axisx = new Point3f(140.0f, 0.0f, 0.0f); new MyBillboard(targetx, axisx); coordinate.addChild(targetx); MyTransformGroup by = new MyTransformGroup(); by.addChild(fy); MyTransformGroup targety = new MyTransformGroup(); targety.addChild(by); Point3f axisy = new Point3f(0.0f, 140.0f, 0.0f); new MyBillboard(targety, axisy); coordinate.addChild(targety); MyTransformGroup bz = new MyTransformGroup(); bz.addChild(fz); MyTransformGroup targetz = new MyTransformGroup(); targetz.addChild(bz); Point3f axisz = new Point3f(0.0f, 0.0f, 140.0f); new MyBillboard(targetz, axisz); coordinate.addChild(targetz); } static void set_mark(Material mat, Font font){ MyText3D fxl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER); fxl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f)); fxl.mulTranslation(new Vector3f(100.0f, 5.0f, 5.0f)); MyText3D fyl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER); fyl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f)); fyl.mulTranslation(new Vector3f(5.0f, 100.0f, 5.0f)); MyText3D fzl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER); fzl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f)); fzl.mulTranslation(new Vector3f(5.0f, 5.0f, 100.0f)); MyTransformGroup bxl = new MyTransformGroup(); bxl.addChild(fxl); MyTransformGroup targetxl = new MyTransformGroup(); targetxl.addChild(bxl); Point3f axisxl = new Point3f(100.0f, 0.0f, 0.0f); new MyBillboard(targetxl, axisxl); coordinate.addChild(targetxl); MyTransformGroup byl = new MyTransformGroup(); byl.addChild(fyl); MyTransformGroup targetyl = new MyTransformGroup(); targetyl.addChild(byl); Point3f axisyl = new Point3f(0.0f, 100.0f, 0.0f); new MyBillboard(targetyl, axisyl); coordinate.addChild(targetyl); MyTransformGroup bzl = new MyTransformGroup(); bzl.addChild(fzl); MyTransformGroup targetzl = new MyTransformGroup(); targetzl.addChild(bzl); Point3f axiszl = new Point3f(0.0f, 0.0f, 100.0f); new MyBillboard(targetzl, axiszl); coordinate.addChild(targetzl); } Coordinate(){ coordinate = new MyTransformGroup(); Material mat = new Material(); mat.setDiffuseColor(new Color3f(1.0f, 1.0f, 1.0f)); Font font = new Font("SansSerif", Font.BOLD, 1); Coordinate.set_coordinate(mat); Coordinate.set_label(mat); Coordinate.set_vector(mat); Coordinate.set_font(mat, font); Coordinate.set_mark(mat, font); } }