Prototypes of incident fields to scatsys
Former-commit-id: 067b40fcba12340580acf52c0af7845c462b5a58
This commit is contained in:
parent
52a76f557b
commit
7d3c3769ee
|
@ -11,6 +11,7 @@
|
|||
#ifndef QPMS_SCATSYSTEM_H
|
||||
#define QPMS_SCATSYSTEM_H
|
||||
#include "qpms_types.h"
|
||||
#include "vswf.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
|
||||
|
@ -319,6 +320,33 @@ complex double *qpms_orbit_irrep_basis(
|
|||
/// The index of the irreducible representation of sym.
|
||||
const qpms_iri_t iri);
|
||||
|
||||
|
||||
/// Creates an incident field vector in the full basis, given a function that evaluates the field expansions at points.
|
||||
/** TODO detailed doc!
|
||||
* \returns target_full if target_full was not NULL, otherwise the newly allocated array. */
|
||||
complex double *qpms_scatsys_incident_field_vector_full(
|
||||
/// Target array. If NULL, a new one is allocated.
|
||||
/** The length of the array is ss->fecv_size. */
|
||||
complex double *target_full,
|
||||
const qpms_scatsys_t *ss,
|
||||
qpms_incfield_t field_at_point,
|
||||
const void *args, ///< Pointer passed as the last argument to (*field_at_point)()
|
||||
bool add ///< If true, add to target_full; rewrite target_full if false.
|
||||
);
|
||||
|
||||
/// Creates a (partial) incident field vector in the symmetry-adapted basis, given a function that evaluates the field expansions at points.
|
||||
/** TODO detailed doc! */
|
||||
complex double *qpms_scatsys_incident_field_vector_irrep_packed(
|
||||
/// Target array. If NULL, a new one is allocated.
|
||||
/** The length of the array is ss->fecv_size. */
|
||||
complex double *target_full,
|
||||
const qpms_scatsys_t *ss,
|
||||
const qpms_iri_t iri, ///< The index of given irreducible representation of ss->sym.
|
||||
qpms_incfield_t field_at_point,
|
||||
const void *args, ///< Pointer passed as the last argument to (*field_at_point)()
|
||||
bool add ///< If true, add to target_full; rewrite target_full if false.
|
||||
);
|
||||
|
||||
/// Evaluates scattered fields (corresponding to a given excitation vector) at a given point.
|
||||
/**
|
||||
* By scattered field, one assumes a linear combination of positive-Hankel-type
|
||||
|
@ -327,7 +355,7 @@ complex double *qpms_orbit_irrep_basis(
|
|||
* \return Complex electric field at the point defined by \a where.
|
||||
*/
|
||||
ccart3_t qpms_scatsys_eval_E(const qpms_scatsys_t *ss,
|
||||
const complex double *coeff_vector, ///< A full-length excitation vector.
|
||||
const complex double *coeff_vector, ///< A full-length excitation vector (outgoing wave coefficients).
|
||||
cart3_t where, ///< Evaluation point.
|
||||
complex double k ///< Wave number.
|
||||
);
|
||||
|
|
39
qpms/vswf.h
39
qpms/vswf.h
|
@ -11,6 +11,18 @@
|
|||
#include "qpms_types.h"
|
||||
#include <gsl/gsl_sf_legendre.h>
|
||||
|
||||
// -------------- Typedefs (function prototypes) for qpms_vswf_spec_t ----------------------
|
||||
|
||||
/// Calculates the (regular VSWF) expansion coefficients of an external incident field.
|
||||
typedef qpms_errno_t (*qpms_incfield_t)(
|
||||
/// Target non-NULL array of the regular VSWF expansion coefficients of length bspec->n.
|
||||
complex double *target,
|
||||
const qpms_vswf_set_spec_t *bspec,
|
||||
const cart3_t evalpoint, ///< Point at which the VSWF expansion is made.
|
||||
const void *args, ///< Pointer to additional function-specific arguments.
|
||||
bool add ///< If true, add to target; rewrite target if false.
|
||||
);
|
||||
|
||||
// ---------------Methods for qpms_vswf_spec_t-----------------------
|
||||
//
|
||||
/// Creates a qpms_vswf_set_spec_t structure with an empty list of wave indices.
|
||||
|
@ -61,6 +73,33 @@ csphvec_t qpms_eval_uvswf(const qpms_vswf_set_spec_t *setspec,
|
|||
csph_t kr, ///< Evaluation point.
|
||||
qpms_bessel_t btyp);
|
||||
|
||||
|
||||
// --- qpms_incfield_t instances and their arguments
|
||||
|
||||
typedef struct qpms_incfield_planewane_params_t {
|
||||
bool use_cartesian; ///< If true, wave direction k and amplitude E are specified in cartesian coordinates (via k.cart, E.cart). If false, k is specified in spherical coordinates and E are specified in the corresponding geographical coordinates (via k.sph, E.sph).
|
||||
bool allow_longitudinal; ///< Whether to include longitudinal part or not (if k and E are not orthogonal). Usually false makes sense.
|
||||
union {
|
||||
ccart3_t cart;
|
||||
csph_t sph;
|
||||
} k; ///< Wave vector.
|
||||
union {
|
||||
ccart3_t cart;
|
||||
csphvec_t sph;
|
||||
} E; ///< Electric field amplitude at origin.
|
||||
} qpms_incfield_planewave_params_t;
|
||||
|
||||
|
||||
/// Calculates the (regular VSWF) expansion coefficients of a plane wave.
|
||||
qpms_errno_t qpms_incfield_planewave(
|
||||
/// Target non-NULL array of the regular VSWF expansion coefficients of length bspec->n.
|
||||
complex double *target,
|
||||
const qpms_vswf_set_spec_t *bspec,
|
||||
const cart3_t evalpoint, ///< Point at which the VSWF expansion is made.
|
||||
const void *args, ///< Pointer to additional function-specific arguments.
|
||||
bool add ///< If true, add to target; rewrite target if false.
|
||||
);
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
/// Electric wave N.
|
||||
|
|
Loading…
Reference in New Issue