Professional Documents
Culture Documents
4. 국문 요약문
- 1 -
〈 SUMMARY 〉
Development of highly efficient energy harvesting technology for realization of
zero-energy infrastructure
Purpose &
- Development of energy multi-source analysis program in infrastructure
Contents
- Development of thermal energy absorption and transfer technology for highly
efficient nano porous media
- Developed the program which can analyze the micro-macro solid of porous media
- Developed the program for simulating impact between adjacent solids in the
micro level of porous media
- Developed SPH code related to fluid transfer in porous media
Results - Developed ABAQUS VUMAT code for crushable foam model, optimal energy
absorption model in the macro level.
- Developed the constitutive model which transfers to heat generation and
electric energy due to micro fluid transfer through multi scaling for porous
media
- The energy harvesting technology through fluid transfer in porous media can be
applied to composite materials and large-scale civil infrastructure.
- The developed analysis program can be used for other engineering fields
Expected
because it has an ability to analyze multi-phase materials consisting of both
Contribution
solid and fluid.
- The output in this research can be used as preliminary data for residual
energy absorption and application in construction field.
Micro-macro
Keywords Porous media Thermal energy Multi-scale SPH code
program
- 2 -
〈 Contents 〉
1. Introduction of this research ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 4
2. Current domestic and international technology development ·
··
··
··
··
··
··
··
··
··
··
· 5
3. Research content and achievement ·
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 7
4. Goal achievement and contribution ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 100
5. Future plan of achievement ·
··
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 102
6. Information on international technology ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 102
7. Security ratings ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 102
8. Research facilities registered in national science and technology information
system ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 102
9. Security performance result ·
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 103
10. Representative research outcome ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 103
〈 목 차 〉
1. 연구개발과제의 개요 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 4
2. 국내외 기술 개발 현황 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 5
3. 연구 수행 내용 및 성과 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 7
4. 목표 달성도 및 관련 분야 기여도 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 100
5. 연구개발성과의 활용 계획 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 102
6. 연구 과정에서 수집한 해외 과학기술 정보 ·
·
···
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 102
7. 연구개발성과의 보안등급 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 102
8. 국가과학기술종합정보시스템에 등록한 연구시설·장비 현황 ·
··
··
··
··
··
··
··
··
··
··
· 102
9. 연구개발과제 수행에 따른 연구실 등의 안전 조치 이행 실적 ·
··
··
··
··
··
··
··
··
··
· 103
10. 연구개발과제의 대표적 연구 실적 ·
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
· 103
- 3 -
제1장. 연구개발과제의 개요
1. 연구개발 목적
·본 연구에서는 화석연료에 의한 발전소 전력사용을 지양하고 사회기반 시설물에서 발생되
는 역학적-열에너지를 효율적으로 변환하기 위해 나노다공체(Nanoporous) 소재를 이용한
고효율 에너지변환(High Performance Energy Harvesting) 기술을 개발하고자 함.
2. 연구개발의 필요성
·현재 화석연료자원이 감소되고 있는 상황에서 환경에 피해를 주지 않으면서 대체 에너지
를 개발하는 것은 인류가 직면하고 있는 최대의 기술적 과제임.
- 4 -
낮은 수준에 머물러 있음.
3. 연구개발 범위
· 본 연구에서는 제로에너지 사회기반시설물 구현을 위한 고효율 에너지 수확에 관한 프로
그램 개발이 목표임. 이를 위해 건설재료 중에 하나인 다공질 매체에 대한 에너지 흡수
및 변환에 관한 해석기술이 개발되고 다음과 같이 총 2단계로 세부 연구 목표를 계획하였
음.
제2장. 국내외 기술 개발 현황
· 국내 기술 및 산업 동향
- 5 -
의 응용’ 과제를 통하여 에너지 하베스팅 시스템에 관한 연구를 진행한 바 있음.
(2009.07.01 ~ 2010.06.30.)
· 국외 기술 및 산업 동향
- 6 -
제3장. 연구 수행 내용 및 성과
· 1단계에서는 다공질 매체에 대한 FEM 프로그램 개발로 C++ 컴파일러를 통하여 프로그램
완성을 목표로 하였음. 이는 기술 ①, ③, ④, ⑤와 관련한 기술임.
- 7 -
· 다중 에너지 수확을 위한 프로그램 개발을 통하여 검증 절차를 거친 다음 유체유동을 발
생시켜 다공질 매체 내의 열유동 및 이에 따른 전기에너지 발생에 대한 연구를 진행함.
- 8 -
- 9 -
1. 1차년도 연구내용
가. 요약
연 차 연구 내용 연구 결과
C++ 클래스 기반의 Finite Element 코드를 완성
다중 에너지 수확 해석
하였음. 또한 MPI 라이브러리를 통한 병렬해석
프로그램 개발 (Finite
알고리즘을 개발하였음. 이로써, 대용량 고체구
Element Code 개발), 관련
조물에 대한 해석이 가능했으며 해석속도 또한
기술 ①, ③
빠른 결과를 보였다.
열전 에너지 흡수를 위해 우선시 되어야 할 상황
나노다공질 매체의 열전 은 고체입자간의 연성에서 발생하는 에너지를 정
에너지 흡수 및 변환기술 개발 규화 하는 것이 필요하다. 이를 위해 본 차년도
(나노다공질 매체의 입자간 에서는 나노다공질의 고체입자들 간의 연성 해석
연성 해석), 관련기술 ④, ⑤ 을 진행하였으며, 프로그램 개발을 통하여 정확
1차년도 성을 입증하였다.
상용프로그램을 이용하여 압전 하베스터 모델링
하였으며, 압전하베스팅 분야의 세계적 석학인
Virginia Tech의 D. J. Inman 교수의 이론적 연
나노다공질 매체의 열전
구와의 비교를 통해 진행하였다. 전압발생
에너지 흡수 및 변환기술 개발
(Voltage Outout)과 고유진동수(Natural
(운동량 에너지를
Frequency) 결과를 이용하여 진행되었고 그 결
전기에너지로 변환해석).
과, 본 연구를 통해 개발된 압전 하베스터 모델
관련기술 ⑤
은 전압발생량과 고유진동수 모두 D. J. Inman
교수의 연구결과에 매우 근접한 결과를 얻을 수
있었다.
나. 주요내용
1) 다중 에너지 수확 해석 프로그램 개발 : Finite Element Code 개발(병렬 라이브러리 포함)
본 연구에서는 다공질 매체에 대한 유한요소해석 프로그램이 C++ 기반으로 개발되었고
선형방정식은 LAPACK 모듈을 사용하여 정확성을 높였다. 유한요소해석 프로그램 개발은 유
체유동이 가능한 다공질 매체 이론 정립으로부터 시작된다.
다공질 매체의 지배방정식은 연속체 역학에서의 운동량평형방정식과 질량평형방정식에
의해 다음과 같이 유도될 수 있다.
k
∇· v
∇·
∇ g (2)
- 10 -
여기서 ″ 는 스트레스 텐서, I 는 Identity 텐서, 는 간극수압 백터, 는 밀도, g는 중력
벡터, 는 Biot 상수, n은 다공질 매체의 다공성, Ks는 고체영역의 체적계수, vs는 고체영
역의 속도벡터, k는 투수텐서, 는 유체의 동점성계수, 는 액체밀도를 나타낸다. 위 2개
방정식에는 변위와 간극수압에 대한 경꼐조건이 존재하는데 이를 적용하면 weak form으로
유도할 수 있으며 최종적으로는 다음과 같이 matrix 형식으로 정의할 수 있다.
K t u s (t ) - C1p s (t ) = f s (3)
s s
¶u (t ) ¶p (t )
C2 +S + Dp s (t ) = f f (4)
¶t ¶t
여기서 Kt는 강성행렬, C1과 C2는 연성행렬, fs는 고체영역의 외력벡터, ff는 액체영역의
외력벡터, S는 압축행렬, D는 투수행렬, us는 변위, ps는 다공질 매체 내 유체압력을 나타
낸다.
위 2개의 matrix 방정식을 이용하여 C++로 코드를 개발하기 위해서는 다음과 같은 순서
도를 갖는다.
- 11 -
void data_input::group_time(int a, ifstream *pfss, group_pr *pgr) {
pgr[a].dt = 0;
*pfss >> bufs >> pgr[a].dt;
}
// 노드 번호 입력
void data_input::node_solid2D_contact(int a, ifstream *pfss, group_pr *pgr) {
pgr[a].el_node_n = 4;
pgr[a].bceq_n_s = 2;
*pfss >> bufs >> bufs >> bufs >> bufs >> bufs >> bufs >> bufs;
for (int i = 0; i<pgr[a].node_n; i++) {
*pfss >> bufs >> pgr[a].node[i].x[0] >> pgr[a].node[i].x[1] >>
pgr[a].node[i].bc[0] >> pgr[a].node[i].bc[1] >> pgr[a].node[i].f[0] >>
pgr[a].node[i].f[1];
};
}
// 재료 입력
void data_input::mat_solid_contact(int a, ifstream *pfss, group_pr *pgr) {
*pfss >> bufs >> bufs >> bufs >> bufs >> bufs;
// 요소입력
void data_input::element_2D_contact(int a, ifstream *pfss, group_pr *pgr) {
*pfss >> bufs >> bufs >> bufs >> bufs >> bufs >> bufs >> bufs;
- 12 -
pgr[a].el[i].connect[1] >> pgr[a].el[i].connect[2] >> pgr[a].el[i].connect[3] >>
pgr[a].el[i].q;
};
}
- 13 -
렴 값을 찾는다. 이때 Newton-Raphson 방법이 사용되나 수렴의 부정확성이 발생 할 수 있어
Staggered 방법과 혼합하는 알고리즘을 개발하여 사용하였다. 본 iteration은 main.cpp에서
진행되며 ④, ⑤, ⑥, ⑦ 단계가 포함된다.
- 14 -
e_node_new[j][k] = pnode[pel[i].connect[j]-1].x[k];
e_node_old[j][k] = pnode[pel[i].connect[j]-1].X[k];
}
}
int en = el_node_n;
// Set number fo element nodes
ini.initial_double_p_2d(el_node_n*n_dof_s,el_node_n*n_dof_s,Ke_geo);
ini.initial_double_p_2d(el_node_n*n_dof_s,el_node_n*n_dof_s,Ke_stress);
ini.initial_double_p_1d(el_node_n*n_dof_s, inter_force);
if(solcase==51 || solcase==50) {
stiff_4n_large_geo stiff;
// stiff.neo_hook(i, pnode, pmat, pel, e_node_old, e_node_new, Ke_geo,
Ke_stress, inter_force);
stiff.Kirchhoff(i, pnode, pmat, pel, e_node_old, e_node_new, Ke_geo,
Ke_stress, inter_force);
}
- 15 -
}
//
///////// delete ke
finalize final;
- 16 -
final.final_2d(el_node_n,bceq_n_s,e_node_old);
final.final_2d(el_node_n,bceq_n_s,e_node_new);
final.final_2d(el_node_n*n_dof_s,el_node_n*n_dof_s,Ke_stress);
final.final_2d(el_node_n*n_dof_s,el_node_n*n_dof_s,Ke_geo);
final.final_1d(inter_force);
final.final_int_1d(a_index);
//////////////////////
initialization ini;
matrix matx;
// point load
for(int i=0; i<node_n; i++) {
for(int j=0; j<n_dof_s; j++) {
pdr_dis[pnode[i].eq_n[j]] = pnode[i].f[j];
};
};
- 17 -
coordinate and director vector
int en = el_node_n; // Set number fo element nodes
if(solcase==3) {
ini.initial_double_p_1d(n_dof_s*el_node_n,el_force);
poro_load_4n_dis poro4ndis(i, pnode, pmat, pel, e_node,
el_force);
}
int mk = 0;
for(int j=0; j<n_dof_s; j++) {
for(int k=0; k<en; k++) {
pdr_dis[pnode[pel[i].connect[k]-1].eq_n[j]] +=
el_force[mk++]*(pii+1)/loadstep;
};
};
};
finalize final;
final.final_1d(el_force);
final.final_2d(el_node_n,bceq_n_s,e_node);
};
initialization ini;
matrix matx;
- 18 -
double *element_force = matx.matrix_new1(el_node_n);
int mk = 0;
for(int j=0; j<n_dof_f; j++) {
for(int k=0; k<en; k++) {
pdr_wat[pnode[pel[i].connect[k]-1].eq_n[2]] +=
element_force[mk++];
};
};
}
finalize final;
final.final_2d(el_node_n,bceq_n_s,e_node);
final.final_1d(element_force);
};
- 19 -
** 관련 C++ 프로그램 (Assemble_force.cpp)
matrix matx;
MKL_INT fnn=pfn;
MKL_INT NRHS=1;
MKL_INT INFO;
MKL_INT ipiv[fnn];
LAPACKE_dgesv(LAPACK_COL_MAJOR, fnn, NRHS, Kt_one, fnn, ipiv, pdr_dis, fnn);
matrix matx;
finalize final;
double * ppKt = matx.mat_to_vec_double_fortran(pfn, pfn, pKt);
// LU Factorize pKt
MKL_INT ppfn = pfn;
// int * ipiv = new int [pfn];
MKL_INT ipiv[ppfn];
MKL_INT INFO;
MKL_INT lda = pfn;
LAPACKE_dgetrf(LAPACK_COL_MAJOR, ppfn, ppfn, ppKt, lda, ipiv);
- 20 -
double ** mpKt = matx.vec_to_mat_double_fortran(pfn, pfn, ppKt);
final.final_1d(ppKt);
// final.final_int_1d(ipiv);
final.final_1d(work);
final.final_2d(pfn, pfn, mpKt);
}
(5)
- 21 -
(7)
여기서
omp_set_num_threads(8);
matrix matx;
finalize final;
f_output output;
//MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
ifstream ifs; // 파일 입력
ifstream *pifs; // 파일 입력
pifs = &ifs; // 파일 입력
solver_case sol_case;
- 22 -
sol_case.solver_case1(pifs);
s_time stime;
f_time ftime;
load_step loadstep;
node_number nodenumber;
material_number materialnumber;
element_number elementnumber;
decomposed_number decomposednumber;
data_input data;
if(solcase==3) {
stime.s_time1(pifs);
ftime.f_time1(pifs);
}
loadstep.load_step1(pifs);
nodenumber.node_number1(pifs);
node_pr *node = new node_pr[node_n]; // allocate for node_n
if(solcase==1 || solcase==4 || solcase==8 || solcase==9 || solcase==12
|| solcase==13) {
data.node_solid2D(pifs, node);
// input data
}
- 23 -
data.node_solid3D(pifs, node);
// input data
}
if(solcase==3) {
data.node_porous2D(pifs, node);
// input data
}
materialnumber.material_number1(pifs);
elementnumber.element_number1(pifs);
- 24 -
}
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0) {
std::cout<<"set_dof time: "<<MPI_Wtime()-start_time<<'\n';
}
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0) {
std::cout<<"reordering lag: "<<MPI_Wtime()-start_time<<'\n';
}
}
pifs->close();
- 25 -
위 FEM 해석 프로그램과 병렬해석의 검증을 위하여 다음과 같은 모델을 사용하였다.
그림 2. 영역분할
그림 3. 병렬화에 따른 해석속도
- 26 -
● 요약
- 본 기술에서는 다공질 매체의 에너지 흡수 메커니즘을 규명하기 위하여 미시구조상에
서 고체 입자들의 변형 해석을 할 수 있는 프로그램이 개발되었다.
- 미시 고체영역에서 변형 해석을 진행하고자 할 때 무수히 많은 고체입자들에 대한 변
형해석이 고려되어야 함으로 선대비책으로 병렬알고리즘을 개발하고 프로그램에 접목시
켰다.
- 본 프로그램은 외부하중에 의한 고체입자들 접촉 및 열 발생 메커니즘을 해석하기 위
해 완성되어야 하는 프로그램이다.
* 기존개획대비 미흡한 점 :
본 기술에서 개발된 FEM코드는 고체해석에 매우 정확하고 빠른 결과 값을 도출 할 수 있
다. 기존 계획에서 병렬화를 고려한 FEM 코드 개발에 대한 내용은 완벽하게 완성되었다.
그러나 계획되었던 프로그램 등록 절차는 미비한 상태이다. 기존 상용프로그램 대비 성
능의 우수함을 보여야 하고, 사용자 편의의 GUI가 개발되어야 하지만 미완성상태이다.
관련 미흡한 점들을 보완하여 추후 프로그램 등록을 계획하고 있다.
(9)
(10)
- 27 -
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
- 28 -
Step 1: 임의형상의 고체요소가 외부하중에 의해 거동하는 단계로 요소간 충돌이전의 상
태를 나타낸다. 고체요소는 기하비선형성이 고려된 지배방정식에 의해 움직이고 이는 다음
과 같이 식으로 정의될 수 있다.
(19)
Step 2: 요소들의 충돌이 일어날 시점인지 판단하고 어떤 형태의 충돌을 갖는지 정의된다.
충돌 탐지 방법은 그리드 입자 방법이 사용된다. 그리고 충돌체에 대한 주(Master)-부
(Slave) 요소를 결정하게 된다. 모서리가 존재하는 임의형상 요소에서는 충돌타입에 따라
점-점, 점-선, 점-면 형태로 구분되며, 주요소에서는 점을 갖게 되고 부요소에서는 점, 줄
또는 면을 갖게 된다. 또한 충돌각을 계산하기 위한 법선 백터를 정의하게 되는데 점-점
충돌에서는 이를 구하기가 매우 어렵다. 이를 해결하기 위해 법선 백터 정의가 보다 수월
한 점-선 충돌 형태를 2개 이상 사용하여 점-점에서의 법선백터를 정의한다. 이때 법선백
터를 기준으로 하는 지역좌표(local coordinate)에서 충돌지점과 주-부 입자간의 거리를
계산하게 된다.
- 29 -
여부에 따라 운동량 방정식을 통해 적용하중이 재계산된다. 이 접근 방법은 일반적으로 알
고 있는 구속조건에서의 반력을 계산하는 방법과 유사하다.
double area=0;
double *F = matx.matrix_new1(fn+2);
double dt = 0.05;
// for energy
double ** e_tr_du_n1 = matx.matrix_new2(1, fn);
double ** e_du_n1 = matx.matrix_new2(fn, 1);
double ** kinetic = matx.matrix_new2(1, 1);
double ** e_K = matx.matrix_new2(fn, fn);
- 30 -
double ** e_e_du_n1 = matx.matrix_new2(fn, 1);
double ** e_K_du_n1 = matx.matrix_new2(fn, 1);
double ** strain_E = matx.matrix_new2(1,1);
//assemble force
double *dr_dis = matx.matrix_new1(dn);
assemble_force assf;
//assemble mass
double **mass_m = matx.matrix_new2(fn,fn);
assemble_mass massf;
double sum_mass=0;
for(int i=0; i<fn; i++) {
for(int j=0; j<fn; j++) {
sum_mass += mass_m[i][j];
}
}
std::cout<<"asasss "<<sum_mass<<'\n';\
- 31 -
double * err = matx.matrix_new1(fn);
double * lamda = matx.matrix_new1(2);
double dis;
double which=0;
int aaw=0;
int nnm=0;
double ddis=0;
double ddis_old=0;
double energy=0;
int temp_inc=0;
// input
int h1, h2, h3, h4;
int ccase=0;
// output
char s1[100]="/tmp/para_solid2D";
// char s1_par[100]="para_par3D";
char ss[300];
// char ss_par[300];
char dest[]=".vtu";
int a;
a=time;
sprintf(ss, "%s%d%s", s1, a, dest);
// sprintf(ss_par, "%s%d%s", s1_par, a, dest);
ofstream ofs;
ofstream *pofs;
ofstream ofs1;
ofstream *pofs1;
pofs = &ofs;
pofs1 = &ofs1;
pofs->open(ss);
output.paraview_solid2D_4n(pofs, pnode, pel);
- 32 -
ini.initial_double_p_1d(fn, a_internal_F);
if(time==0) {
assf.assemble_force_dis(dr_dis, pnode, pel, pmat, 1);
}
else {
ini.initial_double_p_1d(fn, dr_dis);
}
// Newton-Raphson Method
for(int sss=0; sss<nnm; sss++) {
- 33 -
}
std::cout<<'\n';
ccase=2;
}
- 34 -
for(int i=0; i<fn; i++) {
u_n1[i] = u_n[i] + F[i];
du_n1[i] = (u_n1[i]-u_n[i])*2/dt - du_n[i];
ddu_n1[i] = 4/pow(dt,2)*(u_n1[i]-u_n[i]-dt*du_n[i])-ddu_n[i];
}
} // end of iteration
- 35 -
} // end of time
}
initialization ini;
matrix matx;
finalize final;
fnorm fm;
// variable
double *ddu_n1 = matx.matrix_new1(fn); // accelerations at n
double *du_n1 = matx.matrix_new1(fn); // velocity at n+1
double *u_n1 = matx.matrix_new1(fn); // displacements at n+1
double *u_n2 = matx.matrix_new1(fn); // displacements at n+2
// assemble assemble;
double **Kt = matx.matrix_new2(fn,fn);
double **temp = matx.matrix_new2(fn, 1);
//assemble force
double *dr_dis = matx.matrix_new1(dn);
//assemble mass
double **mass_m = matx.matrix_new2(fn,fn);
//lumped mass
double *lump_mass = matx.matrix_new1(fn);
assemble_stiff assm;
assm.assm_Kt(pnode, pmat, pel, Kt);
// assm.assm_Kt_2D(pnode, pmat, pel, Kt);
assemble_force assf;
- 36 -
assf.assemble_force_dis(dr_dis, pnode, pel, pmat, 1); // <- 0 : load step
(refer to solcase 1)
assemble_mass massf;
massf.assm_mass(pnode, pmat, pel, mass_m);
// // Ku_n
matx.matrix_mul2(fn, fn, 1, Kt, pu_n, temp);
// dr_dis = F-Ku_n - Cp
// central differential equation Logan p.656
double * di_0 = matx.matrix_new1(fn);
if(time==0) {
for(int i=0; i<fn; i++) {
ddu_n1[i] = ( dr_dis[i] - temp[i][0] ) / lump_mass[i];
di_0[i] = pu_n[i][0] - sm_dt * pdu_n[i][0] + pow(sm_dt,2) / 2 *
ddu_n1[i];
u_n1[i] = ( pow(sm_dt,2) * dr_dis[i] + 2*lump_mass[i]*pu_n[i][0] -
- 37 -
pow(sm_dt,2)*temp[i][0] - lump_mass[i]*di_0[i] ) / lump_mass[i];
}
}
else {
for(int i=0; i<fn; i++) {
u_n1[i] = pre_pu_n[i][0];
di_0[i] = pu_n[i][0];
}
}
// Ku_n
double * temp1 = matx.matrix_new1(fn);
matx.matrix_vector_mul2(fn, fn, Kt, u_n1, temp1);
double energy=0;
for(int i=0; i<node_n; i++) {
for (int j=0; j<2; j++) {
energy += 0.5 * pmat[0].soldens * du_n1[pnode[i].eq_n[j]];
}
}
- 38 -
}
final.final_2d(fn,fn,Kt);
final.final_1d(dr_dis);
final.final_2d(fn, 1, temp);
final.final_1d(ddu_n1);
final.final_1d(du_n1);
final.final_1d(u_n1);
final.final_2d(fn, fn, mass_m);
final.final_1d(lump_mass);
}
● 요약
- 본 연구에서는 앞에서 개발되었던 FEM 코드를 사용하여 고체입자간의 충돌이 해석되었
다. 입자간의 충돌해석은 다공질 매체를 구성하고 있는 요소 중에 하나인 고체입자들이
재배열 및 밀림에 의해 열을 발생시키는 메커니즘에서 매우 중요한 단계중 하나이다. 입
자 충돌에 관한 해석에서 개발한 알고리즘의 정확성은 SCI급 논문을 통하여 검증 되었
다.
* 기존개획대비 미흡한 점 :
기존 계획에서는 다공질 매체의 미시영역에서 고체 입자들간 충돌에 의한 열발생 메커니
즘을 규명하는 것이었다. 지금까지 개발되었던 부분은 고체입자들간의 충돌해석에만 국
한되었고, 이로 인한 열발생 메커니즘은 고려가 안되었다. 기존 계획 대비 열발생 메커
니즘 규명에 대한 부족했던 원인은 다음과 같다.
① 충돌 해석에서 발생되어지는 접착력에 대한 이론적 규명이 계획대비 시간이 많이 소
요됨.
② 미시고체 입자들간의 충돌에서 Frictional force 정의에 대해 탄소성이론을 사용하여
야 하나 수치적으로 접근하기에 한계가 있었음. 즉, 실험식들의 반영이 필요함.
② 계획에 참여되었던 인력의 이탈로 인하여 계획대비 미진한 진척
- 39 -
3) 나노다공질 매체의 열전 에너지 흡수 및 변환기술 개발 : 운동량 에너지를 전기에너지로
변환해석
(20)
max ≃
여기서, , , , 는 각각 생성되는 전기에너지, Young’s modulus, 재료에 가해주는 응력,
전기-기계결합계수를 의미하며, 전기-기계결합계수는 다음과 같이 구하여진다.
- 40 -
(22)
(23)
여기서, , , , 는 각각 변형률, 응력, 전기적 변위, 전기장을 의미하며 ,
, 는 compliance matrix, piezoelectric stress coupling matrix, dielectric matrix
구분 PZT substructure
길이, L(mm) 100 100
폭, b(mm) 20 20
두께, h(mm) 0.4 0.5
인장탄성계수(GPa) 66 100
밀도, (kg/m3)
7,800 7,165
압전정수, (pm/V) -190 -
유전율, (nF/m) 15.93 -
- 41 -
그림 7 유한요소해석을 위한 하베스터 형상
그림 8 유한요소 모델의 검증
● 요약
- 본 연구에서는 앞에서 설명한 관련기술⑤와 관련한 연구내용으로 ABAQUS을 이용하여
운동량에너지를 전기로 변화 해석하는 연구를 진행하였다. 이 연구는 거시영역에서 전기
변환과 관련한 해석으로 추후 미시다공질 매체에서 거시다공질 매체로 전기변환을 시도
할 때 필요한 운동량-전기에너지 기술 메커니즘이 포함된다. 즉, 멀티스케일링을 통하여
전기에너지로 변환할 때 기초가 되는 기술로 1차년도에 시행하였다.
- 42 -
* 관련 ABAQUS input파일
*Heading
** Job name: Job-1 Model name: Job-1
** Generated by: Abaqus/CAE 6.14-2
*Preprint, echo=NO, model=NO, history=NO, contact=NO
**
** PARTS
**
*Part, name=PZT
*Node
1, 0.100000001, 0.00039999999, 0.0199999996
2, 0.100000001, 0., 0.0199999996
3, 0.100000001, 0.00039999999, 0.0175000001
4, 0.100000001, 0., 0.0175000001
5, 0.100000001, 0.00039999999, 0.0149999997
6, 0.100000001, 0., 0.0149999997
7, 0.100000001, 0.00039999999, 0.0125000002
8, 0.100000001, 0., 0.0125000002
......
*Element, type=C3D20E
1, 19, 20, 22, 21, 1, 2, 4, 3, 742, 741, 740, 739, 743,
744, 745,
746, 748, 747, 749, 750
2, 21, 22, 24, 23, 3, 4, 6, 5, 740, 753, 752, 751, 745,
754, 755,
756, 750, 749, 757, 758
......
*Surface, type=ELEMENT, name=TOP
_TOP_S6, S6
*Surface, type=ELEMENT, name=BOTTOM
_BOTTOM_S4, S4
*Orientation, name=Ori-1
1., 0., 0., 0., 1., 0.
1, 0.
** Section: Section-1-_PICKEDSET5
- 43 -
*Solid Section, elset=_PICKEDSET5, orientation=Ori-1, material=PZT
1.,
*End Part
**
*Part, name=SUBSTRUCTURE
*Node
1, 0., -0.000500000024, 0.0199999996
2, 0., 0., 0.0199999996
3, 0., -0.000500000024, 0.0175000001
4, 0., 0., 0.0175000001
5, 0., -0.000500000024, 0.0149999997
6, 0., 0., 0.0149999997
7, 0., -0.000500000024, 0.0125000002
8, 0., 0., 0.0125000002
.....
*Element, type=C3D20
1, 19, 20, 22, 21, 1, 2, 4, 3, 742, 741, 740, 739, 743,
744, 745,
746, 748, 747, 749, 750
2, 21, 22, 24, 23, 3, 4, 6, 5, 740, 753, 752, 751, 745,
754, 755,
756, 750, 749, 757, 758
3, 23, 24, 26, 25, 5, 6, 8, 7, 752, 761, 760, 759, 755,
762, 763,
764, 758, 757, 765, 766
.....
*Orientation, name=Ori-1
1., 0., 0., 0., 1., 0.
1, 0.
** Section: Section-2-_PICKEDSET6
*Solid Section, elset=_PICKEDSET6, orientation=Ori-1, material=SUBSTRUCTURE
1.,
*End Part
**
**
** ASSEMBLY
- 44 -
**
*Assembly, name=Assembly
**
*Instance, name=PZT-1, part=PZT
*End Instance
**
*Instance, name=SUBSTRUCTURE-1, part=SUBSTRUCTURE
*End Instance
**
*Nset, nset=MPZT-BOM, instance=SUBSTRUCTURE-1
722,
*Nset, nset=MPZT-TOP, instance=PZT-1
1,
*Elset, elset=_PICKEDSET36, internal, instance=PZT-1, generate
1, 320, 1
*Elset, elset=__PICKEDSURF26_S4, internal, instance=PZT-1, generate
1, 320, 1
*Elset, elset=__PICKEDSURF26_S4_1, internal, instance=PZT-1, generate
1, 320, 1
*Elset, elset=__PICKEDSURF27_S4, internal, instance=SUBSTRUCTURE-1, generate
1, 320, 1
*Elset, elset=__PICKEDSURF27_S4_1, internal, instance=SUBSTRUCTURE-1, generate
1, 320, 1
*Surface, type=ELEMENT, name=_PICKEDSURF26, internal
__PICKEDSURF26_S4, S4
*Surface, type=ELEMENT, name=_PICKEDSURF27, internal
__PICKEDSURF27_S4, S4
** Constraint: Eqn-1
*Equation
2PZT-TOP, 9, -1.
MPZT-TOP, 9, 1.
** Constraint: Eqn-2
*Equation
2PZT-BOM, 9, -1.
MPZT-BOM, 9, 1.
** Constraint: TIE-1-1
- 45 -
*Tie, name=TIE-1-1, adjust=yes
_PICKEDSURF27, _PICKEDSURF26
*End Assembly
*Amplitude, name=A
1., 0., 2., 1, 3.,
1., 4., 1.
5., 1., 6., 1, 7.,
1., 8., 1.
9., 1., 10., 1.
**
** MATERIALS
**
*Material, name=PZT
*Density
7800.,
*Dielectric
1.593e-08,
*Elastic
6.6e+10, 0.2
*Piezoelectric, type=E
0., 0., 0., 8e-10, 0., 0., -1.9e-10, 6e-10
-1.9e-10, 0., 0., 0., 0., 0., 0., 0.
0., 8e-10
*Material, name=SUBSTRUCTURE
*Density
7165.,
*Elastic
1e+11, 0.2
**
** BOUNDARY CONDITIONS
**
** Name: Disp-BC-1 Type: Displacement/Rotation
*Boundary
_PICKEDSET35, 1, 1
** Name: Disp-BC-2 Type: Displacement/Rotation
*Boundary
- 46 -
_PICKEDSET35, 2, 2
** Name: Disp-BC-3 Type: Displacement/Rotation
*Boundary
_PICKEDSET35, 3, 3
** Name: Disp-BC-4 Type: Displacement/Rotation
*Boundary
_PICKEDSET35, 4, 4
** Name: Disp-BC-5 Type: Displacement/Rotation
*Boundary
_PICKEDSET35, 5, 5
** Name: Disp-BC-6 Type: Displacement/Rotation
*Boundary
_PICKEDSET35, 6, 6
** Name: Elec-BC-1 Type: Electric potential
*Boundary
_PICKEDSET36, 9, 9
** ----------------------------------------------------------------
**
** STEP: Step-3
**
*Step, name=Step-3, nlgeom=NO, perturbation
*Static
**
** OUTPUT REQUESTS
**
**
** FIELD OUTPUT: F-Output-1
**
*Output, field, variable=PRESELECT
**
** HISTORY OUTPUT: H-Output-1
**
*Output, history, variable=PRESELECT
*End Step
** ----------------------------------------------------------------
**
- 47 -
** STEP: Step-1
**
*Step, name=Step-1, nlgeom=NO, perturbation
*Frequency, eigensolver=Lanczos, acoustic coupling=on, normalization=displacement,
residual modes
20, , , , ,
**
** OUTPUT REQUESTS
**
*Restart, write, frequency=0
**
** FIELD OUTPUT: F-Output-2
**
*Output, field
*Node Output
EPOT, RCHG, U
*End Step
** ----------------------------------------------------------------
**
** STEP: Step-2
**
*Step, name=Step-2, nlgeom=NO, perturbation
*Steady State Dynamics
0., 1000., 100, 1.
*Base Motion, DOF=2, Type=Acceleration, Amplitude=a, Scale=9.81
*Modal Damping
1, 1, 0.01
2, 2, 0.0103
3, 3, 0.033
4, 4, 0.04
5, 5, 0.136
**
** OUTPUT REQUESTS
**
**
** FIELD OUTPUT: F-Output-3
- 48 -
**
*Output, field
*Node Output
A, CF, EPOT, RF, U, V
**
** FIELD OUTPUT: F-Output-4
**
*Element Output, directions=YES
LE, S
**
** HISTORY OUTPUT: H-Output-2
**
*Output, history, variable=PRESELECT
*End Step
다. 1차 년도 연구결과 정리
- 1차 년도에서는 다공질 매체에 대한 에너지하비스팅의 기초기술이 개발되었음.
- 미시다공질 매체에서 고체입자들끼리의 충돌 해석을 위한 메커니즘 규명과 이를 해석하기
위한 FEM 코드가 개발되었음.
- 거시영역의 다공질 매체를 해석하기 위해서 상용프로그램 ABAQUS를 이용해 운동량에너지
를 전기에너지로 변환하는 기초연구를 수행하였음.
- 1차 년도에는 미시다공질 매체에서 고체입자간의 접촉으로 인한 열발생 메커니즘이 규명
되어야 하나 접촉 메커니즘에서 열발생을 시키기 위한 복잡한 요소들이 요구되었음. 기존
계획에서는 선형 Friction에 대한 모델을 사용하여 열발생 메커니즘을 구현하고자 하였으
나, 이론적인 규명과 함께 검증을 위한 실험식 조건이 추가적으로 필요하였음. 또한 검증된
탄소성과 관련한 접촉 실험식이 필요하였음.
- 49 -
2. 2차년도 연구내용
가. 요약
연 차 연구 내용 연구 결과
1차년도에 개발된 FEM 코드를 이용하여 다공질
다공질 매체 내에서 미시 매체 상에 존재하는 임의 형상의 고체입자들의
입자간 유체 유동 충돌해석을 실시하고 이때 발생하는 충돌 에너지
시뮬레이션을 위한 프로그램 를 계산하였다.
개발 및 에너지 계산 또한 다공질 매체내에서 유체 유동을 계산하기
2차년도
위한 SPH 코드가 완성되었다.
거시영역에서 에너지 흡수를 모사하기 위한 탄소
Crushable foam 모델의 탄소성
성 모델 Crushable Foam 모델의 구성모델을 정립
이론을 통한 에너지 흡수 모델
하고, ABAQUS의 VUMAT을 통한 코드를 완성하였
완성
다.
나. 주요내용
1) 다공질 매체 내에서 미시 입자간 유체 유동 시뮬레이션을 위한 프로그램 개발 및 에너지
계산
- 50 -
(24)
(25)
(26)
(27)
(28)
(29)
(30)
- 51 -
(31)
(32)
(33)
(34)
- 52 -
그림 9. MPI의 두 가지 유형
- 53 -
그림 11. Interface particle로 영역 분할
(35)
(36)
(37)
그림 12. 모델의 구조
- 54 -
로 진행하는 것을 case 1이라 하고 새로운 방법으로 진행하는 것을 case 2라고 한다. 방법
의 효율성을 판단하기 위해서는 서브도메인의 개수 변화에 따라 실행시간이 변하는 추세를
측정하고 다른 케이스의 실행시간과도 서로 비교한다. 그리고 결과를 얻기 위한 반복차수도
조사한다.
- 55 -
(a) case 1
(b) case 2
그림 14. 실행시간
(a) 786개 입자
(b) 1488개 입자
- 56 -
(c) 2208개 입자
(d) 2928개 입자
(e) 3648개 입자
그림 15. 반복차수
- 57 -
f_output output;
// calculate dv/evt_dt
double factor[3] = { 0, 0, 0 };
double factor1[3] = { 0, 0, 0 };
double factor2[3] = { 0, 0, 0 };
double factor3[3] = { 0, 0, 0 };
double n_a[3] = { 0, 0, 0 };
double grad_grad_c_a[3] = { 0, 0, 0 };
double dw_dr_r = 0.0;
double dw_dr2_r = 0.0;
double dw_drij = 0.0;
smoothing_func sff;
if (i != j) {
par[i].dist[j] = sqrt(pow(par[j].x[0] -
par[i].x[0], 2) + pow(par[j].x[1] - par[i].x[1], 2) + pow(par[j].x[2] - par[i].x[2],
2));
//std::cout << par[i].dist[j] << '\n' ;
- 58 -
if (par[i].dist[j] <= 3 * evt_sm_h) {
sff.sf(&par[i].func[j], &par[i].dist[j],
evt_sm_h); // smoothing functions
for (int k = 1; k < 2; k++) {
//-----------------------------------------------
} // end of j
} // end of i
- 59 -
par[i].pre_vel[k] = par[i].vel_n[k] +
0.5*evt_dt*par[i].dvn_dt[k]; // predictor
par[j].pre_vel[k] = par[j].vel_n[k] +
0.5*evt_dt*par[j].dvn_dt[k]; // predictor
} // end of j
par[i].dvn1_dt[k] = -factor[k];
factor[k] = 0; factor1[k] = 0; factor2[k] = 0; factor3[k] = 0;
n_a[k] = 0; grad_grad_c_a[k] = 0;
} // end of i
} // end of k
- 60 -
}
● 요약
- 다공질 매체는 고체와 유체가 동시에 존재하는 재료임. 1차 년도는 고체에 대한 해석
을 진행하였고, 2차 년도에는 유체에 대한 해석을 진행하였다.
- 유체의 해석을 위해서는 관련 프로그램이 필요하나, 미시다공질 매체 상에서 유체 유
동에 대한 해석이 가능한 사용프로그램들은 현재 존재하고 있지 않음. 이에 2차 년도에
서는 입자기반의 SPH 프로그램을 개발하게 되었다.
* 기존개획대비 미흡한 점 :
- 본 연구에서는 에너지 하비스팅을 위한 미시 다공질 매체에서의 유체유동을 시뮬레이
션할 수 있는 SPH 코드가 개발되었다. 기존 계획에서는 SPH 코드개발과 고체입자와의 충
돌 시뮬레이션을 통하여 friction을 생성하고 열을 발생시키는 기술을 개발하는 것이었
다. 그러나, 1차년도에서 문제로 제기되었던 선형 friction 문제를 해결하기 위해서는
실험적을 통하여 구성방정식을 유도하고 적용해야 하는 어려움이 있었다. 2차년도에서도
유체와 고체간의 연성해석을 위한 실험적 방법의 도입이 필요한 상황이었다. 그러나 기
존 계획에서는 실험적 방법을 배제하고 이론적 방법과 수치적인 방법으로 해결하고자 했
던 부분이 연구 진행에 많은 시간을 소비하였고 관련하여 결과도 도출하기가 매우 어려
웠다. 추후에 실험적 연구를 통하여 구성모델링을 수립하고 접목하는 연구가 진행될 예
정이다.
- 61 -
ABAQUS에서 지원하는 Crushable Foam 모델은 탄소성이론을 바탕으로 Volumetric과
Isotropic hardening 모델에 대해 지원한다. 그러나 본 모델들은 deviatoric stress에 대한
변형률을 계산하는 것이 주된 목적임으로, 온도와 변형률 속도가 고려되어야 하는 에너지
흡수 재료 조건에서는 매우 제약적이다.
Crushable Foam 모델은 hardening 구간에서 항복응력이 거의 일정하게 유지 된다(그림
16). 이후, 급격하게 항복응력이 증가하면서 파괴까지 진행된다.
- 62 -
그림 17. Isotropic의 Crushable Foam 모델
(38)
(39)
(40)
한편, Crushable foam 모델은 flow rule에 관한 식에서 non-associate flow를 사용한다. 여
기서, flow rule이란, 계산된 yield stress가 항복응력을 넘어섰을 경우 새로운 yield
surface가 정의되어야 하는데 이때 flow rule가 사용된다. Flow rule에서는 associate rule
- 63 -
과 non-associate rule 두 가지로 나뉘는데, associate rule은 yield surface상에서 법선
방향으로 yield surface가 커지는 것이고 non-associate rule은 yield surface상이 아닌
flow potential에 관한 surface를 정의하고 이에 대한 법선 방향으로의 surface가 커지는
것으로 정의한다. Crushable foam 모델은 non-associate flow rule을 사용하기 때문에 flow
potential에 관한 식이 추가가 되는데 다음과 같이 정의할 수 있다.
(41)
(42)
(43)
(44)
(45)
- 64 -
relationship 방법을 사용하여 계산된 strain에서의yield stress를 계산한다.
(46)
여기서 �_�는 trial stress로 이전에 계산된 true stress �_�에 1)에서 계산된
- 65 -
(47)
- 66 -
C. 는 다음과 같이 정의할 수 있는데,
(48)
(49)
- 67 -
그림 19. 3차원 ABAQUS 모델
재료는 다음과 밀도는 500kg/m3, 탄성계수는 80,000,000 Pa, 프아송비는 0.2가 사용되었
고, crushable foam에 관한 stress ratio 는1.1, Plastic Poisson’s ratio는 0가 사용되었
다. Hardening에 관한 데이터는 그림 5와 같이 첫번째 yield stress 220000Pa을 시작으로
소성변형률에 따른 응력 관계를 적용하였다.
위에서 제공한 VUMAT 코드를 이용하여 해석된 결과값은 그림 21과 같다. 그림 16에서는
모델의 제일 끝 지점에서의 Von Mises 응력 값을 얻은 결과로 Elastic 구간까지는 매우 정
확하게 일치하였다. 220000Pa의 첫 번째 항복 이후부터 소성구간 동안은 VUMAT 코드의 결과
가 ABAQUS 기본 제공 결과와 거의 유사하게 나타난다. 근소하게 차이가 나는 결과값들을 설
명하기 위해서는 ABAQUS의 기본 제공 모델에 대한 stress update 알고리즘이 공개되어야 하
- 68 -
는데, 현재까지는 공개되어 있지 않다. 본 VUMAT 코드에서는 Backward Euler method가 사용
되었다. 1초 동안에 진행된 해석의 결과들은Plastic Flow가 제대로 고려되어 있지 않으면
hardening 구간에서 결과의 차이들이 크게 발생한다. 그러나, 본 VUMAT 코드는 ABAQUS에서
기본제공 하는 plastic flow에 거의 근접하게 계산한다. 그림 7은 계산된 결과값의 Von
Mises Contour를 나타낸다.
* 관련 ABAQUS의 VUMAT 파일
subroutine vumat(
- 69 -
C Read only -
1 nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,
2 stepTime, totalTime, dt, cmname, coordMp, charLength,
3 props, density, strainInc, relSpinInc,
4 tempOld, stretchOld, defgradOld, fieldOld,
3 stressOld, stateOld, enerInternOld, enerInelasOld,
6 tempNew, stretchNew, defgradNew, fieldNew,
C Write only -
5 stressNew, stateNew, enerInternNew, enerInelasNew )
C
include 'vaba_param.inc'
C
C J2 Mises Plasticity with kinematic hardening for plane
C strain case.
C Elastic predictor, radial corrector algorithm.
C
C The state variables are stored as:
C STATE(*,1) = back stress component 11
C STATE(*,2) = back stress component 22
C STATE(*,3) = back stress component 33
C STATE(*,4) = back stress component 12
C STATE(*,5) = equivalent plastic strain
C STATE(*,6) = yield_stress
C
C All arrays dimensioned by (*) are not used in this algorithm
dimension props(nprops), density(nblock),
1 coordMp(nblock,*),
2 charLength(*), strainInc(nblock,ndir+nshr),
3 relSpinInc(*), tempOld(*),
4 stretchOld(*), defgradOld(*),
5 fieldOld(*), stressOld(nblock,ndir+nshr),
6 stateOld(nblock,nstatev), enerInternOld(nblock),
7 enerInelasOld(nblock), tempNew(*),
8 stretchNew(*), defgradNew(*), fieldNew(*),
9 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),
- 70 -
1 enerInternNew(nblock), enerInelasNew(nblock)
integer i
parameter(nnprops=4) ! the number of properties except for yield-plastic strain
dimension table(2,(nprops-nnprops)/2)
dimension a_b(6), b_b(6)
C
character*80 cmname
C
dimension C_mat(6,6)
double precision lamda, mu, F_function, p, q, B
double precision p_sigma, sstrain, e_pl_n1, J2
double precision testtest, sigma_b, hard, dlamda, B_stress
double precision tr_trace, eelastic, vvois
- 71 -
do i=1,nprops/2-1
table(1,i) = props(i*2-1+nnprops)
table(2,i) = props(i*2+nnprops)
enddo
mu = props(1)/(2.0*(1+props(2)))
lamda = props(2)*2*mu / (1.0 - 2.0 * props(2))
!props(1)*props(2)/((1.0+props(2))*(1.0-2.0*props(2)))
do i=1,nblock
! for stress
old_stress(1,1) = stressOld(i,1)
old_stress(2,2) = stressOld(i,2)
old_stress(3,3) = stressOld(i,3)
old_stress(1,2) = stressOld(i,4)
old_stress(1,3) = stressOld(i,5)
old_stress(2,3) = stressOld(i,6)
old_stress(2,1) = stressOld(i,4)
old_stress(3,1) = stressOld(i,5)
old_stress(3,2) = stressOld(i,6)
- 72 -
! for strain
strain_inc(1,1) = strainInc(i,1)
strain_inc(2,2) = strainInc(i,2)
strain_inc(3,3) = strainInc(i,3)
strain_inc(1,2) = strainInc(i,4)
strain_inc(1,3) = strainInc(i,5)
strain_inc(2,3) = strainInc(i,6)
strain_inc(2,1) = strainInc(i,4)
strain_inc(3,1) = strainInc(i,5)
strain_inc(3,2) = strainInc(i,6)
! calculate trace(strain)
tr_strain = (strain_inc(1,1)+strain_inc(2,2)+strain_inc(3,3))
- 73 -
e_pl_n1=0.0
else
e_pl_n1=stateOld(i,5)
endif
eelastic = props(1)
vvois = props(2)
call matrix_vector(6,6,C_mat,b_b,dlamda_C_b_b)
do k=1,6
dlamda_C_b_b(k) = dlamda_C_b_b(k) * dlamda
enddo
- 74 -
! stress update
! stress update
stressNew(i,1) = trial_stress_c(1,1)
stressNew(i,2) = trial_stress_c(2,2)
stressNew(i,3) = trial_stress_c(3,3)
stressNew(i,4) = trial_stress_c(1,2)
stressNew(i,5) = trial_stress_c(1,3)
stressNew(i,6) = trial_stress_c(2,3)
stateNew(i,5) = stateOld(i,5) + dlamda * B_stress
else
! stress update
stressNew(i,1) = trial_stress(1,1)
stressNew(i,2) = trial_stress(2,2)
stressNew(i,3) = trial_stress(3,3)
stressNew(i,4) = trial_stress(1,2)
stressNew(i,5) = trial_stress(1,3)
stressNew(i,6) = trial_stress(2,3)
stateNew(i,5) = stateOld(i,5)
end if
end do
return
end
- 75 -
dimension C_mat(6,6), dlamda_C_a_c(6), R(6)
dimension dbcdstress(6,6), QQ(6,6), VQQ(6,6), VQQR(6), Cac(6),
1 VQQCac(6)
dimension dt_sigma(6)
double precision sigma_b, p_c, q_c, F_function_c
double precision E, poiss, dlamda, AQR, AQCa, dtlamda
do m=1,5
! 2D->1D
trial_stress_one(1) = trial_stress(1,1)
trial_stress_one(2) = trial_stress(2,2)
trial_stress_one(3) = trial_stress(3,3)
trial_stress_one(4) = trial_stress(1,2)
trial_stress_one(5) = trial_stress(1,3)
trial_stress_one(6) = trial_stress(2,3)
trial_stress_c_one(1) = trial_stress_c(1,1)
trial_stress_c_one(2) = trial_stress_c(2,2)
trial_stress_c_one(3) = trial_stress_c(3,3)
trial_stress_c_one(4) = trial_stress_c(1,2)
trial_stress_c_one(5) = trial_stress_c(1,3)
trial_stress_c_one(6) = trial_stress_c(2,3)
! C*a_c
call matrix_vector(6,6,C_mat,a_c, dlamda_C_a_c)
! dlamda*C*a_c
- 76 -
do i=1,6
dlamda_C_a_c(i) = dlamda_C_a_c(i) * dlamda
enddo
!d-b_c/d-stress for c
call cal_db_c_dstress(alpha, beta, trial_stress_c_one,
1 dbcdstress)
!Cdbcdstress = I-C*dbcdstress
call matrix_matrix(6,6,6,C_mat,dbcdstress,QQ)
do i=1,6
do j=1,6
QQ(i,j) = QQ(i,j) * dlamda
enddo
QQ(i,i) = 1.0 + QQ(i,i)
enddo
! inverse Q
call inverse_mat(6, QQ, VQQ)
!a_c*invQ*R
call matrix_vector(6,6,VQQ,R,VQQR)
call vector_vector(6,a_c,VQQR,AQR)
! write(6,*) "AQR", F_function_c, AQR, F_function_c-AQR
!a_c*invQ*C*a_c
call matrix_vector(6,6,C_mat,a_c,Cac)
call matrix_vector(6,6,VQQ,Cac,VQQCac)
call vector_vector(6,a_c,VQQCac,AQCa)
! write(6,*) "AQCa", AQCa
- 77 -
! dtlamda
dtlamda = (F_function_c-AQR) / AQCa
! write(6,*) "dtlamda", dtlamda
! dt_sigma
! write(6,*) "dt_sigma"
do i=1,6
dt_sigma(i) = -VQQR(i)-dtlamda*VQQCac(i)
! write(6,*) dt_sigma(i)
enddo
trial_stress_c(1,1) = trial_stress_c_one(1)
trial_stress_c(2,2) = trial_stress_c_one(2)
trial_stress_c(3,3) = trial_stress_c_one(3)
trial_stress_c(1,2) = trial_stress_c_one(4)
trial_stress_c(1,3) = trial_stress_c_one(5)
trial_stress_c(2,3) = trial_stress_c_one(6)
write(6,*) F_function_c
enddo
return
end
integer ss, kk
- 78 -
dimension aa(ss,ss)
dimension aa1(ss,ss*2)
dimension aabb(ss,ss)
do i=1,ss
do j=1,ss*2
aa1(i,j) = 0.0
enddo
enddo
do i=1,ss
do j=1,ss
aa1(i,j) = aa(i,j)
enddo
aa1(i,i+ss) = 1.0
enddo
pivot=0
do i=1,ss-1
do j=i+1, ss
pivot = aa1(j,i)/aa1(i,i)
do k=1,ss*2
aa1(j,k) = aa1(i,k)*pivot - aa1(j,k)
enddo
enddo
enddo
do i=ss,2,-1
do j=i-1,1,-1
pivot = aa1(j,i) / aa1(i,i)
do k=1,ss*2
aa1(j,k) = aa1(i,k)*pivot - aa1(j,k)
enddo
enddo
- 79 -
enddo
div=0
do i=1,ss
div = aa1(i,i)
do j=1,ss*2
aa1(i,j) = aa1(i,j) / div
enddo
enddo
do i=1,ss
do j=1, ss
kk = j+ss
aabb(i,j) = aa1(i,kk)
enddo
enddo
return
end
dbcdstress(1,1) = (9*((9+4*beta**2)*trial_stress_c_one(2)**2
1 +2*(-9+2*beta**2)*trial_stress_c_one(2)*trial_stress_c_one(3)
2 +(9+4*beta**2)*trial_stress_c_one(3)**2+4*(9+beta**2)*(trial_
3 stress_c_one(4)**2+trial_stress_c_one(5)**2+trial_stress_c_one
4 (6)**2)))/(4*((9+beta**2)*trial_stress_c_one(1)**2+(9+beta**2
- 80 -
5 )*trial_stress_c_one(2)**2+(-9+2*beta**2)*trial_stress_c_one(
6 2)*trial_stress_c_one(3)+9*trial_stress_c_one(3)**2+beta**2*t
7 rial_stress_c_one(3)**2+(-9+2*beta**2)*trial_stress_c_one(1)*
8 (trial_stress_c_one(2)+trial_stress_c_one(3))+27*trial_stress
9 _c_one(4)**2+27*trial_stress_c_one(5)**2+27*trial_stress_c_on
1 e(6)**2)**(3/2))
dbcdstress(1,2) = -((9*(trial_stress_c_one(1)*((9+4*beta**2)
1 *trial_stress_c_one(2)+(-9+2*beta**2)*trial_stress_c_one(3))
1 +(-9+2*beta**2)*(trial_stress_c_one(2)*trial_stress_c_one(3)
1 -trial_stress_c_one(3)**2-2*(trial_stress_c_one(4)**2+trial_
1 stress_c_one(5)**2+trial_stress_c_one(6)**2))))/(4*((9+beta*
1 *2)*trial_stress_c_one(1)**2+(9+beta**2)*trial_stress_c_one(
1 2)**2+(-9+2*beta**2)*trial_stress_c_one(2)*trial_stress_c_on
1 e(3)+9*trial_stress_c_one(3)**2+beta**2*trial_stress_c_one(3
1 )**2+(-9+2*beta**2)*trial_stress_c_one(1)*(trial_stress_c_on
1 e(2)+trial_stress_c_one(3))+27*trial_stress_c_one(4)**2+27*t
1 rial_stress_c_one(5)**2+27*trial_stress_c_one(6)**2)**(3/2)))
1
dbcdstress(2,2) = (9*((9+4*beta**2)*trial_stress_c_one(1)**2+
1 2*(-9+2*beta**2)*trial_stress_c_one(1)*trial_stress_c_one(3)
1 +(9+4*beta**2)*trial_stress_c_one(3)**2+4*(9+beta**2)*(trial_
1 stress_c_one(4)**2+trial_stress_c_one(5)**2+trial_stress_c_o
1 ne(6)**2)))/(4*((9+beta**2)*trial_stress_c_one(1)**2+(9+beta
1 **2)*trial_stress_c_one(2)**2+(-9+2*beta**2)*trial_stress_c_
1 one(2)*trial_stress_c_one(3)+9*trial_stress_c_one(3)**2+beta
1 **2*trial_stress_c_one(3)**2+(-9+2*beta**2)*trial_stress_c_on
1 e(1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+27*trial_s
1 tress_c_one(4)**2+27*trial_stress_c_one(5)**2+27*trial_stress
1 _c_one(6)**2)**(3/2))
dbcdstress(1,3) = -((9*(trial_stress_c_one(1)*((-9+2*beta**2
1 )*trial_stress_c_one(2)+(9+4*beta**2)*trial_stress_c_one(3))
1 -(-9+2*beta**2)*(trial_stress_c_one(2)**2-trial_stress_c_one
1 (2)*trial_stress_c_one(3)+2*(trial_stress_c_one(4)**2+trial_
1 stress_c_one(5)**2+trial_stress_c_one(6)**2))))/(4*((9+beta*
- 81 -
1 *2)*trial_stress_c_one(1)**2+(9+beta**2)*trial_stress_c_one(
1 2)**2+(-9+2*beta**2)*trial_stress_c_one(2)*trial_stress_c_one
1 (3)+9*trial_stress_c_one(3)**2+beta**2*trial_stress_c_one(3)
1 **2+(-9+2*beta**2)*trial_stress_c_one(1)*(trial_stress_c_one(
1 2)+trial_stress_c_one(3))+27*trial_stress_c_one(4)**2+27*tri
1 al_stress_c_one(5)**2+27*trial_stress_c_one(6)**2)**(3/2)))
dbcdstress(2,3) = (9*((-9+2*beta**2)*trial_stress_c_one(1)**
1 2-(9+4*beta**2)*trial_stress_c_one(2)*trial_stress_c_one(3)-
1 (-9+2*beta**2)*trial_stress_c_one(1)*(trial_stress_c_one(2)
1 +trial_stress_c_one(3))+2*(-9+2*beta**2)*(trial_stress_c_on
1 e(4)**2+trial_stress_c_one(5)**2+trial_stress_c_one(6)**2))
1 )/(4*((9+beta**2)*trial_stress_c_one(1)**2+(9+beta**2)*trial
1 _stress_c_one(2)**2+(-9+2*beta**2)*trial_stress_c_one(2)*tri
1 al_stress_c_one(3)+9*trial_stress_c_one(3)**2+beta**2*trial_s
1 tress_c_one(3)**2+(-9+2*beta**2)*trial_stress_c_one(1)*(tria
1 l_stress_c_one(2)+trial_stress_c_one(3))+27*trial_stress_c_o
1 ne(4)**2+27*trial_stress_c_one(5)**2+27*trial_stress_c_one(6)
1 **2)**(3/2))
dbcdstress(3,3) = (9*((9+4*beta**2)*trial_stress_c_one(1)**2
1 +2*(-9+2*beta**2)*trial_stress_c_one(1)*trial_stress_c_one(2
1 )+(9+4*beta**2)*trial_stress_c_one(2)**2+4*(9+beta**2)*(tria
1 l_stress_c_one(4)**2+trial_stress_c_one(5)**2+trial_stress_c_
1 one(6)**2)))/(4*((9+beta**2)*trial_stress_c_one(1)**2+(9+beta
1 **2)*trial_stress_c_one(2)**2+(-9+2*beta**2)*trial_stress_c_o
1 ne(2)*trial_stress_c_one(3)+9*trial_stress_c_one(3)**2+beta**
1 2*trial_stress_c_one(3)**2+(-9+2*beta**2)*trial_stress_c_one(
1 1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+27*trial_str
1 ess_c_one(4)**2+27*trial_stress_c_one(5)**2+27*trial_stress_c
1 _one(6)**2)**(3/2))
dbcdstress(1,4) = -((3*(2*trial_stress_c_one(1)-trial_stress_
1 c_one(2)-trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c_on
1 e(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_str
1 ess_c_one(4))/(2*(trial_stress_c_one(1)**2+trial_stress_c_on
- 82 -
1 e(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial_st
1 ress_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)
1 +trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+t
1 rial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_stress
1 _c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one
1 (6)**2)**(3/2)))
dbcdstress(2,4) = -((3*(-trial_stress_c_one(1)+2*trial_stres
1 s_c_one(2)-trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c
1 _one(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_
1 stress_c_one(4))/(2*(trial_stress_c_one(1)**2+trial_stress_c
1 _one(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial
1 _stress_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one
1 (2)+trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1
1 )+trial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_str
1 ess_c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_o
1 ne(6)**2)**(3/2)))
dbcdstress(3,4) = -((3*(-trial_stress_c_one(1)-trial_stress
1 _c_one(2)+2*trial_stress_c_one(3)+2/9*beta**2*(trial_stress_
1 c_one(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial
1 _stress_c_one(4))/(2*(trial_stress_c_one(1)**2+trial_stress_
1 c_one(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+tria
1 l_stress_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_o
1 ne(2)+trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one
1 (1)+trial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_s
1 tress_c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c
1 _one(6)**2)**(3/2)))
dbcdstress(4,4) = -((9*trial_stress_c_one(4)**2)/(trial_stre
1 ss_c_one(1)**2+trial_stress_c_one(2)**2-trial_stress_c_one(2)
1 *trial_stress_c_one(3)+trial_stress_c_one(3)**2-trial_stress
1 _c_one(1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+1/9*b
1 eta**2*(trial_stress_c_one(1)+trial_stress_c_one(2)+trial_str
1 ess_c_one(3))**2+3*trial_stress_c_one(4)**2+3*trial_stress_c
1 _one(5)**2+3*trial_stress_c_one(6)**2)**(3/2))+3/sqrt(trial_
- 83 -
1 stress_c_one(1)**2+trial_stress_c_one(2)**2-trial_stress_c_on
1 e(2)*trial_stress_c_one(3)+trial_stress_c_one(3)**2-trial_st
1 ress_c_one(1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+1
1 /9*beta**2*(trial_stress_c_one(1)+trial_stress_c_one(2)+tria
1 l_stress_c_one(3))**2+3*trial_stress_c_one(4)**2+3*trial_str
1 ess_c_one(5)**2+3*trial_stress_c_one(6)**2)
dbcdstress(1,5) = -((3*(2*trial_stress_c_one(1)-trial_stress
1 _c_one(2)-trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c_o
1 ne(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_st
1 ress_c_one(5))/(2*(trial_stress_c_one(1)**2+trial_stress_c_on
1 e(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial_str
1 ess_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)
1 +trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+tr
1 ial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_stress
1 _c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one
1 (6)**2)**(3/2)))
dbcdstress(2,5) = -((3*(-trial_stress_c_one(1)+2*trial_stres
1 s_c_one(2)-trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c_
1 one(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_st
1 ress_c_one(5))/(2*(trial_stress_c_one(1)**2+trial_stress_c_o
1 ne(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial_st
1 ress_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)
1 +trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+tr
1 ial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_stress
1 _c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one(
1 6)**2)**(3/2)))
dbcdstress(3,5) = -((3*(-trial_stress_c_one(1)-trial_stress_c
1 _one(2)+2*trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c_o
1 ne(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_st
1 ress_c_one(5))/(2*(trial_stress_c_one(1)**2+trial_stress_c_o
1 ne(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial_s
1 tress_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one(
1 2)+trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+
- 84 -
1 trial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_stres
1 s_c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one
1 (6)**2)**(3/2)))
dbcdstress(4,5) = -((9*trial_stress_c_one(4)*trial_stress_c_
1 one(5))/(trial_stress_c_one(1)**2+trial_stress_c_one(2)**2-t
1 rial_stress_c_one(2)*trial_stress_c_one(3)+trial_stress_c_one
1 (3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)+trial_st
1 ress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+trial_stre
1 ss_c_one(2)+trial_stress_c_one(3))**2+3*trial_stress_c_one(4
1 )**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one(6)**2)**
1 (3/2))
dbcdstress(5,5) = -((9*trial_stress_c_one(5)**2)/(trial_stres
1 s_c_one(1)**2+trial_stress_c_one(2)**2-trial_stress_c_one(2)*
1 trial_stress_c_one(3)+trial_stress_c_one(3)**2-trial_stress_c
1 _one(1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+1/9*bet
1 a**2*(trial_stress_c_one(1)+trial_stress_c_one(2)+trial_stre
1 ss_c_one(3))**2+3*trial_stress_c_one(4)**2+3*trial_stress_c_
1 one(5)**2+3*trial_stress_c_one(6)**2)**(3/2))+3/sqrt(trial_s
1 tress_c_one(1)**2+trial_stress_c_one(2)**2-trial_stress_c_on
1 e(2)*trial_stress_c_one(3)+trial_stress_c_one(3)**2-trial_str
1 ess_c_one(1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+1/
1 9*beta**2*(trial_stress_c_one(1)+trial_stress_c_one(2)+trial_
1 stress_c_one(3))**2+3*trial_stress_c_one(4)**2+3*trial_stress
1 _c_one(5)**2+3*trial_stress_c_one(6)**2)
dbcdstress(1,6) = -((3*(2*trial_stress_c_one(1)-trial_stress
1 _c_one(2)-trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c_o
1 ne(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_st
1 ress_c_one(6))/(2*(trial_stress_c_one(1)**2+trial_stress_c_on
1 e(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial_str
1 ess_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)+
1 trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+tri
1 al_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_stress_c
1 _one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one(6)
- 85 -
1 **2)**(3/2)))
dbcdstress(2,6) = -((3*(-trial_stress_c_one(1)+2*trial_stres
1 s_c_one(2)-trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c_
1 one(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_s
1 tress_c_one(6))/(2*(trial_stress_c_one(1)**2+trial_stress_c_
1 one(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial_
1 stress_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one
1 (2)+trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1
1 )+trial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_st
1 ress_c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_
1 one(6)**2)**(3/2)))
dbcdstress(3,6) = -((3*(-trial_stress_c_one(1)-trial_stress_c
1 _one(2)+2*trial_stress_c_one(3)+2/9*beta**2*(trial_stress_c_o
1 ne(1)+trial_stress_c_one(2)+trial_stress_c_one(3)))*trial_st
1 ress_c_one(6))/(2*(trial_stress_c_one(1)**2+trial_stress_c_on
1 e(2)**2-trial_stress_c_one(2)*trial_stress_c_one(3)+trial_st
1 ress_c_one(3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)
1 +trial_stress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+tr
1 ial_stress_c_one(2)+trial_stress_c_one(3))**2+3*trial_stress_
1 c_one(4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one(6
1 )**2)**(3/2)))
dbcdstress(4,6) = -((9*trial_stress_c_one(4)*trial_stress_c
1 _one(6))/(trial_stress_c_one(1)**2+trial_stress_c_one(2)**2-
1 trial_stress_c_one(2)*trial_stress_c_one(3)+trial_stress_c_on
1 e(3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)+trial_s
1 tress_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+trial_str
1 ess_c_one(2)+trial_stress_c_one(3))**2+3*trial_stress_c_one(
1 4)**2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one(6)**2)
1 **(3/2))
dbcdstress(5,6) = -((9*trial_stress_c_one(5)*trial_stress_c_
1 one(6))/(trial_stress_c_one(1)**2+trial_stress_c_one(2)**2-tr
1 ial_stress_c_one(2)*trial_stress_c_one(3)+trial_stress_c_one
- 86 -
1 (3)**2-trial_stress_c_one(1)*(trial_stress_c_one(2)+trial_str
1 ess_c_one(3))+1/9*beta**2*(trial_stress_c_one(1)+trial_stress
1 _c_one(2)+trial_stress_c_one(3))**2+3*trial_stress_c_one(4)**
1 2+3*trial_stress_c_one(5)**2+3*trial_stress_c_one(6)**2)**(3/2)
1 )
dbcdstress(6,6) = -((9*trial_stress_c_one(6)**2)/(trial_stress
1 _c_one(1)**2+trial_stress_c_one(2)**2-trial_stress_c_one(2)*t
1 rial_stress_c_one(3)+trial_stress_c_one(3)**2-trial_stress_c
1 _one(1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+1/9*bet
1 a**2*(trial_stress_c_one(1)+trial_stress_c_one(2)+trial_stres
1 s_c_one(3))**2+3*trial_stress_c_one(4)**2+3*trial_stress_c_on
1 e(5)**2+3*trial_stress_c_one(6)**2)**(3/2))+3/sqrt(trial_stres
1 s_c_one(1)**2+trial_stress_c_one(2)**2-trial_stress_c_one(2)*t
1 rial_stress_c_one(3)+trial_stress_c_one(3)**2-trial_stress_c_
1 one(1)*(trial_stress_c_one(2)+trial_stress_c_one(3))+1/9*beta
1 **2*(trial_stress_c_one(1)+trial_stress_c_one(2)+trial_stress_
1 c_one(3))**2+3*trial_stress_c_one(4)**2+3*trial_stress_c_one(5)
1 **2+3*trial_stress_c_one(6)**2)
do i=1,6
do j=i,6
if(i .ne. j) then
dbcdstress(j,i) = dbcdstress(i,j)
endif
enddo
enddo
return
end
- 87 -
dimension trial_stress(3,3), devt_stress(3,3)
double precision sigma_b, alpha, beta,
1 mean, J2, p, q, F_function, B
mean = (trial_stress(1,1)+trial_stress(2,2)+trial_stress(3,3))
1 /3.0 !! "-" ???
do j=1,3
do k=1,3
devt_stress(j,k) = trial_stress(j,k)
enddo
devt_stress(j,j) = devt_stress(j,j) - mean
enddo
! check yield
J2 = 0.5*(devt_stress(1,1)**2.0 + devt_stress(2,2)**2.0 +
1 devt_stress(3,3)**2.0 ) + 2.0*devt_stress(1,2)**2.0 +
2 2.0*devt_stress(2,3)**2.0 + 2.0*devt_stress(3,1)**2.0
p = -mean
q = sqrt(3.0*J2)
B = sigma_b*sqrt(1.0+(alpha/3.0)**2.0)
F_function = sqrt(q**2.0 + (alpha**2.0) * (p**2.0)) - B
return
end
integer size
dimension C_mat(6,6), a_b(6), b_b(6)
- 88 -
dimension trial_stress(3,3)
dimension temp1(6), trial_stress_one(6)
integer i,j
double precision factor, temp2, temp3, hard, sigma_b
double precision A_p, F_function, dlamda, B_stress
size = 6
call C_matrix(relas,rpoi,C_mat)
! calculate a_b*C*b_b
call matrix_vector(6,6,C_mat,b_b,temp1)
call vector_vector(6,a_b,temp1,temp2)
! calculate A_b
trial_stress_one(1) = trial_stress(1,1)
trial_stress_one(2) = trial_stress(2,2)
trial_stress_one(3) = trial_stress(3,3)
trial_stress_one(4) = trial_stress(1,2)
trial_stress_one(5) = trial_stress(1,3)
trial_stress_one(6) = trial_stress(2,3)
call vector_vector(6,trial_stress_one, b_b, temp3)
A_p = hard * temp3 / sigma_b
! dlamda
dlamda = F_function/(temp2 + A_p)
- 89 -
subroutine C_matrix(relas,rpoi,C_mat)
include 'vaba_param.inc'
dimension C_mat(6,6)
double precision factor, relas, rpoi
integer i,j
do i=1,6
do j=1,6
C_mat(i,j) = 0.0
enddo
enddo
! write(6,*) C_mat(1,1)
return
end
- 90 -
subroutine cal_a_b(alpha, beta, a_b, b_b, trial_stress) !normal vector at
surface B
include 'vaba_param.inc'
parameter(x=3)
dimension a_b(6), b_b(6)
dimension trial_stress(x,x)
integer i, j
! write(6,*) "trial_stress"
! do i=1,3
! write(6,*) trial_stress(i,1), trial_stress(i,2), trial_stress(i,3)
! enddo
- 91 -
1 trial_stress(3,3)+2.0/9.0*alpha**2.0*(trial_stress
1 (1,1)+
2 trial_stress(2,2)+trial_stress(3,3)))/(2.0*
3 sqrt(trial_stress(1,1)**2.0+trial_stress(2,2)**2.0-
4 trial_stress(2,2)*trial_stress(3,3)+
5 trial_stress(3,3)**2.0-trial_stress(1,1)*
6 (trial_stress(2,2)+trial_stress(3,3))+1.0/9.0*alpha
1 **2.0*
7 (trial_stress(1,1)+trial_stress(2,2)+
8 trial_stress(3,3))**2.0+3.0*trial_stress(1,2)**2.0+
9 3.0*trial_stress(1,3)**2.0+3.0*trial_stress(2,3)
1 **2.0))
a_b(3) = (-trial_stress(1,1)-trial_stress(2,2)+
1 2.0*trial_stress(3,3)+2.0/9.0*alpha**2.0*
1 (trial_stress(1,1)+
2 trial_stress(2,2)+trial_stress(3,3)))/(2.0*
3 sqrt(trial_stress(1,1)**2.0+trial_stress(2,2)**2.0-
4 trial_stress(2,2)*trial_stress(3,3)+
5 trial_stress(3,3)**2.0-trial_stress(1,1)*
6 (trial_stress(2,2)+trial_stress(3,3))+1.0/9.0*
7 alpha**2.0*(trial_stress(1,1)+trial_stress(2,2)+
8 trial_stress(3,3))**2.0+3.0*trial_stress(1,2)**2.0
1 +3.0*
9 trial_stress(1,3)**2.0+3.0*trial_stress(2,3)**2.0))
a_b(4) = (3.0*trial_stress(1,2))/sqrt(trial_stress(1,1)**2.0+
1 trial_stress(2,2)**2.0-trial_stress(2,2)*
2 trial_stress(3,3)+trial_stress(3,3)**2.0-
3 trial_stress(1,1)*(trial_stress(2,2)+
4 trial_stress(3,3))+1.0/9.0*alpha**2.0*
1 (trial_stress(1,1)+
5 trial_stress(2,2)+trial_stress(3,3))**2.0+3.0*
6 trial_stress(1,2)**2.0+3.0*trial_stress(1,3)**2.0+
7 3.0*trial_stress(2,3)**2.0)
a_b(5) = (3.0*trial_stress(1,3))/sqrt(trial_stress(1,1)**2.0+
1 trial_stress(2,2)**2.0-trial_stress(2,2)*
2 trial_stress(3,3)+trial_stress(3,3)**2.0-
- 92 -
3 trial_stress(1,1)*(trial_stress(2,2)+
4 trial_stress(3,3))+1.0/9.0*alpha**2.0*
5 (trial_stress(1,1)+trial_stress(2,2)+
6 trial_stress(3,3))**2.0+3.0*trial_stress(1,2)**2.0+
7 3.0*trial_stress(1,3)**2.0+3.0*trial_stress(2,3)
1 **2.0)
a_b(6) = (3.0*trial_stress(2,3))/sqrt(trial_stress(1,1)**2.0+
1 trial_stress(2,2)**2.0-trial_stress(2,2)*
2 trial_stress(3,3)+trial_stress(3,3)**2.0-
3 trial_stress(1,1)*(trial_stress(2,2)+
4 trial_stress(3,3))+1.0/9.0*alpha**2.0*
1 (trial_stress(1,1)+
5 trial_stress(2,2)+trial_stress(3,3))**2.0+3.0*
6 trial_stress(1,2)**2.0+3.0*trial_stress(1,3)**2.0
1 +3.0*
7 trial_stress(2,3)**2.0)
b_b(1) = (2.0*trial_stress(1,1)-trial_stress(2,2)-
1 trial_stress(3,3)+2.0/9.0*beta**2.0*
1 (trial_stress(1,1)+
2 trial_stress(2,2)+trial_stress(3,3)))/(2.0*sqrt(
3 trial_stress(1,1)**2.0+trial_stress(2,2)**2.0-
4 trial_stress(2,2)*trial_stress(3,3)+
5 trial_stress(3,3)**2.0-trial_stress(1,1)*
6 (trial_stress(2,2)+trial_stress(3,3))+1.0/9.0*
7 beta**2.0*(trial_stress(1,1)+trial_stress(2,2)+
8 trial_stress(3,3))**2.0+3.0*trial_stress(1,2)**2.0+
9 3.0*trial_stress(1,3)**2.0+3.0*trial_stress(2,3)
1 **2.0))
b_b(2) = (-trial_stress(1,1)+2.0*trial_stress(2,2)-
1 trial_stress(3,3)+2.0/9.0*beta**2.0*
1 (trial_stress(1,1)+
- 93 -
2 trial_stress(2,2)+trial_stress(3,3)))/
3 (2.0*sqrt(trial_stress(1,1)**2.0+
1 trial_stress(2,2)**2.0-
4 trial_stress(2,2)*trial_stress(3,3)+
5 trial_stress(3,3)**2.0-trial_stress(1,1)*
6 (trial_stress(2,2)+trial_stress(3,3))+
7 1.0/9.0*beta**2.0*(trial_stress(1,1)+
1 trial_stress(2,2)+
8 trial_stress(3,3))**2.0+3.0*trial_stress(1,2)**2.0+
9 3.0*trial_stress(1,3)**2.0+
1 3.0*trial_stress(2,3)**2.0))
b_b(3) = (-trial_stress(1,1)-trial_stress(2,2)+2.0*
1 trial_stress(3,3)+2.0/9.0*beta**2.0*
1 (trial_stress(1,1)+
2 trial_stress(2,2)+trial_stress(3,3)))/
3 (2.0*sqrt(trial_stress(1,1)**2.0+
1 rial_stress(2,2)**2.0-
4 trial_stress(2,2)*trial_stress(3,3)+
5 trial_stress(3,3)**2.0-trial_stress(1,1)*
6 (trial_stress(2,2)+trial_stress(3,3))+
7 1.0/9.0*beta**2.0*(trial_stress(1,1)+
1 trial_stress(2,2)+
8 trial_stress(3,3))**2.0+3.0*trial_stress(1,2)**2.0+
9 3.0*trial_stress(1,3)**2.0+3.0*
1 trial_stress(2,3)**2.0))
b_b(4) = (3.0*trial_stress(1,2))/sqrt(trial_stress(1,1)**2.0+
1 trial_stress(2,2)**2.0-trial_stress(2,2)*
2 trial_stress(3,3)+trial_stress(3,3)**2.0-
3 trial_stress(1,1)*(trial_stress(2,2)+
4 trial_stress(3,3))+1.0/9.0*beta**2.0*
1 (trial_stress(1,1)+
5 trial_stress(2,2)+trial_stress(3,3))**2.0+
6 3.0*trial_stress(1,2)**2.0+3.0*
1 trial_stress(1,3)**2.0+
7 3.0*trial_stress(2,3)**2.0)
b_b(5) = (3.0*trial_stress(1,3))/sqrt(trial_stress(1,1)**2.0+
- 94 -
1 trial_stress(2,2)**2.0-trial_stress(2,2)*
2 trial_stress(3,3)+trial_stress(3,3)**2.0-
3 trial_stress(1,1)*(trial_stress(2,2)+
4 trial_stress(3,3))+1.0/9.0*beta**2.0*
1 (trial_stress(1,1)+
5 trial_stress(2,2)+trial_stress(3,3))**2.0+
6 3.0*trial_stress(1,2)**2.0+3.0*
1 trial_stress(1,3)**2.0+
7 3.0*trial_stress(2,3)**2.0)
b_b(6) = (3.0*trial_stress(2,3))/sqrt(trial_stress(1,1)**2.0+
1 trial_stress(2,2)**2.0-trial_stress(2,2)*
2 trial_stress(3,3)+trial_stress(3,3)**2.0-
3 trial_stress(1,1)*(trial_stress(2,2)+
4 trial_stress(3,3))+1.0/9.0*beta**2.0*
5 (trial_stress(1,1)+trial_stress(2,2)+
6 trial_stress(3,3))**2.0+3.0*trial_stress(1,2)**2.0+
7 3.0*trial_stress(1,3)**2.0+3.0*
1 trial_stress(2,3)**2.0)
! write(6,*) "trial_stress"
! write(6,*) trial_stress(1,1)
! write(6,*) trial_stress(2,2)
! write(6,*) trial_stress(3,3)
! write(6,*) trial_stress(1,2)
! write(6,*) trial_stress(1,3)
! write(6,*) trial_stress(2,3)
! write(6,*) "alpha beta!!"
! write(6,*) alpha
! write(6,*) beta
! write(6,*) "a_b b_b"
! write(6,*) a_b(1)
! write(6,*) b_b(1)
! do i=1,6
! write(6,*) alpha, beta, a_b(1), b_b(1)
- 95 -
! enddo
return
end
c
parameter(zero=0.d0)
! do k1=1,5
! write(6,*) "yyy", table(1,k1), table(2,k1)
! enddo
do k1=1, (nprops-nnprops)/2
if(eqplas .lt. table(2,k1+1)) then
deqpl = table(2,k1+1) - table(2,k1)
dsyield = table(1,k1+1) - table(1,k1)
hard = dsyield / deqpl
syield = table(1,k1) + (eqplas-table(2,k1))*hard
! write(6,*) "ss", eqplas
! write(6,*) "ss", deqpl, table(2,k1+1), table(2,k1)
! write(6,*) "ss", dsyield, table(1,k1+1), table(1,k1)
! write(6,*) "ss", hard, dsyield, deqpl
! write(6,*) "ss", syield, table(1,k1), (eqplas-table(2,k1))*hard
- 96 -
goto 10
endif
enddo
10 continue
return
end
subroutine matrix_matrix(a,b,c,aa,bb,cc)
integer a,b,c,i,j,k
dimension aa(a,b)
dimension bb(b,c)
dimension cc(a,c)
do i=1,a
do j=1,c
cc(i,j) = 0.0
do k=1,b
cc(i,j) = cc(i,j) + aa(i,k) * bb(k,j)
enddo
enddo
enddo
return
end
subroutine matrix_vector(a,b,aa,bb,cc)
integer a,b,i,j,k
dimension aa(a,b)
dimension bb(b)
dimension cc(a)
do i=1,a
- 97 -
cc(i) = 0.0
do k=1,b
cc(i) = cc(i)+ aa(i,k) * bb(k)
enddo
enddo
return
end
subroutine vector_matrix(b,c,aa,bb,cc)
integer b,c,i,j,k
dimension aa(b)
dimension bb(b,c)
dimension cc(c)
do j=1,c
cc(j) = 0.0
do k=1,b
cc(j) = cc(j) + aa(k) * bb(k,j)
enddo
enddo
return
end
subroutine vector_vector(a,aa,bb,cc)
integer a,i,j,k
double precision cc
dimension aa(a)
dimension bb(a)
cc = 0.0
do k=1,a
cc = cc + aa(k) * bb(k)
enddo
return
- 98 -
end
● 요약
- 본 2차년도 연구에서는 거시 다공질 매체에 대한 에너지하비스팅을 위한 탄소성 모델
을 선정하여 ABAQUS를 통화여 해석을 진행하였다. 연구원들이 변형에너지에서 에너지를
흡수하기 가장 좋은 조건의 모델은 Crushable Foam 모델이라고 결정하였고 이에 대한 기
본연구를 위하여 해석을 할 수 있는 ABAQUS의 input파일을 생성하였고, 추가적으로 에너
지 변화에 대한 구성모델 접목을 위한 VUMAT 코드를 개발하였다.
* 기존개획대비 미흡한 점 :
- 본 연구에서는 거시영역에 대한 에너지 흡수 모델에 대해 진행되었다. 연구 참여자들
은 Crushable Foam 모델이 에너지 흡수에 가장 적합한 모델이라고 생각하여 거시상태에
서의 거동을 해석하였다. Crushable Foam 모델은 거시다공질매체와도 연관성이 매우 깊
은데, 다공성이 존재하는 미시다공질 매체를 거시적인 관점에서 바라보면 Crushable
Foam 모델의 거동과 거의 흡사하게된다. 그러나 본 연구에서는 VUMAT 코드에서 열발생에
따른 전기에너지 변화에 관한 항목은 제외된 상태이다. 에너지 흡수까지는 연구가 진행
되었으나 이에 따른 열발생과 전기에너지로의 변환기술은 구성모델이 완성되어야 해결
가능하기 때문이다. 추후 연구에서는 이러한 문제점들을 해결하기 위해 앞에서 제시한
실험을 통한 구성모델을 성립하고 적용하고자 하는 노력을 하려고 한다.
다. 2차 년도 연구결과 정리
- 2차년도에서는 미시 다공질 매체에서의 유체 유동과 관련한 연구가 수행되었음. 이를 위해
우선적으로 SPH라는 코드 개발을 통하여 미시 다공질 매체내에서 유체유동 시뮬레이션이 가
능하였음.
- 추가로 거시다공질 매체에 대한 에너지 흡수 모델을 위하여 Crushable Foam 모델에 대한
구성방정식에 관한 VUMAT 코드가 완성되었음. 탄소성 이론에 비추어 Crushable Foam 모델
- 99 -
은 거시 다공질 매체에서 에너지 흡수 메커니즘과 유사하여 선택하게 되었음. 또한 ABAQUS
라는 상용프로그램을 이용하여 개발한 VUMAT 코드를 검증하였음.
- 그러나 1차년도와 마찬가지로 열발생과 관련한 해석은 진행이 안되었음. 고체와 유체간의
연성해석을 통하여 열역학적 접근방법이 제안되어야 하지만, 구성모델을 개발하는데 있어서
실험적 결과가 필수적임을 연구를 수행하는 도중에 깨달았음. 추후 매우 순수한 재료간의 물
리-열역학적 규명을 통하여 구성모델이 검증된다면 지금까지 연구되어졌던 이론적 방법과
수치해석적 방법의 접목이 가능할 것으로 예상됨.
1. 목표 달성도
1차년도 단위성과 계획
① Finite Element Code 개발
② 다공질 매체에 대한 역학-전기 구성모델 적용 프로그램
1차년도 단위성과 달성도
① Finite Element Code 개발
- 거시영역에서의 다공질 매체를 해석하기 위한 FEM 코드가 개발되었음.
- 해석의 속도 증대를 위한 병렬알고리즘이 추가로 개발되었음.
- 결과의 정확성은 기존 상용프로그램과 비교하여 우수성이 입증되었음.
② 다공질 매체에 대한 역학-전기 구성모델 적용 프로그램
- 역학-전기 구성모델을 유도하기 위한 기본 연구로 압전모델에 대한 수치해석 기법을
개발하고 시뮬레이션 하였음.
- 운동량 에너지를 이용한 방법은 본 과제에서 수행하고자 하는 열전과 지배방정식이
유사하고 상호 적용이 가능함.
- 현재 다공질 매체 내에서의 역학적 구성모델은 완성된 상태이나 전기변화에 대한 구
성모델은 개발 중에 있음.
2차년도 단위성과 계획
① 나노다공체 이론적 정립
- 미시 다공질 매체 내에서의 유체유동에 관한 SPH 프로그램이 완성되었다.
- 다량의 SPH 입자들을 해석하기 위한 병렬알고리즘을 프로그램에 적용하였다.
- 열발생을 위한 고체-유체 연성해석은 현재 연구가 진행 중에 있다.
② 에너지 증폭 모델 제안
- 거시 다공질 매체에서의 에너지 흡수를 위한 Crushable Foam 모델에 대한 ABAQUS
의 VUMAT 코딩을 완성하였다.
- 에너지 흡수와 열에너지 발생과의 관계를 규명하고 에너지 증폭을 위한 구성모델 유
도는 현재 진행 중에 있다.
- 100 -
달성도 설명:
- 본 연구과제에서는 다공질 매체의 미시와 거시 두 영역으로 나누어 구성 성분에 따라 해
석을 진행하였음.
- 1차 년도는 고체입자에 대한 미시와 거시 다공질 매체에서의 해석이 진행되었고, 2차 년
도에서는 유체입자에 대한 미시 다공질 매체에서의 해석과 거시 다공질 매체에서의 해석
이 진행되었음.
- 그러나 최종 목표인 에너지 하비스팅과 관련한 기술은 다음과 같은 원인으로 연구기간 2
년 내에 완성이 힘들었음(현재 연구는 지속적으로 수행)
원인 ① 미시 고체입자까리의 충돌에 의한 열 발생 구성모델 성립은 기존에 이론식에 대
한 접근으로 완성하고자 하였음. 그러나 연구를 진행함에 있어서 구성모델은 실
험식을 통하여완성되어야 하는 한계에 직면하였음. 실험식은 기존 문헌을 이용
하여 해결하고자 하였으나 미시 다공질 매체에서의 순수한 고체입자간의 충돌에
관한 식은 현재 존재하고 있지 않음.
원인 ② 미시 고체입자와 유체입자간의 접촉에 의한 열 발생 메커니즘 또한 원인①에 의
해 에너지 흡수모델이 완성이 늦어지고 있음. 고체와 유체와의 연성관계에서는
liquid bridge 모델과 수분점착력에 관련한 구성모델을 완성하여야 하나 이 또한
거시상태에서의 실험모델과 역해석을 통하여 구성모델을 완성해야 하는 한계가
있었음.
원인 ③ 에너지 흡수와 전기에너지로의 변환은 결국 미시다공질매체에서 거시다공질매체
로의 연결모델의 완성인데, 멀티스케일 기술 개발을 통하여 완성되어야 함. 그
러나 미시다공질 매체에서의 유체유동에 의한 열 발생 및 흡수에 관한 구성모델
이 완성되어 있지 않은 상태에서 거시로의 요소 정보전달 알고리즘을 구현하기
가 힘들었음.
2. 관련 분야 기여도
- 개발된 소프트웨어는 다공질 매체 뿐만 아니라 고체의 해석에서도 매우 정확하고 빠른
결과 값을 제공한다. 그러므로 향후 프로그램의 완성도가 다듬어지면 국산화가 가능할
것으로 예상된다.
- 101 -
제5장. 연구개발성과의 활용계획
·현장적용 방안
- 본 기술개발을 통하여 개발되는 에너지 하베스팅 기술은 최근 공기업 및 사기업에서 개
발하고 있는 제로에너지 건축물에 테스트베드로 적용 할 수 있다.
- 또한 표면적이 넓은 토목 구조물들에 적용이 가능함으로, 나노다공질 재료가 적용된 교
량의 댐퍼, 도로표면의 온도차, 터널의 온도차 등을 통하여 하베스팅이 가능하다.
·실용화·제품화 방안
- 본 연구개발 결과물로 발생되는 나노・다공질 소재를 이용한 열-전기변환 시스템을 신기
술 지정신청, 특허기술 출원・등록을 실시하고, 차후 기업에 대한 기술이전을 통해 실용
화 및 제품화를 추진할 계획이다.
·후속연구 방안
- 본 연구를 통한 약 2년간의 연구를 통하여 현재 약 1%의 에너지 하베스팅 효율을 10%
이상으로 향상시켜 실용화하고, 향후 후속연구를 통하여 에너지 하베스팅의 효율을 대폭
개선하기 위한 후속연구를 추진할 예정이다.
- 102 -
제9장. 연구개발과제 수행에 따른 연구실 등의 안전 조치 이행 실적
- 103 -
주 의
210mm×297mm[백상지(80g/㎡) 또는 중질지(80g/㎡)]
- 104 -