diffusion.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <stdio.h>
  2. #define N 15 // 空间网格数
  3. #define T 30 // 时间步数
  4. #define L 1.0 // 空间长度
  5. #define dt 1 // 时间步长
  6. #define dx 1 // 空间步长
  7. #define alpha 0.1 // 扩散系数
  8. void printGrid(double grid[N]) {
  9. for (int i = 0; i < N;i++){
  10. printf("%.2f ", grid[i]);
  11. printf("\t");
  12. }
  13. printf("\n");
  14. }
  15. int main() {
  16. double u[N+1]; // u为当前时刻的浓度分布
  17. double u_new[N+1]; // u_new为下一个时刻的浓度分布
  18. // 初始化浓度分布
  19. for (int i = 0; i <= N; i++) {
  20. if (i >= 45*N/100&& i <= 55*N/100) {
  21. u[i] = 100.0;
  22. } else {
  23. u[i] = 0.0;
  24. }
  25. }
  26. // 迭代计算
  27. for (int t = 1; t <= T; t++) {
  28. // 边界条件:固定浓度
  29. u_new[0] = u[0];
  30. u_new[N] = u[N];
  31. // 内部节点计算
  32. for (int i = 1; i < N; i++) {
  33. u_new[i] = u[i] + alpha * dt / (dx*dx) * (u[i+1] - 2*u[i] + u[i-1]);
  34. }
  35. // 更新浓度分布
  36. for (int i = 0; i <= N; i++) {
  37. u[i] = u_new[i];
  38. }
  39. printGrid(u);
  40. }
  41. return 0;
  42. }