#include<stdio.h>
//fuel 10개 1cm reflector 35개 0.2cm
//좌변의 행렬 값 5개 영역으로 구분
#define X 45
#define f11 1.469
#define f12 -1.414
#define f21 -0.712
#define f22 1.469
#define f23 -0.712
#define f31 -1.187
#define f32 1.904
#define f33 -0.683
#define f41 -2.05
#define f42 4.13
#define f43 -2.05
#define f51 -4.1
#define f52 10004.134
#define t11 8.73
#define t12 16.26
#define t21 -8.13
#define t22 16.86
#define t23 -8.13
#define t31 -0.542
#define t32 1.12
#define t33 -0.575
#define t41 -1.725
#define t42 1.728
#define t43 -1.725
#define t51 -3.45
#define t52 10003.453
int main( void ) {
//변수 선언
double A[ X] [ X] , B[ X] [ X] , C[ X] [ X] , D[ X] [ X] , E[ X] [ X] ; //매트릭스 선언
double f1[ X] , f2[ X] , t1[ X] , t2[ X] , k1= 1 , k2= 1 ; //플럭스 선언,k 선언
double iterf= 0 , itert= 0 , s1, s2, f[ X] , t[ X] ; //iteration과정을 표현하기 위한 변수
double nextn= 0 , initn= 0 ; //neutron비교 위한 것
double aek= 0 , aef[ X] , aet[ X] , maxf= 9999999 , maxt= 9999999 ; //오차비교를 위한 것
int i= 0 , j= 0 , k= 0 ; //iteration을 위한 변수
//flux의 초기화와 initial guess
for ( i = 0 ; i < X; i++ ) { f1[ i] = 1 , t1[ i] = 1 , f2[ i] = 1 , t2[ i] = 1 ; }
// 이제부터 matrix A(fast)
A[ 0 ] [ 0 ] = f11, A[ 0 ] [ 1 ] = f12;
A[ 9 ] [ 8 ] = f31, A[ 9 ] [ 9 ] = f32, A[ 9 ] [ 10 ] = f33;
A[ 44 ] [ 43 ] = f51, A[ 44 ] [ 44 ] = f52;
for ( i = 1 ; i < 9 ; i++ )
{
A[ i] [ i - 1 ] = f21, A[ i] [ i] = f22, A[ i] [ i + 1 ] = f23;
}
for ( i = 10 ; i < 44 ; i++ )
{
A[ i] [ i - 1 ] = f41, A[ i] [ i] = f42, A[ i] [ i + 1 ] = f43;
}
// 이제부터 MATRiX B, C(fast)
for ( i = 0 ; i < 10 ; i++ )
{
B[ i] [ i] = 0.03758 , C[ i] [ i] = 1.158 ;
}
// 이제부터 matrix D(thermal)
D[ 0 ] [ 0 ] = t11, D[ 0 ] [ 1 ] = t12;
D[ 9 ] [ 8 ] = t31, D[ 9 ] [ 9 ] = t32, D[ 9 ] [ 10 ] = t33;
D[ 44 ] [ 43 ] = t51, D[ 44 ] [ 44 ] = t52;
for ( i = 1 ; i < 9 ; i++ )
{
D[ i] [ i - 1 ] = t21, D[ i] [ i] = t22, D[ i] [ i + 1 ] = t23;
}
for ( i = 10 ; i < 44 ; i++ )
{
D[ i] [ i - 1 ] = t41, D[ i] [ i] = t42, D[ i] [ i + 1 ] = t43;
}
// 이제부터 matrix E(thermal)
for ( i = 0 ; i < 10 ; i++ )
{
E[ i] [ i] = 0.001098 ;
}
for ( i = 10 ; i < 45 ; i++ )
{
E[ i] [ i] = 0.03443 ;
}
// 식을 돌립시다
do {
for ( i = 0 ; i < X; i++ ) { f1[ i] = f2[ i] , t1[ i] = t2[ i] }
k1= k2;
for ( i= 0 ; i< 45 ; i++ ) {
s1= ( B[ i] [ i] * f1[ i] + C[ i] [ i] * t1[ i] ) / k1;
for ( j= 0 ; j< 45 ; j++ ) {
if ( j!= i)
{ iterf= iterf+ A[ i] [ j] * f2[ i] ;
}
}
for ( k= 0 ; k< 45 ; k++ ) {
if ( k== i) {
f[ k] = ( s1- iterf) / A[ i] [ i] ;
}
else {
f[ k] = f2[ k] ;
}
}
f2[ i] = f[ i] ;
itert= 0 ;
}
//구해진 f2를 가지고 이제 2그룹으로 간다.
for ( i= 0 ; i< 45 ; i++ ) {
s2= E[ i] [ i] * f2[ i] ;
for ( j= 0 ; j< 45 ; j++ ) {
if ( j!= i) {
itert= itert+ D[ i] [ j] * t2[ i] ;
}
}
for ( k= 0 ; k< 45 ; j++ ) {
if ( k== i) {
t[ k] = ( s2- itert) / D[ i] [ i] ;
}
else {
t[ k] = t2[ k] ;
}
}
t2[ i] = t[ i] ;
itert= 0 ;
}
//이제 새롭게 구해진 t2와 f2로 k값 비교 한다.(iteration 할 때 다시 nextn, intn이 0이 되도록 만들어야 함)
nextn= 0 ;
initn= 0 ;
for ( i= 0 ; i< 45 ; i++ ) {
nextn= nextn + ( B[ i] [ i] * f2[ i] + C[ i] [ i] * t2[ i] ) ;
initn= initn + ( B[ i] [ i] * f1[ i] + C[ i] [ i] * t1[ i] ) ;
}
k2= k1* ( nextn/ initn) ; //k2값 정의
aek= ( k2- k1) / k2 ;
if ( aek< 0 )
{ aek= ( - 1 ) * aek; } //양수화
//플럭스의 오차와 양수화
for ( i= 0 ; i< 45 ; i++ ) {
aef[ i] = ( f2[ i] - f1[ i] ) / f2[ i] ;
aet[ i] = ( t2[ i] - t1[ i] ) / t2[ i] ;
if ( aef[ i] < 0 )
{ aef[ i] = ( - 1 ) * aef[ i] ; }
if ( aet[ i] < 0 )
{ aet[ i] = ( - 1 ) * aet[ i] ; }
}
for ( i= 0 ; i< 45 ; i++ )
{
if ( aef[ i] >= maxf) {
maxf= aef[ i] ;
}
if ( aet[ i] >= maxt) {
maxt= aet[ i] ;
}
f1[ i] = f2[ i] ;
t1[ i] = t2[ i] ;
k1= k2; }
} while ( aek< 0.001 & maxf< 0.001 & maxt< 0.001 ) ;
printf ( "\n The Solution is : \n " ) ; for ( i = 0 ; i < 45 ; i++ ) {
printf ( "\n F(%d) = %f\n " , i
, f2
[ i
] ) ; printf ( "\n T(%d) = %f\n " , i
, t2
[ i
] ) ; }
}
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KLy9mdWVsIDEw6rCcIDFjbSByZWZsZWN0b3IgMzXqsJwgMC4yY20KLy/soozrs4DsnZgg7ZaJ66CsIOqwkiA16rCcIOyYgeyXreycvOuhnCDqtazrtoQKI2RlZmluZSBYIDQ1IAojZGVmaW5lIGYxMSAxLjQ2OQojZGVmaW5lIGYxMiAtMS40MTQKI2RlZmluZSBmMjEgLTAuNzEyCiNkZWZpbmUgZjIyIDEuNDY5CiNkZWZpbmUgZjIzIC0wLjcxMgojZGVmaW5lIGYzMSAtMS4xODcKI2RlZmluZSBmMzIgMS45MDQKI2RlZmluZSBmMzMgLTAuNjgzCiNkZWZpbmUgZjQxIC0yLjA1CiNkZWZpbmUgZjQyIDQuMTMKI2RlZmluZSBmNDMgLTIuMDUKI2RlZmluZSBmNTEgLTQuMQojZGVmaW5lIGY1MiAxMDAwNC4xMzQKI2RlZmluZSB0MTEgOC43MwojZGVmaW5lIHQxMiAxNi4yNgojZGVmaW5lIHQyMSAtOC4xMwojZGVmaW5lIHQyMiAxNi44NgojZGVmaW5lIHQyMyAtOC4xMwojZGVmaW5lIHQzMSAtMC41NDIKI2RlZmluZSB0MzIgMS4xMgojZGVmaW5lIHQzMyAtMC41NzUKI2RlZmluZSB0NDEgLTEuNzI1CiNkZWZpbmUgdDQyIDEuNzI4CiNkZWZpbmUgdDQzIC0xLjcyNQojZGVmaW5lIHQ1MSAtMy40NQojZGVmaW5lIHQ1MiAxMDAwMy40NTMKaW50IG1haW4odm9pZCl7Ci8v67OA7IiYIOyEoOyWuApkb3VibGUgQVtYXVtYXSwgQltYXVtYXSwgQ1tYXVtYXSwgRFtYXVtYXSwgRVtYXVtYXTsgLy/rp6Ttirjrpq3siqQg7ISg7Ja4CmRvdWJsZSBmMVtYXSwgZjJbWF0sIHQxW1hdLCB0MltYXSxrMT0xLCBrMj0xOyAvL+2UjOufreyKpCDshKDslrgsayDshKDslrgKZG91YmxlIGl0ZXJmPTAsIGl0ZXJ0PTAsIHMxLCBzMiwgZltYXSwgdFtYXTsgLy9pdGVyYXRpb27qs7zsoJXsnYQg7ZGc7ZiE7ZWY6riwIOychO2VnCDrs4DsiJgKZG91YmxlIG5leHRuPTAsIGluaXRuPTA7IC8vbmV1dHJvbuu5hOq1kCDsnITtlZwg6rKDCmRvdWJsZSBhZWs9MCwgYWVmW1hdLCBhZXRbWF0sIG1heGY9OTk5OTk5OSwgbWF4dD05OTk5OTk5OyAvL+yYpOywqOu5hOq1kOulvCDsnITtlZwg6rKDCmludCBpPTAsaj0wLGs9MDsgLy9pdGVyYXRpb27snYQg7JyE7ZWcIOuzgOyImCAKIAovL2ZsdXjsnZgg7LSI6riw7ZmU7JmAIGluaXRpYWwgZ3Vlc3MKZm9yIChpID0gMDsgaSA8IFg7IGkrKykgeyBmMVtpXSA9IDEsIHQxW2ldID0gMSwgZjJbaV0gPSAxLCB0MltpXSA9IDE7IH0KIAogLy8g7J207KCc67aA7YSwIG1hdHJpeCBBKGZhc3QpCiAgIEFbMF1bMF0gPSBmMTEsIEFbMF1bMV0gPSBmMTI7CiAgIEFbOV1bOF0gPSBmMzEsIEFbOV1bOV0gPSBmMzIsIEFbOV1bMTBdID0gZjMzOwogICBBWzQ0XVs0M10gPSBmNTEsIEFbNDRdWzQ0XSA9IGY1MjsKICAgZm9yIChpID0gMTsgaSA8IDk7IGkrKykKICAgewogICAgICBBW2ldW2kgLSAxXSA9IGYyMSwgQVtpXVtpXSA9IGYyMiwgQVtpXVtpICsgMV0gPSBmMjM7CiAgIH0KICAgZm9yIChpID0gMTA7IGkgPCA0NDsgaSsrKQogICB7CiAgICAgIEFbaV1baSAtIDFdID0gZjQxLCBBW2ldW2ldID0gZjQyLCBBW2ldW2kgKyAxXSA9IGY0MzsKICAgfQogICAvLyDsnbTsoJzrtoDthLAgTUFUUmlYIEIsIEMoZmFzdCkKICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAgIHsKICAgICAgQltpXVtpXSA9IDAuMDM3NTgsIENbaV1baV0gPSAxLjE1ODsKICAgfQogICAvLyDsnbTsoJzrtoDthLAgbWF0cml4IEQodGhlcm1hbCkKICAgRFswXVswXSA9IHQxMSwgRFswXVsxXSA9IHQxMjsKICAgRFs5XVs4XSA9IHQzMSwgRFs5XVs5XSA9IHQzMiwgRFs5XVsxMF0gPSB0MzM7CiAgIERbNDRdWzQzXSA9IHQ1MSwgRFs0NF1bNDRdID0gdDUyOwogICBmb3IgKGkgPSAxOyBpIDwgOTsgaSsrKQogICB7CiAgICAgIERbaV1baSAtIDFdID0gdDIxLCBEW2ldW2ldID0gdDIyLCBEW2ldW2kgKyAxXSA9IHQyMzsKICAgfQogICBmb3IgKGkgPSAxMDsgaSA8IDQ0OyBpKyspCiAgIHsKICAgICAgRFtpXVtpIC0gMV0gPSB0NDEsIERbaV1baV0gPSB0NDIsIERbaV1baSArIDFdID0gdDQzOwogICB9CiAgIC8vIOydtOygnOu2gO2EsCBtYXRyaXggRSh0aGVybWFsKQogICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKICAgewogICAgICBFW2ldW2ldID0gMC4wMDEwOTg7CiAgIH0KICAgZm9yIChpID0gMTA7IGkgPCA0NTsgaSsrKQogICB7CiAgICAgIEVbaV1baV0gPSAwLjAzNDQzOwogICB9CiAgIC8vIOyLneydhCDrj4zrpr3si5zri6QKIApkb3sKZm9yIChpID0gMDsgaSA8IFg7IGkrKykgeyBmMVtpXSA9IGYyW2ldLCB0MVtpXSA9IHQyW2ldIH0KazE9azI7Cgpmb3IoaT0wO2k8NDU7aSsrKXsKCXMxPShCW2ldW2ldKmYxW2ldK0NbaV1baV0qdDFbaV0pL2sxOwoJZm9yKGo9MDtqPDQ1O2orKyl7CgkJaWYoaiE9aSkKCQl7CWl0ZXJmPWl0ZXJmK0FbaV1bal0qZjJbaV07CgkJfQoJCX0KCWZvcihrPTA7azw0NTtrKyspewoJCWlmKGs9PWkpewoJCWZba109KHMxLWl0ZXJmKS9BW2ldW2ldOwoJCX0KCQllbHNlewoJCWZba109ZjJba107CgkJfQoJCX0KCQlmMltpXT1mW2ldOwoJCWl0ZXJ0PTA7CgkJfQogCi8v6rWs7ZW07KeEIGYy66W8IOqwgOyngOqzoCDsnbTsoJwgMuq3uOujueycvOuhnCDqsITri6QuCmZvcihpPTA7aTw0NTtpKyspewoJczI9RVtpXVtpXSpmMltpXTsKCWZvcihqPTA7ajw0NTtqKyspewoJCWlmKGohPWkpewoJCQlpdGVydD1pdGVydCtEW2ldW2pdKnQyW2ldOwoJCQl9CgkJfQoJZm9yKGs9MDtrPDQ1O2orKyl7CgkJaWYoaz09aSl7CgkJdFtrXT0oczItaXRlcnQpL0RbaV1baV07CgkJfQoJCWVsc2V7CgkJdFtrXT10MltrXTsKCQl9CgkJfQoJCXQyW2ldPXRbaV07CgkJaXRlcnQ9MDsKCQl9Ci8v7J207KCcIOyDiOuhreqyjCDqtaztlbTsp4QgdDLsmYAgZjLroZwga+qwkiDruYTqtZAg7ZWc64ukLihpdGVyYXRpb24g7ZWgIOuVjCDri6Tsi5wgbmV4dG4sIGludG7snbQgMOydtCDrkJjrj4TroZ0g66eM65Ok7Ja07JW8IO2VqCkKbmV4dG49MDsKaW5pdG49MDsKZm9yKGk9MDtpPDQ1O2krKyl7Cm5leHRuPW5leHRuICsoQltpXVtpXSpmMltpXStDW2ldW2ldKnQyW2ldKTsKaW5pdG49aW5pdG4gKyAoQltpXVtpXSpmMVtpXStDW2ldW2ldKnQxW2ldKTsKfQprMj1rMSoobmV4dG4vaW5pdG4pOyAvL2sy6rCSIOygleydmAphZWs9KGsyLWsxKS9rMiA7CiAKaWYoYWVrPDApCgl7YWVrPSgtMSkqYWVrO30gLy/slpHsiJjtmZQKIAovL+2UjOufreyKpOydmCDsmKTssKjsmYAg7JaR7IiY7ZmUCmZvcihpPTA7aTw0NTtpKyspewphZWZbaV09KGYyW2ldLWYxW2ldKS9mMltpXTsKYWV0W2ldPSh0MltpXS10MVtpXSkvdDJbaV07CmlmKGFlZltpXTwwKQoJeyBhZWZbaV09KC0xKSphZWZbaV07fQogCmlmKGFldFtpXTwwKQoJe2FldFtpXT0oLTEpKmFldFtpXTt9Cgp9CiAKIApmb3IoaT0wO2k8NDU7aSsrKQoJewoJaWYoYWVmW2ldPj1tYXhmKXsKCQltYXhmPWFlZltpXTsKCX0KCWlmKGFldFtpXT49bWF4dCl7CgkJbWF4dD1hZXRbaV07Cgl9CglmMVtpXT1mMltpXTsKCXQxW2ldPXQyW2ldOwoJazE9azI7fQoKfXdoaWxlIChhZWs8MC4wMDEgJiBtYXhmPDAuMDAxICYgbWF4dDwwLjAwMSk7IAoKCXByaW50ZigiXG5UaGUgU29sdXRpb24gaXMgOiBcbiIpOwogICAgICBwcmludGYoIlxuaz0lZiBcbiIsIGsyKTsKICAgICAgZm9yIChpID0gMDsgaSA8IDQ1OyBpKyspIHsKICAgICAgICAgcHJpbnRmKCJcbkYoJWQpID0gJWZcbiIsIGksIGYyW2ldKTsKICAgICAgICAgcHJpbnRmKCJcblQoJWQpID0gJWZcbiIsIGksIHQyW2ldKTsKICAgICAgfQoJfQoJCiByZXR1cm4gMDsKfQ==