HP-HEM  1.0.2
High Performance implementation of the Hybrid Electromagnetic Model
auxiliary.h
Go to the documentation of this file.
1 
7 #ifndef AUXILIARY_H_
8 #define AUXILIARY_H_
9 
10 #include <complex.h>
11 #include <stdio.h>
12 #include <stdbool.h>
13 #include <fftw3.h>
14 
15 //constants
17 #define PI 3.1415926535897932384626433832795029L
18 
19 #define TWO_PI (2.0 * PI)
20 
21 #define FOUR_PI (4.0 * PI)
22 
23 #define MU0 1.256637061435917e-6
24 
25 #define EPS0 8.854187817620e-12
26 
27 #define RHO_CU 1.689e-8
28 
29 
39 double*
40 linspace (double a, double b, size_t n, double u[]);
41 
51 double*
52 logspace (double a, double b, size_t n, double u[]);
53 
61 double
62 wave_length (double f, double sigma, double ep, double mur);
63 
97 int
98 alipio_soil (_Complex double* sigma, _Complex double* epsr, double sigma0,
99  _Complex double s, double h, double g, double eps_ratio);
100 
101 /* Calculates the soil parameters \f$ \sigma(s) \f$ and \f$ \varepsilon_r(s) \f$
102 based on the Smith-Longmire model as presented in [1].
103 
104 [1] D. Cavka, N. Mora, F. Rachidi, A comparison of frequency-dependent soil
105 models: application to the analysis of grounding systems, IEEE Trans.
106 Electromagn. Compat. 56 (February (1)) (2014) 177–187.
107 
108 @param sigma pointer to where the conductivity \$f \sigma(s) \$f is written in S/m
109 @param epsr pointer to where the relative permitivitty \f$ \varepsilon_r(s) \f$ is written
110 @param sigma0 value of the soil conductivity in low frequency \f$ \sigma_0 \f$ in S/m
111 @param s complex frequency \f$ s = c + j\omega \f$ of interest in rad/s
112 @param erinf parameter \f$ \varepsilon_\infty'\f$
113 @return 0 on success
114 */
115 int
116 smith_longmire_soil (_Complex double* sigma, _Complex double* epsr, double sigma0,
117  _Complex double s, double erinf);
118 
125 bool
126 equal_points (const double* point_1, const double* point_2);
127 
136 bool
137 equal_points_tol (const double* point_1, const double* point_2, double tol);
138 
145 double
146 vector_length (const double start_point[3], const double end_point[3]);
147 
154 extern double
155 snrm2_ (int* n, double* x, int* incx);
156 
165 int
166 complex_matrix_file (size_t m, size_t n, const _Complex double* a, int lda, FILE* fp);
167 
176 int
177 double_matrix_file (size_t m, size_t n, const double* a, int lda, FILE* fp);
178 
195 extern int
196 zbesi_ (double* zr, double* zi, double* fnu, int* kode, int* n, double* cyr,
197  double* cyi, int* nz, int* ierr);
198 
206 void
207 print_matrix (char *desc, int m, int n, const _Complex double* a, int lda);
208 
216 void
217 print_matrix_row (char *desc, int m, int n, const _Complex double* a, int lda);
218 
229 int
230 matrix_copy (const _Complex double* source, _Complex double* target,
231  size_t lds, size_t ldt, size_t nline, size_t ncol);
232 
244 int
245 transpose_copy (const _Complex double* source, _Complex double* target,
246  size_t lds, size_t ldt, size_t nline, size_t ncol);
247 
259 int
260 pc_copy (const _Complex double* source, _Complex double* target,
261  size_t lds, size_t ldt, size_t nline, size_t ncol);
262 
274 int
275 pl_copy (const _Complex double* source, _Complex double* target,
276  size_t lds, size_t ldt, size_t nline, size_t ncol);
277 
289 int
290 pcl_copy (const _Complex double* source, _Complex double* target,
291  size_t lds, size_t ldt, size_t nline, size_t ncol);
292 
293 
316 int
317 laplace_trans (double* f, _Complex double* g, _Complex double* s, double tmax, size_t nt);
318 
325 enum
326 INLT_Filter {
328  FILTER_NONE = 0,
331  FILTER_BLACKMAN = 1,
334  FILTER_HANNING = 2,
337  FILTER_LANCZOS = 3,
340  FILTER_RIESZ = 4
341 };
342 
365 int
366 inv_laplace_trans (double* f, _Complex double* g, _Complex double* s, double tmax,
367  size_t nt, int filter);
368 
393 double
394 heidler (double t, double imax, double tau1, double tau2, int n);
395 
396 #endif /* AUXILIARY_H_ */
double * linspace(double a, double b, size_t n, double u[])
int transpose_copy(const _Complex double *source, _Complex double *target, size_t lds, size_t ldt, size_t nline, size_t ncol)
double * logspace(double a, double b, size_t n, double u[])
void print_matrix(char *desc, int m, int n, const _Complex double *a, int lda)
bool equal_points_tol(const double *point_1, const double *point_2, double tol)
void print_matrix_row(char *desc, int m, int n, const _Complex double *a, int lda)
int double_matrix_file(size_t m, size_t n, const double *a, int lda, FILE *fp)
int matrix_copy(const _Complex double *source, _Complex double *target, size_t lds, size_t ldt, size_t nline, size_t ncol)
bool equal_points(const double *point_1, const double *point_2)
int zbesi_(double *zr, double *zi, double *fnu, int *kode, int *n, double *cyr, double *cyi, int *nz, int *ierr)
double heidler(double t, double imax, double tau1, double tau2, int n)
int smith_longmire_soil(_Complex double *sigma, _Complex double *epsr, double sigma0, _Complex double s, double erinf)
double vector_length(const double start_point[3], const double end_point[3])
int alipio_soil(_Complex double *sigma, _Complex double *epsr, double sigma0, _Complex double s, double h, double g, double eps_ratio)
int pcl_copy(const _Complex double *source, _Complex double *target, size_t lds, size_t ldt, size_t nline, size_t ncol)
double wave_length(double f, double sigma, double ep, double mur)
int inv_laplace_trans(double *f, _Complex double *g, _Complex double *s, double tmax, size_t nt, int filter)
int pl_copy(const _Complex double *source, _Complex double *target, size_t lds, size_t ldt, size_t nline, size_t ncol)
int complex_matrix_file(size_t m, size_t n, const _Complex double *a, int lda, FILE *fp)
int pc_copy(const _Complex double *source, _Complex double *target, size_t lds, size_t ldt, size_t nline, size_t ncol)
double snrm2_(int *n, double *x, int *incx)