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
|
#ifndef QPMS_SCATSYSTEM_H
|
||||||
#define QPMS_SCATSYSTEM_H
|
#define QPMS_SCATSYSTEM_H
|
||||||
#include "qpms_types.h"
|
#include "qpms_types.h"
|
||||||
|
#include "vswf.h"
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -319,6 +320,33 @@ complex double *qpms_orbit_irrep_basis(
|
||||||
/// The index of the irreducible representation of sym.
|
/// The index of the irreducible representation of sym.
|
||||||
const qpms_iri_t iri);
|
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.
|
/// 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
|
* 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.
|
* \return Complex electric field at the point defined by \a where.
|
||||||
*/
|
*/
|
||||||
ccart3_t qpms_scatsys_eval_E(const qpms_scatsys_t *ss,
|
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.
|
cart3_t where, ///< Evaluation point.
|
||||||
complex double k ///< Wave number.
|
complex double k ///< Wave number.
|
||||||
);
|
);
|
||||||
|
|
39
qpms/vswf.h
39
qpms/vswf.h
|
@ -11,6 +11,18 @@
|
||||||
#include "qpms_types.h"
|
#include "qpms_types.h"
|
||||||
#include <gsl/gsl_sf_legendre.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-----------------------
|
// ---------------Methods for qpms_vswf_spec_t-----------------------
|
||||||
//
|
//
|
||||||
/// Creates a qpms_vswf_set_spec_t structure with an empty list of wave indices.
|
/// 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.
|
csph_t kr, ///< Evaluation point.
|
||||||
qpms_bessel_t btyp);
|
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.
|
/// Electric wave N.
|
||||||
|
|
Loading…
Reference in New Issue