// This method generate BoundaryManager for local of SceneBuilder by side effect. internal void GenerateBoundaryManager(GameObject scene_builder, List <GameObject> base_particles) { if (!SimulatorTable.ContainsKey("boundary_type")) { return; } string boundary_type = SimulatorTable.Get <string>("boundary_type"); if (boundary_type == "Unlimited") { return; } Vector3 upper_boundary = new Vector3(); Vector3 lower_boundary = new Vector3(); if ((boundary_type == "Periodic" || boundary_type == "PeriodicCuboid") && SystemTable.ContainsKey("boundary_shape")) { TomlTable boundary_shape = SystemTable.Get <TomlTable>("boundary_shape"); List <float> upper_bound_arr = boundary_shape.Get <List <float> >("upper"); List <float> lower_bound_arr = boundary_shape.Get <List <float> >("lower"); upper_boundary = new Vector3(upper_bound_arr[0], upper_bound_arr[1], upper_bound_arr[2]); lower_boundary = new Vector3(lower_bound_arr[0], lower_bound_arr[1], lower_bound_arr[2]); ReflectingBoundaryManager rb_manager = scene_builder.AddComponent <ReflectingBoundaryManager>() as ReflectingBoundaryManager; rb_manager.Init(base_particles, upper_boundary, lower_boundary); } Debug.Log("BoundaryManager initialization finished."); }
// This method generate BaseParticle in system by side effect. internal void GenerateIntegratorManagers( GameObject scene_builder, List <GameObject> base_particles, float kb_scaled, float timescale) { if (SimulatorTable.ContainsKey("integrator")) { TomlTable integrator = SimulatorTable.Get <TomlTable>("integrator"); if (integrator.ContainsKey("type")) { string integrator_type = integrator.Get <string>("type"); if (integrator_type == "UnderdampedLangevin") { if (integrator.ContainsKey("gammas")) { int base_particles_num = base_particles.Count; List <TomlTable> gammas_tables = integrator.Get <List <TomlTable> >("gammas"); float[] gammas = new float[base_particles.Count]; foreach (TomlTable gamma_table in gammas_tables) { // TODO: check dupulicate and lacking of declaration. gammas[gamma_table.Get <int>("index")] = gamma_table.Get <float>("gamma"); } var temperature = SystemTable.Get <TomlTable>("attributes").Get <float>("temperature"); UnderdampedLangevinManager ul_manager = scene_builder.AddComponent <UnderdampedLangevinManager>() as UnderdampedLangevinManager; ul_manager.Init(kb_scaled, temperature, base_particles, gammas, timescale); Debug.Log("UnderdampedLangevinManager initialization finished."); } else { throw new System.Exception( "When you use UnderdampedLangevin integrator, you must specify gammas for integrator."); } } } } }