3. EIT를 위한 전산해석체계 개발
3.2. 전산해석체계 개발
본 연구에서 개발한 전산해석체계의 도식은 그림 3.1과 같다. 그림 3.1에서 보는 것처럼 반지름, 전극의 개수 및 폭, 이물질에 대한 정보, 접촉저항 값, 격자의 수 준, 측정 오차, 전류 패턴 등과 같은 기본 값을 설정하고 기하 구조를 그린다. 기 하 구조를 그린 후 격자를 생성하면 전산해석체계와 연동한 상용 소프트웨어에 서 제공하는 함수를 통해 Node의 정보를 얻고 이 Node를 통해 EIT 문제를 풀기 위해 필요한 모든 정보를 얻을 수 있다.
Fig. 3.1. The flow chart of a computational analysis system for EIT.
앞서 언급했던 바와 같이 EIT 기법은 이상유동 거동 예측, 화학공정, 의학 분야 에 적용되고 있고, 주로 MATLAB 기반 패키지인 EIDORS(Electrical Impedance and
Diffuse Optical Reconstruction Software)가 전산해석도구로 사용되고 있다[Vaukonen 외, 2001]. EIDORS는 전기적인 신호나 Diffuse optical 신호로부터 영상을 복원하기 위한 소프트웨어 시스템이다. 현재 이 소프트웨어는 EIT 해석을 위한 프로그램으 로 세계적으로 많이 쓰이고 있다. 그러나 EIDORS 에서는 격자의 개수 및 배열을 구성하는데 한계가 있어 해(Solution)의 정확성에 큰 영향을 줄 수 있을 뿐만 아 니라 복잡한 기하구조를 생성하는데 많은 어려움이 있다. 이에 반해, COMSOL
Multiphysics의 경우 비교적 간단한 MATLAB 스크립트를 이용하여 복잡한 기하구 조를 형성할 수 있고, 격자구조 및 배열을 구성함에 있어 사용하기가 편리하다.
예를 들어
geo{1} = circ2(1,'base','center','pos',{'0','0'},'rot','0');
는 중심 좌표가 (0,0)이고 반지름이1인 원형의 구조를 그리는 스크립트다. 이처럼 COMSOL with MATLAB에서 제공하는 도형 함수를 사용해서 기하구조를 스크립 트를 이용하여 쉽게 구성할 수 있다. 또한 격자 생성 함수 중 하나는 다음과 같 다.
fem.mesh = meshinit(fem, 'hauto',meshlevel);
여기서 meshlevel은 숫자로 조절이 가능하고 숫자가 작을수록 조밀한 격자를 만 든다. mesh의 node 정보와 element 정보를 얻기 위한 스크립트는 다음과 같다.
nodes = xmeshinfo(fem ,'out', 'nodes');
element = get(fem.mesh, 'el');
또한 EIT 문제를 풀기 위해 사용한 경계조건은 다음과 같이 Neumann 조건을 설 정 하였다.
for ell = 1:num_elec+1, fem.bnd.name{ell} = ell-1; end
Bk = sparse(zeros(num_node,num_node));
for elmi = 1:num_elem
Bk = Bk+cond_in(elmi)*Bm{elmi};
End
elmn = element{3}.elem; % element nodes for elmi = 1:num_elem
x = pt(1,elmn(:,elmi)); y = pt(2,elmn(:,elmi));
elm_area(elmi) = det([ones(1,3); x; y])/2;
phix = [y(2)-y(3); y(3)-y(1); y(1)-y(2)]/2/elm_area(elmi);
phiy = -[x(2)-x(3); x(3)-x(1); x(1)-x(2)]/2/elm_area(elmi);
Bm_temp(elmn(:,elmi),elmn(:,elmi)) = phix*phix'+phiy*phiy')*elm_area(elmi);
Bm{elmi} = sparse(Bm_temp);
end
- B
2
matrixfem.bnd.q = cell(1,num_elec+1);
for ell = 1:num_elec, fem.bnd.q{ell+1} = 1/cont_imp(ell); end fem.xmesh = meshextend(fem);
Bz = assemble(fem, 'out', 'K');
Bz = sparse(Bz(UI,UI));
, 1j
i j e
i j dS
z
C , i
1, 2, ,
N, j 1, 2, ,
L (2.42)C matrix는 식 (2.42)이므로 다음과 같은 스크립트로 표현할 수 있다.
- Cmatrix
fem.bnd.weak = cell(1,num_elec+1);
fem.bnd.g = cell(1,num_elec+1);
for ell = 1:num_elec, fem.bnd.g{ell+1} = 1; end fem.xmesh=meshextend(fem);
C_temp = assemble(fem, 'out', 'L');
C_temp = sparse(C_temp(UI));
DN N CN
CN
A B T T (2.40)
이렇게 구한 matrix들을 조합해서 식 (2.40)과 같은 시스템 matrix를 만들 수 있다.
시스템 matrix를 구하는 스크립트는 다음과 같다.
N = sparse([ones(1,num_elec-1); -eye(num_elec-1)]);
D = sparse(diag(elec_area./cont_imp));
I_tilde = sparse([zeros(num_node,num_cp); N'*I_current']);
CN = sparse(C*N); NDN = sparse(N'*D*N);
A0 = sparse([Bz, CN; CN', NDN]);
Bk = sparse(zeros(num_node,num_node));
for elmi = 1:num_elem
Bk = Bk+cond_in(elmi)*Bm{elmi};
end A = A0;
A(1:num_node,1:num_node) = A(1:num_node,1:num_node)+Bk;
I
Ab~ (2.36)
본 연구에서는 이렇게 구한 시스템 matrix를 통해 EIT 문제를 풀 수 있는 식 (2.36)을 완성하였다. 여기서 b matrix를 구해서 전극의 전압값을 구하는 것이 EIT의 정문제를 푸는 것이라 할 수 있다.
b = A I-1 (2.61)
식 (2.61) 같이 식 (2.36)을 변경하면 EIT의 정문제를 푸는 것이기 때문에 다음과 같이 스크립트를 작성하면 된다.
b = A\F_load;
R1 = b(1:num_node,1:num_elec);
alpha = b(1:num_node,num_elec+1:end);
beta = b(num_node+1:end,num_elec+1:end);
U = full(N * beta);
ζ I 0~
(2.37)단 여기서 I는 식 (2.37)과 같으므로 다음과 같은 스크립트를 이용한다.
R_load = [zeros(num_node,num_elec); N'];
F_load = [R_load I_tilde];
본 연구에서는 완전전극모델로 전산해석체계를 개발하기 위해 접촉저항을 고려 하여 시스템 행렬을 구성하였다. 본 연구에서 개발한 전산해석체계를 검증한 내 용은 다음 절에 기술하였다.