Repository navigation
Expand file tree
/
Copy pathkernel.cl
More file actions
69 lines (59 loc) · 2.31 KB
/
Copy pathkernel.cl
File metadata and controls
69 lines (59 loc) · 2.31 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
__kernel void updateEFields(__global float* Hx, __global float* Hy,
__global float* Ez, __global float* Epsilon, __global float* Mu,
float dt, float dy, float dx, int width, int height,
__global float* Sigma) {
int x = get_global_id(0);
int y = get_global_id(1);
int index = y * width + x;
Ez[index] += (dt / Epsilon[index]) * ((Hy[index] - Hy[index - 1])
/ dx - (Hx[index] - Hx[(y - 1) * width + x]) / dy)
- (dt * Sigma[index] * Ez[index] / Epsilon[index]);
}
__kernel void updateHFields(__global float* Hx, __global float* Hy,
__global float* Ez, __global float* Epsilon, __global float* Mu,
float dt, float dy, float dx, int width, int height) {
int x = get_global_id(0);
int y = get_global_id(1);
int index = y * width + x;
Hx[index] -= dt / (Mu[index] * dy) * (Ez[index + width] - Ez[index]);
Hy[index] += dt / (Mu[index] * dx) * (Ez[index + 1] - Ez[index]);
}
__kernel void visualizeTE1(__global float* image, __global float* Hx,
__global float* Hy, __global float* Ez, float minField,
float maxField, int width) {
int x = get_global_id(0);
int y = get_global_id(1);
int index = y * width + x;
float normVal = (Ez[index] - minField) / (maxField - minField);
image[3 * index] = normVal < 0.5 ? 2 * normVal : 2 * (1 - normVal);
image[3 * index + 1] = normVal > 0.5 ? 2 * (normVal - 0.5) : 0.0;
image[3 * index + 2] = normVal < 0.5 ? 2 * normVal : 1.0;
}
__kernel void visualizeTE2(__global float* image, __global float* Hx,
__global float* Hy, __global float* Ez, float minField,
float maxField, int width) {
int x = get_global_id(0);
int y = get_global_id(1);
int index = y * width + x;
image[3 * index] = (Ez[index]*Ez[index] - minField)
/ (maxField - minField);
image[3 * index + 1] = (Hx[index]*Hx[index] - minField)
/ (maxField - minField);
image[3 * index + 2] = (Hy[index]*Hy[index] - minField)
/ (maxField - minField);
}
__kernel void drawMaterialBoundaries(__global float* image,
__global float* boundMask, int width) {
int x = get_global_id(0);
int y = get_global_id(1);
int index = y * width + x;
float maskColor = 0;
float L = (image[3 * index] + image[3 * index + 1]
+ image[3 * index + 2]) / 3;
if (L < 0.5) maskColor = 1;
if (boundMask[index] == 1) {
image[3 * index] = maskColor;
image[3 * index + 1] = maskColor;
image[3 * index + 2] = maskColor;
}
}