vector.h new features (complex-kr) and syntax fixes
Former-commit-id: adc38be811b059f9eca4a119131da7250b709eec
This commit is contained in:
parent
f9d3d3baa0
commit
b8b4497b12
|
@ -220,6 +220,11 @@ typedef struct ccart3_t {
|
||||||
complex double x, y, z;
|
complex double x, y, z;
|
||||||
} ccart3_t;
|
} ccart3_t;
|
||||||
|
|
||||||
|
/// 3D complex vector pair (represents the E, H fields).
|
||||||
|
typedef struct ccart3_pair {
|
||||||
|
ccart3_t E, H;
|
||||||
|
} ccart3_pair;
|
||||||
|
|
||||||
/// 2D cartesian coordinates. See also vectors.h.
|
/// 2D cartesian coordinates. See also vectors.h.
|
||||||
/** See also vectors.h */
|
/** See also vectors.h */
|
||||||
typedef struct cart2_t {
|
typedef struct cart2_t {
|
||||||
|
|
|
@ -170,13 +170,16 @@ static inline double cart3_dot(const cart3_t a, const cart3_t b) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline csph_t sph_cscale(complex double c, const sph_t s) {
|
static inline csph_t sph_cscale(complex double c, const sph_t s) {
|
||||||
return {c * s.r, s.theta, s.phi};
|
csph_t res = {c * s.r, s.theta, s.phi};
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline sph_t sph_scale(double c, const sph_t s) {
|
static inline sph_t sph_scale(double c, const sph_t s) {
|
||||||
return {c * s.r, s.theta, s.phi};
|
sph_t res = {c * s.r, s.theta, s.phi};
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Coordinate transform of a vector in local geographic to global cartesian system.
|
||||||
// equivalent to sph_loccart2cart in qpms_p.py
|
// equivalent to sph_loccart2cart in qpms_p.py
|
||||||
static inline ccart3_t csphvec2ccart(const csphvec_t sphvec, const sph_t at) {
|
static inline ccart3_t csphvec2ccart(const csphvec_t sphvec, const sph_t at) {
|
||||||
const double st = sin(at.theta);
|
const double st = sin(at.theta);
|
||||||
|
@ -199,6 +202,19 @@ static inline ccart3_t csphvec2ccart(const csphvec_t sphvec, const sph_t at) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Coordinate transform of a vector in local geographic to global cartesian system.
|
||||||
|
/**
|
||||||
|
* Same as csphvec2ccart, but with csph_t as second argument.
|
||||||
|
* (The radial part (which is the only complex part of csph_t)
|
||||||
|
* of the second argument does not play role in the
|
||||||
|
* transformation, so this is completely legit
|
||||||
|
*/
|
||||||
|
static inline ccart3_t csphvec2ccart_csph(const csphvec_t sphvec, const csph_t at) {
|
||||||
|
const sph_t atreal = {0 /*not used*/, at.theta, at.phi};
|
||||||
|
return csphvec2ccart(sphvec, atreal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Coordinate transform of a vector in global cartesian to local geographic system.
|
||||||
static inline csphvec_t ccart2csphvec(const ccart3_t cartvec, const sph_t at) {
|
static inline csphvec_t ccart2csphvec(const ccart3_t cartvec, const sph_t at) {
|
||||||
// this chunk is copy-pasted from csphvec2cart, so there should be a better way...
|
// this chunk is copy-pasted from csphvec2cart, so there should be a better way...
|
||||||
const double st = sin(at.theta);
|
const double st = sin(at.theta);
|
||||||
|
|
Loading…
Reference in New Issue