コード例 #1
0
    def _create_random_dipole(self,
                              center: Sequence[float] = None
                              ) -> List[Particle]:
        """Create the particles of a dipole molecule at the given center with random positions."""
        if center is None:
            center = setting.random_position()

        random_direction = random_vector_on_unit_sphere(setting.dimension)
        dipole_separation = random.uniform(
            self._min_initial_dipole_separation / 2.0,
            self._max_initial_dipole_separation / 2.0)
        position_one = [
            center[d] + random_direction[d] * dipole_separation
            for d in range(setting.dimension)
        ]
        position_two = [
            center[d] - random_direction[d] * dipole_separation
            for d in range(setting.dimension)
        ]
        setting.periodic_boundaries.correct_position(position_one)
        setting.periodic_boundaries.correct_position(position_two)
        return [
            Particle(
                position_one, {
                    charge_value.charge_name: charge_value[0]
                    for charge_value in self._charge_values
                }),
            Particle(
                position_two, {
                    charge_value.charge_name: charge_value[1]
                    for charge_value in self._charge_values
                })
        ]
コード例 #2
0
 def test_setting_random_position(self, random_mock):
     random_mock.side_effect = [0.1, 0.2, 0.3, 0.4, 0.5]
     random_position = setting.random_position()
     self.assertEqual(random_position, [0.1, 0.2, 0.3, 0.4, 0.5])
     self.assertEqual(random_mock.call_args_list, [
         mock.call(0.0, 1.0),
         mock.call(0.0, 2.0),
         mock.call(0.0, 3.0),
         mock.call(0.0, 4.0),
         mock.call(0.0, 5.0)
     ])
コード例 #3
0
    def fill_root_node(self, node: Node) -> None:
        """
        Fill the root node with a random water composite object.

        Parameters
        ----------
        node : base.node.Node
            The root node.
        """
        molecule_center = setting.random_position()
        particles = self._create_random_water_molecule(molecule_center)
        for particle in particles:
            node.add_child(Node(particle))
        node.value = Particle(position=molecule_center)
コード例 #4
0
    def fill_root_node(self, node: Node) -> None:
        """
        Fill the root node with a random point mass.

        Parameters
        ----------
        node : base.node.Node
            The root node.
        """
        node.value = Particle(
            setting.random_position(), {
                charge_value.charge_name: charge_value[0]
                for charge_value in self._charge_values
            })
コード例 #5
0
 def test_setting_random_position(self, random_mock):
     random_mock.side_effect = [0.1, 0.2, 0.3, 0.4, 0.5]
     random_position = setting.random_position()
     self.assertEqual(random_position, [0.1, 0.2, 0.3, 0.4, 0.5])
     self.assertEqual(random_mock.call_args_list, [mock.call(0.0, 1.5) for _ in range(5)])