viscid.dipole module¶
A collection of tools for dipoles
-
viscid.dipole.
guess_dipole_moment
(b, r=2.0, strength=32707.5292732387, cap_angle=40, cap_ntheta=121, cap_nphi=121, plot=False)[source]¶ guess dipole moment from a B field
-
viscid.dipole.
make_dipole
(m=(0, 0, -32707.5292732387), strength=None, l=None, h=None, n=None, center='cell', dtype='f8', twod=False, nonuniform=False, crd_system='gse', name='b')[source]¶ Generate a dipole field with magnetic moment m [x, y, z]
-
viscid.dipole.
fill_dipole
(B, m=(0, 0, -32707.5292732387), strength=None, mask=None)[source]¶ set B to a dipole with magnetic moment m
Parameters: - B (Field) – Field to fill with a dipole
- m (ndarray, or datetime64-like) – Description
- strength (float) – if given, rescale the dipole moment even if it was given explicitly
- mask (Field) – boolean field as mask, B will be filled where the mask is True
Returns: B
Return type: Field
-
viscid.dipole.
calc_dip
(pts, m=(0, 0, -32707.5292732387), strength=None, crd_system='gse', dtype=None)[source]¶ Calculate a dipole field at various points
Parameters: - pts (ndarray) – Nx3 array of points at which to calculate the dipole. Should use the same crd system as m
- m (sequence, datetime) – dipole moment
- strength (None, float) – If given, rescale m to this magnitude
- crd_system (str) – Something from which cotr can divine the coordinate system for both pts and m. This is only used if m is given as a datetime and we need to figure out the dipole moment at a given time in a given crd system
- dtype (str, np.dtype) – dtype of the result, defaults to the same datatype as pts
Returns: Nx3 dipole field vectors for N points
Return type: ndarray
-
viscid.dipole.
set_in_region
(a, b, alpha=1.0, beta=1.0, mask=None, out=None)[source]¶ set ret = alpha * a + beta * b where mask is True
-
viscid.dipole.
make_spherical_mask
(fld, rmin=0.0, rmax=None, rsq=None)[source]¶ make a mask that is True between rmin and rmax
-
viscid.dipole.
xyz2lsrlp
(pts, cotr=None, crd_system='gse')[source]¶ Ceovert x, y, z -> l-shell, r, lambda, phi [sm coords]
- r, theta, phi = viscid.cart2sph(pts in x, y, z)
- lambda = 90deg - theta
- r = L cos^2(lambda)
Parameters: - pts (ndarray) – 3xN for N (x, y, z) points
- cotr (None) – if given, use cotr to perform mapping to / from sm
- crd_system (str) – crd system of pts
Returns: 4xN array of N (l-shell, r, lamda, phi) points
Return type: ndarray
-
viscid.dipole.
dipole_map
(pts, r=1.0, cotr=None, crd_system='gse', as_spherical=False)[source]¶ Map pts along an ideal dipole to radius r
lambda = 90deg - theta; r = L cos^2(lambda)
cos^2(lambda) = cos^2(lambda_0) * (r / r_0)
Parameters: - pts (ndarray) – 3xN for N (x, y, z) points
- r (float) – radius to map to
- cotr (None) – if given, use cotr to perform mapping to / from sm
- crd_system (str) – crd system of pts
- as_spherical (bool) – if True, then the return array is (t, theta, phi) with theta in the range [0, 180] and phi [0, 360] (in degrees)
Returns: - 3xN array of N (x, y, z) points all at a distance
r_mapped from the center of the dipole
Return type: ndarray
-
viscid.dipole.
dipole_map_value
(fld, pts, r=1.0, fillna=None, cotr=None, crd_system=None, interp_kind='linear')[source]¶ Map values assuming they’re constant along ideal dipole lines
Parameters: - fld (Field) – values to interpolate onto the mapped pts
- pts (ndarray) – 3xN for N (x, y, z) points that will be mapped
- r (float) – radius of resulting map
- cotr (None) – if given, use cotr to perform mapping in sm
- crd_system (str) – crd system of pts
- interp_kind (str) – how to interpolate fld onto source points
Returns: ndarray of mapped values, one for each of the N points
Return type: ndarray