Пример #1
0
        // 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.");
        }
Пример #2
0
        // 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.");
                        }
                    }
                }
            }
        }