fork download
  1. #include<stdio.h>
  2. //fuel 10개 1cm reflector 35개 0.2cm
  3. //좌변의 행렬 값 5개 영역으로 구분
  4. #define X 45
  5. #define f11 1.469
  6. #define f12 -1.414
  7. #define f21 -0.712
  8. #define f22 1.469
  9. #define f23 -0.712
  10. #define f31 -1.187
  11. #define f32 1.904
  12. #define f33 -0.683
  13. #define f41 -2.05
  14. #define f42 4.13
  15. #define f43 -2.05
  16. #define f51 -4.1
  17. #define f52 10004.134
  18. #define t11 8.73
  19. #define t12 16.26
  20. #define t21 -8.13
  21. #define t22 16.86
  22. #define t23 -8.13
  23. #define t31 -0.542
  24. #define t32 1.12
  25. #define t33 -0.575
  26. #define t41 -1.725
  27. #define t42 1.728
  28. #define t43 -1.725
  29. #define t51 -3.45
  30. #define t52 10003.453
  31. int main(void){
  32. //변수 선언
  33. double A[X][X], B[X][X], C[X][X], D[X][X], E[X][X]; //매트릭스 선언
  34. double f1[X], f2[X], t1[X], t2[X],k1=1, k2=1; //플럭스 선언,k 선언
  35. double iterf=0, itert=0, s1, s2, f[X], t[X]; //iteration과정을 표현하기 위한 변수
  36. double nextn=0, initn=0; //neutron비교 위한 것
  37. double aek=0, aef[X], aet[X], maxf=9999999, maxt=9999999; //오차비교를 위한 것
  38. int i=0,j=0,k=0; //iteration을 위한 변수
  39.  
  40. //flux의 초기화와 initial guess
  41. for (i = 0; i < X; i++) { f1[i] = 1, t1[i] = 1, f2[i] = 1, t2[i] = 1; }
  42.  
  43. // 이제부터 matrix A(fast)
  44. A[0][0] = f11, A[0][1] = f12;
  45. A[9][8] = f31, A[9][9] = f32, A[9][10] = f33;
  46. A[44][43] = f51, A[44][44] = f52;
  47. for (i = 1; i < 9; i++)
  48. {
  49. A[i][i - 1] = f21, A[i][i] = f22, A[i][i + 1] = f23;
  50. }
  51. for (i = 10; i < 44; i++)
  52. {
  53. A[i][i - 1] = f41, A[i][i] = f42, A[i][i + 1] = f43;
  54. }
  55. // 이제부터 MATRiX B, C(fast)
  56. for (i = 0; i < 10; i++)
  57. {
  58. B[i][i] = 0.03758, C[i][i] = 1.158;
  59. }
  60. // 이제부터 matrix D(thermal)
  61. D[0][0] = t11, D[0][1] = t12;
  62. D[9][8] = t31, D[9][9] = t32, D[9][10] = t33;
  63. D[44][43] = t51, D[44][44] = t52;
  64. for (i = 1; i < 9; i++)
  65. {
  66. D[i][i - 1] = t21, D[i][i] = t22, D[i][i + 1] = t23;
  67. }
  68. for (i = 10; i < 44; i++)
  69. {
  70. D[i][i - 1] = t41, D[i][i] = t42, D[i][i + 1] = t43;
  71. }
  72. // 이제부터 matrix E(thermal)
  73. for (i = 0; i < 10; i++)
  74. {
  75. E[i][i] = 0.001098;
  76. }
  77. for (i = 10; i < 45; i++)
  78. {
  79. E[i][i] = 0.03443;
  80. }
  81. // 식을 돌립시다
  82.  
  83. do{
  84. for (i = 0; i < X; i++) { f1[i] = f2[i], t1[i] = t2[i] }
  85. k1=k2;
  86.  
  87. for(i=0;i<45;i++){
  88. s1=(B[i][i]*f1[i]+C[i][i]*t1[i])/k1;
  89. for(j=0;j<45;j++){
  90. if(j!=i)
  91. { iterf=iterf+A[i][j]*f2[i];
  92. }
  93. }
  94. for(k=0;k<45;k++){
  95. if(k==i){
  96. f[k]=(s1-iterf)/A[i][i];
  97. }
  98. else{
  99. f[k]=f2[k];
  100. }
  101. }
  102. f2[i]=f[i];
  103. itert=0;
  104. }
  105.  
  106. //구해진 f2를 가지고 이제 2그룹으로 간다.
  107. for(i=0;i<45;i++){
  108. s2=E[i][i]*f2[i];
  109. for(j=0;j<45;j++){
  110. if(j!=i){
  111. itert=itert+D[i][j]*t2[i];
  112. }
  113. }
  114. for(k=0;k<45;j++){
  115. if(k==i){
  116. t[k]=(s2-itert)/D[i][i];
  117. }
  118. else{
  119. t[k]=t2[k];
  120. }
  121. }
  122. t2[i]=t[i];
  123. itert=0;
  124. }
  125. //이제 새롭게 구해진 t2와 f2로 k값 비교 한다.(iteration 할 때 다시 nextn, intn이 0이 되도록 만들어야 함)
  126. nextn=0;
  127. initn=0;
  128. for(i=0;i<45;i++){
  129. nextn=nextn +(B[i][i]*f2[i]+C[i][i]*t2[i]);
  130. initn=initn + (B[i][i]*f1[i]+C[i][i]*t1[i]);
  131. }
  132. k2=k1*(nextn/initn); //k2값 정의
  133. aek=(k2-k1)/k2 ;
  134.  
  135. if(aek<0)
  136. {aek=(-1)*aek;} //양수화
  137.  
  138. //플럭스의 오차와 양수화
  139. for(i=0;i<45;i++){
  140. aef[i]=(f2[i]-f1[i])/f2[i];
  141. aet[i]=(t2[i]-t1[i])/t2[i];
  142. if(aef[i]<0)
  143. { aef[i]=(-1)*aef[i];}
  144.  
  145. if(aet[i]<0)
  146. {aet[i]=(-1)*aet[i];}
  147.  
  148. }
  149.  
  150.  
  151. for(i=0;i<45;i++)
  152. {
  153. if(aef[i]>=maxf){
  154. maxf=aef[i];
  155. }
  156. if(aet[i]>=maxt){
  157. maxt=aet[i];
  158. }
  159. f1[i]=f2[i];
  160. t1[i]=t2[i];
  161. k1=k2;}
  162.  
  163. }while (aek<0.001 & maxf<0.001 & maxt<0.001);
  164.  
  165. printf("\nThe Solution is : \n");
  166. printf("\nk=%f \n", k2);
  167. for (i = 0; i < 45; i++) {
  168. printf("\nF(%d) = %f\n", i, f2[i]);
  169. printf("\nT(%d) = %f\n", i, t2[i]);
  170. }
  171. }
  172.  
  173. return 0;
  174. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c: In function 'main':
prog.c:84:56: error: expected ';' before '}' token
 for (i = 0; i < X; i++) { f1[i] = f2[i], t1[i] = t2[i] }
                                                        ^
prog.c:163:12: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
 }while (aek<0.001 & maxf<0.001 & maxt<0.001); 
            ^
prog.c:163:38: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
 }while (aek<0.001 & maxf<0.001 & maxt<0.001); 
                                      ^
prog.c: At top level:
prog.c:173:2: error: expected identifier or '(' before 'return'
  return 0;
  ^
prog.c:174:1: error: expected identifier or '(' before '}' token
 }
 ^
stdout
Standard output is empty