forked from victorliu/S4
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMaterial.cpp
66 lines (62 loc) · 1.5 KB
/
Material.cpp
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
#include <S4r/Material.hpp>
S4r::Material::Material(){
eps(0,0) = 1.;
eps(1,0) = 0.;
eps(2,0) = 0.;
eps(0,1) = 0.;
eps(1,1) = 1.;
eps(2,1) = 0.;
eps(0,2) = 0.;
eps(1,2) = 0.;
eps(2,2) = 1.;
mu(0,0) = 1.;
mu(1,0) = 0.;
mu(2,0) = 0.;
mu(0,1) = 0.;
mu(1,1) = 1.;
mu(2,1) = 0.;
mu(0,2) = 0.;
mu(1,2) = 0.;
mu(2,2) = 1.;
flags |= Material::DIAGONAL;
flags |= Material::HERMITIAN;
}
S4r::Material::Material(const double meps[18], const double mmu[18]){
static const doublecomplex zero(0.);
flags = Material::DIAGONAL | Material::HERMITIAN;
for(unsigned j = 0; j < 3; ++j){
for(unsigned i = 0; i < 3; ++i){
eps(i,j) = doublecomplex(meps[0+(i+j*3)*2], meps[1+(i+j*3)*2]);
if(i != j && zero != eps(i,j)){
flags &= ~Material::DIAGONAL;
}
if(i < j && eps(i,j) != std::conj(eps(j,i))){
flags &= ~Material::HERMITIAN;
}else if(i == j && 0. != eps(i,j).imag()){
flags &= ~Material::HERMITIAN;
}
}
}
for(unsigned j = 0; j < 3; ++j){
for(unsigned i = 0; i < 3; ++i){
mu(i,j) = doublecomplex(mmu[0+(i+j*3)*2], mmu[1+(i+j*3)*2]);
if(i != j && zero != mu(i,j)){
flags &= ~Material::DIAGONAL;
}
if(i < j && mu(i,j) != std::conj(mu(j,i))){
flags &= ~Material::HERMITIAN;
}else if(i == j && 0. != mu(i,j).imag()){
flags &= ~Material::HERMITIAN;
}
}
}
if(flags & Material::DIAGONAL){
if(eps(0,0) == eps(1,1) && eps(0,0) == eps(2,2) &&
mu(0,0) == mu(1,1) && mu(0,0) == mu(2,2)
){
flags |= Material::SCALAR;
}
}
}
S4r::Material::~Material(){
}