diff --git a/qpms/qpms_types.h b/qpms/qpms_types.h index 550d8bd..8b169b2 100644 --- a/qpms/qpms_types.h +++ b/qpms/qpms_types.h @@ -286,10 +286,18 @@ typedef struct qpms_irot3_t { typedef struct qpms_vswf_set_spec_t { size_t n; ///< Actual number of VSWF indices included in ilist. qpms_uvswfi_t *ilist; ///< List of wave indices. - qpms_l_t lMax; ///< Maximum degree of the waves specified in ilist. - qpms_l_t lMax_M, ///< Maximum degree of the magnetic (M-type) waves. - lMax_N, ///< Maximum degree of the electric (N-type) waves. - lMax_L; ///< Maximum degree of the longitudinal (L-type) waves. + /// Maximum degree of the waves specified in ilist overall. + /** `max(lMax_M, lMax_N, lMax_L)` */ + qpms_l_t lMax; + /// Maximum degree of the magnetic (M-type) waves. + /** Set to 0 if no magnetic waves present. */ + qpms_l_t lMax_M, + /// Maximum degree of the electric (N-type) waves. + /** Set to 0 if no electric waves present. */ + lMax_N, + /// Maximum degree of the longitudinal (L-type) waves. + /** Set to -1 if no longitudinal waves present. */ + lMax_L; size_t capacity; ///< Allocated capacity of ilist. qpms_normalisation_t norm; ///< Normalisation convention. To be set manually if needed. } qpms_vswf_set_spec_t; diff --git a/qpms/vswf.h b/qpms/vswf.h index 90ac7a5..33dae0e 100644 --- a/qpms/vswf.h +++ b/qpms/vswf.h @@ -207,7 +207,16 @@ qpms_errno_t qpms_vswf_fill_csph( csph_t kdrj, //< VSWF evaluation point. qpms_bessel_t btyp, qpms_normalisation_t norm); -qpms_errno_t qpms_vecspharm_fill(csphvec_t *const a1target, csphvec_t *const a2target, csphvec_t *const a3target, +/// Evaluate vector spherical harmonics at \a dir. +/** + * The length of each of the target arrays shall be `lMax * (lMax + 2)`. + * If any of the target arrays pointers is NULL, the corresponding VSH will not be evaluated. + * The "zeroth" radial VSH \f$ \vshrad_0^0 \f$ is not evaluated. + */ +qpms_errno_t qpms_vecspharm_fill( + csphvec_t *const a1target, ///< Target array for radial VSH \f$ \vshrad \f$. + csphvec_t *const a2target, ///< Target array for "rotational" VSH \f$ \vshrot \f$. + csphvec_t *const a3target, ///< Target array for "gradiental" VSH \f$ \vshgrad \f$. qpms_l_t lMax, sph_t dir, qpms_normalisation_t norm); qpms_errno_t qpms_vecspharm_dual_fill(csphvec_t *const a1target, csphvec_t *const a2target, csphvec_t *const a3target, qpms_l_t lMax, sph_t dir, qpms_normalisation_t norm);