Fw: [疑問] 跑擴散方程式 到了終點..卻不會衰退

看板Fortran作者 (7.7)時間6年前 (2017/10/16 00:53), 6年前編輯推噓3(3031)
留言34則, 3人參與, 6年前最新討論串1/1
: http://imgur.com/TxeHaFC
: : 這是一維的汙染物濃度擴散方程式 : u是速度 c是濃度 : E是擴散係數(延散係數) : P是衰減係數 : : : 我用台灣某條河川 做實地測驗、與跑程式模擬兩個結果 : 實地測驗得到的曲線 : 就是高斯分布那一種型態(從0→到濃度最高點→到終點濃度衰退為0) : : : 跑程式的話 : 依照各參數輸入 得到的結果卻是(0→濃度最高點→到終點仍然濃度最高點 沒衰退衰減過) : : → wohtp: 有圖嗎?你的初始條件和邊界條件是什麼? 10/10 10:36 : → wohtp: 終點是時間上的終點嗎?多遠? 10/10 10:39 您好 初始條件 我是假設開始的釋放點(0公尺處) 濃度為100ppb 邊界條件 我假設終點站是N 又C(N-1)=C(N+1) 所以濃度會一直無法下降 後來我改成C(N)=0 (距離是 0M~1600M) (時間設定是0分鐘~160分鐘) 但是 也是到後面快終點的時候 濃度才會降下來 我想得到的圖形是類似高斯分布這樣的 https://imgur.com/w11jVaI
但我實際得到的結果是https://imgur.com/vZSSWeh
=.= 我想做的是 時變的系統 濃度隨時間變化的 不過現在卡關 我知道時不變系統怎麼做....不知道時變系統怎麼做 求高手幫忙解惑 薄酬2000P CC(I)=CC(I)+E*DT*(CC(I+1)-2*CC(I)+CC(I-1))/DX/DX-& U*DT*(CC(I+1)-CC(I-1))/2./DX-& DE*DT*CC(I) CC(N)=0 我的時不變系統是這樣寫 如果改成時變..我還在想要如何改 : → Vulpix: 聽起來除了沒衰退有點詭異外,一段時間後濃度最高點位置不 10/10 20:20 : → Vulpix: 變,這件事不是什麼大問題啊。當然視乎你的IC、BC、t。 10/10 20:22 : → wohtp: 我本來想說是邊界條件沒設對,擴散到最旁邊又被擋回來之類 10/11 10:21 : → wohtp: 但是發現他還有用手放進去衰減 10/11 10:22 : → wohtp: 最後沒有變成零就是數值做錯了,沒話好說 10/11 10:23 : → saltlake: 確定參數輸入正確? 跑的程式誰寫的? 10/11 11:17 ※ 編輯: Ecampus (125.230.93.84), 10/16/2017 00:59:26

10/16 05:32, 6年前 , 1F
1.時變系統每次迭代要先記錄新的值,等所有的點都跑過了
10/16 05:32, 1F

10/16 05:32, 6年前 , 2F
才更新 CC_new(I) = CC(I)+....
10/16 05:32, 2F

10/16 05:33, 6年前 , 3F
2.我會建議你先設計一個簡單的測試問題來檢查程式是否
10/16 05:33, 3F

10/16 05:36, 6年前 , 4F
正確。可以先省略壓力項,找exact solution 測試
10/16 05:36, 4F

10/16 05:37, 6年前 , 5F
10/16 05:37, 5F

10/16 05:39, 6年前 , 6F
另外你數值PDE(或是計算相關)背景不夠,建議修課或是找
10/16 05:39, 6F

10/16 05:40, 6年前 , 7F
書好好念(比方說你dt要取多少才穩定)
10/16 05:40, 7F

10/16 05:41, 6年前 , 8F

10/16 17:10, 6年前 , 9F
我試一下大大說的時變寫法看看 唉 當初沒好好學基本程式=
10/16 17:10, 9F

10/16 17:11, 6年前 , 10F
=.=導致現在的苦果
10/16 17:11, 10F

10/17 00:32, 6年前 , 11F
DT取0.1應該OK
10/17 00:32, 11F

10/20 00:38, 6年前 , 12F
大概看了一下你的原始碼,你的程式本來就是用來時變
10/20 00:38, 12F

10/20 00:42, 6年前 , 13F
系統的,似乎是一維連續釋放模式,因為C(1)程式執行
10/20 00:42, 13F

10/20 00:43, 6年前 , 14F
執行過程沒有變動過(是CC(1),筆誤sorry)
10/20 00:43, 14F

10/20 01:22, 6年前 , 15F
不過連續釋放模式CC(1)應該要是濃度最高的,你跑出
10/20 01:22, 15F

10/20 01:23, 6年前 , 16F
你跑出來的模型很奇怪,可能你有變動程式碼過的關係
10/20 01:23, 16F

10/20 01:30, 6年前 , 17F
連續釋放模型的
10/20 01:30, 17F

10/20 01:31, 6年前 , 18F
污染峰應該會像圖1一樣隨時間變化,中間確實會降不來
10/20 01:31, 18F

10/20 01:32, 6年前 , 19F
你模型尺度和釋放時間沒配合好的話,OUTPUT數據繪製
10/20 01:32, 19F

10/20 01:33, 6年前 , 20F
起來會感覺怪怪的,如圖2,你如果用較小的模型去看
10/20 01:33, 20F

10/20 01:34, 6年前 , 21F
已經發展到T3的污染峰的話,看起來像是一條直線,
10/20 01:34, 21F

10/20 01:34, 6年前 , 22F
但如果只看發展到T2的污染峰,看起來就很親切了。
10/20 01:34, 22F

10/20 01:36, 6年前 , 23F
同理,如果你用如圖3的較大尺度觀察T3污染峰的話,
10/20 01:36, 23F

10/20 01:36, 6年前 , 24F
圖形似乎也正常多了。
10/20 01:36, 24F

10/20 01:43, 6年前 , 25F
建議以未修改的原始程式,先隨意調整END_X、TT,
10/20 01:43, 25F

10/20 01:43, 6年前 , 26F
甚至是速度項的UU(1)、UU(2),來試試看是否可產生類
10/20 01:43, 26F

10/20 01:44, 6年前 , 27F
似的圖形。
10/20 01:44, 27F

10/20 01:45, 6年前 , 28F
但調END_X時要注意3個Xstop的配合。
10/20 01:45, 28F

10/20 01:49, 6年前 , 29F
另外你把CC(N)設為0的話,那點會類似1個很強的sink,
10/20 01:49, 29F

10/20 02:01, 6年前 , 30F
所以你跑的圖形可看到CC(N)前幾點濃度被硬拉下來
10/20 02:01, 30F

10/20 02:05, 6年前 , 31F
又因為是1維模型,質量繞不過去那點,他表現得會像是
10/20 02:05, 31F

10/20 02:07, 6年前 , 32F
一個污染物抽出量一直在變化的井,目的是讓那點的
10/20 02:07, 32F

10/20 02:08, 6年前 , 33F
污染物質量(濃度)抽為0。
10/20 02:08, 33F

10/23 00:19, 6年前 , 34F
好的 感謝Q_Q我來調整一下
10/23 00:19, 34F
文章代碼(AID): #1PuvAKpG (Fortran)
文章代碼(AID): #1PuvAKpG (Fortran)