Exemplo n.º 1
0
 def _specific_angular_momentum_z(field, data):
     xv, yv, zv = obtain_relative_velocity_vector(data)
     rv = obtain_position_vector(data)
     units = rv.units
     rv = np.rollaxis(rv, 0, len(rv.shape))
     rv = data.ds.arr(rv, units=units)
     return rv[..., 0] * yv - rv[..., 1] * xv
def get_periodic_rvec(data):
    coords = obtain_position_vector(data).d
    if sum(data.ds.periodicity) == 0: return coords
    le = data.ds.domain_left_edge.in_units("code_length").d
    dw = data.ds.domain_width.in_units("code_length").d
    for i in range(coords.shape[0]):
        if not data.ds.periodicity[i]: continue
        coords[i, ...] -= le[i]
        #figure out which measure is less
        mins = np.argmin([
            np.abs(np.mod(coords[i, ...], dw[i])),
            np.abs(np.mod(coords[i, ...], -dw[i]))
        ],
                         axis=0)
        temp_coords = np.mod(coords[i, ...], dw[i])

        #Where second measure is better, updating temporary coords
        ii = mins == 1
        temp_coords[ii] = np.mod(coords[i, ...], -dw[i])[ii]

        # Putting the temporary coords into the actual storage
        coords[i, ...] = temp_coords

        coords[i, ...] + le[i]

    return coords
Exemplo n.º 3
0
 def _specific_angular_momentum_y(field, data):
     xv, yv, zv = obtain_relative_velocity_vector(data)
     rv = obtain_position_vector(data)
     units = rv.units
     rv = np.rollaxis(rv, 0, len(rv.shape))
     rv = data.ds.arr(rv, input_units=units)
     return -(xv * rv[..., 2] - zv * rv[..., 0])
Exemplo n.º 4
0
    def _relative_particle_position(field, data):
        """The cartesian particle positions in a rotated reference frame

        Relative to the coordinate system defined by *center* field parameter.

        Note that the orientation of the x and y axes are arbitrary.
        """
        field_names = [(ptype, f"particle_position_{ax}") for ax in "xyz"]
        return obtain_position_vector(data, field_names=field_names).T
Exemplo n.º 5
0
def test_obtain_position_vector():
    ds = fake_random_ds(64,
                        nprocs=8,
                        fields=_fields,
                        negative=[False, True, True, True])

    dd = ds.sphere((0.5, 0.5, 0.5), 0.2)

    coords = obtain_position_vector(dd)

    r = np.sqrt(np.sum(coords * coords, axis=0))

    assert_array_less(r.max(), 0.2)

    assert_array_less(0.0, r.min())
Exemplo n.º 6
0
 def _specific_angular_momentum_z(field, data):
     xv, yv, zv = obtain_relative_velocity_vector(data)
     rv = obtain_position_vector(data)
     rv = np.rollaxis(rv, 0, len(rv.shape))
     rv = data.ds.arr(rv, input_units=data["index", "x"].units)
     return xv * rv[..., 1] - yv * rv[..., 0]