Ver código fonte

Upload files to ''

Yuechuan_Xu 9 meses atrás
pai
commit
cbb6af20c8
1 arquivos alterados com 52 adições e 0 exclusões
  1. 52 0
      diffusion.c

+ 52 - 0
diffusion.c

@@ -0,0 +1,52 @@
+#include <stdio.h>
+
+#define N 15 // 空间网格数
+#define T 30   // 时间步数
+#define L 1.0    // 空间长度
+#define dt 1 // 时间步长
+#define dx 1 // 空间步长
+#define alpha 0.1 // 扩散系数
+void printGrid(double grid[N]) {
+	   for (int i = 0; i < N;i++){
+		 printf("%.2f ", grid[i]);
+                 printf("\t");
+						        }
+			            printf("\n");
+				        
+	        
+}
+
+int main() {
+    double u[N+1]; // u为当前时刻的浓度分布
+    double u_new[N+1]; // u_new为下一个时刻的浓度分布
+
+    // 初始化浓度分布
+    for (int i = 0; i <= N; i++) {
+        if (i >= 45*N/100&& i <= 55*N/100) {
+            u[i] = 100.0;
+        } else {
+            u[i] = 0.0;
+        }
+    }
+
+    // 迭代计算
+    for (int t = 1; t <= T; t++) {
+        // 边界条件:固定浓度
+        u_new[0] = u[0];
+        u_new[N] = u[N];
+
+        // 内部节点计算
+        for (int i = 1; i < N; i++) {
+            u_new[i] = u[i] + alpha * dt / (dx*dx) * (u[i+1] - 2*u[i] + u[i-1]);
+        }
+
+        // 更新浓度分布
+        for (int i = 0; i <= N; i++) {
+            u[i] = u_new[i];
+        }
+	printGrid(u);
+    }
+
+    return 0;
+}
+