-
Notifications
You must be signed in to change notification settings - Fork 0
/
grid1dez.c
43 lines (37 loc) · 1.47 KB
/
grid1dez.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <math.h>
#include "fdtd-macro.h"
#include "fdtd-alloc1.h"
#define NLOSS 20 // number of lossy cells at end of 1D grid
#define MAX_LOSS 0.35 // maximum loss factor in lossy layer /*@\label{grid1dezX}@*/
#define EPSR_WATER 1.7689
void gridInit1d(Grid *g) {
double imp0 = 377.0, depthInLayer, lossFactor;
int mm;
SizeX += NLOSS; // size of domain /*@\label{grid1dezA}@*/
Type = oneDGrid; // set grid type /*@\label{grid1dezB}@*/
ALLOC_1D(g->hy, SizeX - 1, double); /*@\label{grid1dezC}@*/
ALLOC_1D(g->chyh, SizeX - 1, double);
ALLOC_1D(g->chye, SizeX - 1, double);
ALLOC_1D(g->ez, SizeX, double);
ALLOC_1D(g->ceze, SizeX, double);
ALLOC_1D(g->cezh, SizeX, double); /*@\label{grid1dezD}@*/
/* set the electric- and magnetic-field update coefficients */
for (mm = 0; mm < SizeX - 1; mm++) { /*@\label{grid1dezE}@*/
if (mm < SizeX - 1 - NLOSS) {
Ceze1(mm) = 1.0;
Cezh1(mm) = Cdtds * imp0 / EPSR_WATER;
Chyh1(mm) = 1.0;
Chye1(mm) = Cdtds / imp0;
} else {
depthInLayer = mm - (SizeX - 1 - NLOSS) + 0.5;
lossFactor = MAX_LOSS * pow(depthInLayer / NLOSS, 2);
Ceze1(mm) = (1.0 - lossFactor) / (1.0 + lossFactor);
Cezh1(mm) = Cdtds * imp0 / (1.0 + lossFactor) / EPSR_WATER;
depthInLayer += 0.5;
lossFactor = MAX_LOSS * pow(depthInLayer / NLOSS, 2);
Chyh1(mm) = (1.0 - lossFactor) / (1.0 + lossFactor);
Chye1(mm) = Cdtds / imp0 / (1.0 + lossFactor);
}
}
return;
}