python:一維非飽和土壤下滲代碼(進階1)

2021-01-08 水科學論壇

——最近感覺生活陷入了低谷,已迷失,不知道目前這兒的生活意義在哪,把握不清楚未來走勢。當然目前的重大挫折也會帶給自己成長,以後學會自我調節、耐心處理困難才能有所成就、有所收穫。

馬上要到520了,祝大家當天過得愉快!

上一篇寫了一個簡單的非飽和土壤下滲的代碼,有些問題,需要勘誤下,擴散係數D,忘了加進去,雖然上一篇取的是1,並不影響計算結果。但是如果更改D的值,就完全沒效果了。因為變量D並沒有加到代碼中。

這次進階篇,我們把含水率θ當做變量,利用土壤下滲方程,計算土壤非飽和帶的含水率,然後再計算濃度。

其實跟水質模擬過程基本上一樣的,計算出水動力,再計算水質。有水質模擬興趣的可以拿此代碼的思路去試試模擬水質過程。

溶質下滲公式依據《環境影響評價技術導則 土壤環境》(2018):

含水率θ公式為:

然後一切從簡,各種參數均為定值,變量僅為c、θ(懶人,簡單來做--,

)開始貼代碼了:

離散後形式:

c[i]= c_α*cn[i+1]+c_β*cn[i]+c_γ*cn[i-1];n為時間、i為土壤剖分網格

θ[i]= θ_α*θn[i+1]+θ_β*θn[i]+θ_γ*θn[i-1];n為時間、i為土壤剖分網格

1# -*- coding: utf-8 -*- 2""" 3Created on Sat May 9 16:08:40 2020 4@author: zz 5""" 6import numpy as np 7import matplotlib.pyplot as plt 8from pylab import * 9rcParams['font.sans-serif']=['SimHei']10D=0.5; #彌散係數,m2/s11q=1; #滲透速率,12Z=10;#沿Z軸的距離,m13nx=10; #縱向網格個數14nt=500;#時間步數15dx=Z/nx;#j為距離,m16dt=0.01;#i為時間步長,s17i=0;#i為土壤剖面網格編號數,s18c = np.zeros(nx)#初始條件19#土壤含水率的邊界等設置情況20θ= np.ones(nx)#給出一個數組存儲不同時間步長的數據21θ[0] = 20#上邊界22θ[nx-1]=10#下邊界23θ_α=D*dt/dx**2;#合併後的係數24θ_β=1-2*D*dt/dx**2;#合併後的係數25θ_γ=D*dt/dx**2;#合併後的係數26#土壤濃度的一些邊角條件27c[0] = 10#上邊界28c[nx-1]=5#下邊界,其實下邊界並不是必需的,但是還是給了。29cn = np.ones(nx)#給出一個數組存儲不同時間步長的數據30c_α=np.zeros(nx)31c_β=np.zeros(nx)32c_α[i]=D*dt/dx**2-q/θ[i]*dt/dx;#合併後的係數33c_β[i]=1+q/θ[i]*dt/dx-2*D*dt/dx**2;#合併後的係數34c_γ=D*dt/dx**2;#合併後的係數35#求土壤含水量36for n in range(1,nt):37 θn = θ.copy() ##複製循環數組38for i in range(1,nx-1):39 θ[i]= θ_α*θn[i+1]+θ_β*θn[i]+θ_γ*θn[i-1];40plt.plot(θ,label="含水率")41# plt.title("θ(%)")42plt.xlabel('X(m)')43# plt.ylabel('θ(%)') 44plt.legend()45#求土壤濃度46for n in range(1,nt):47 cn = c.copy() ##複製循環數組48for i in range(1,nx-1):49 c_α[i]=D*dt/dx**2-q/θ[i]*dt/dx;#合併後的係數50 c_β[i]=1+q/θ[i]*dt/dx-2*D*dt/dx**2;#合併後的係數51 c[i]= c_α[i]*cn[i+1]+c_β[i]*cn[i]+c_γ*cn[i-1];52plt.plot(c,linestyle='--',label="汙染物濃度")53# plt.title("C(mg/l)")54# plt.xlabel('X(m)')55# plt.ylabel('C(mg/l)')56plt.legend()57plt.show() 5859

1:計算結果:

2:大家可以試試代碼,運算不同的結果!

3:可以增加擴散係數的非常量過程等,自己玩玩,深入一點!

相關焦點

  • Python趣味打怪:60秒學會一個例子,147段代碼助你從入門到大師
    魚羊 發自 凹非寺量子位 報導 | 公眾號 QbitAI人生苦短,編程苦手,不妨學起Python,感受一飛沖天的快樂。入門簡單如十進位轉二進位,盡顯Python簡潔之美:In [1]: bin(10)Out[1]: '0b1010'冬天到了,就算沒有點亮手繪技能,也能用簡單幾行代碼繪出漫天雪花:
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    6-22本章小結 7-1分類評估 混淆矩陣 7-2分類評估 7-3回歸評估 7-4非監督評估 8-1課程回顧與多角度看數據分析 8-2大數據與學習這門課後還能幹什麼 4辦公自動化 1購後必讀 ,學員福利 2python基礎,從零到1 3s1 excel
  • OpenCV-Python 直方圖-3:二維直方圖|二十八
    介紹在第一篇文章中,我們計算並繪製了一維直方圖。 之所以稱為一維,是因為我們僅考慮一個特徵,即像素的灰度強度值。 但是在二維直方圖中,您要考慮兩個特徵。 通常,它用於查找顏色直方圖,其中兩個特徵是每個像素的色相和飽和度值。
  • 高斯混合模型(GMM):理念、數學、EM算法和python實現
    或者數據具有非零的協方差呢?如果聚類具有不同的均值和協方差怎麼辦?這就要用到高斯混合模型了!GMM假設生成數據的是一種混合的高斯分布。1.期望步驟:計算成員值r_ic。這是數據點x_i屬於聚類c的概率。2. 最大化步驟:計算一個新參數mc,該參數確定屬於不同聚類的點的分數。 通過計算每個聚類c的MLE來更新參數μ,π,Σ。重複EM步驟,直到對數似然值L收斂。
  • 成都Python培訓周期多久
    成都python培訓哪個更專業? Python的設計目標之一是使代碼具有很高的可讀性。它被設計成使用標點符號和其他語言中常用的英語單詞,使代碼看起來整潔美觀。現在成都有很多python培訓學校。
  • 代碼詳解:Python虛擬環境的原理及使用
    (venv) % pip list # Inside an active environmentPackage Version --pip 19.1.1setuptools 40.8.0如果想要安裝第三方庫的特定版本,比如numpyv1.15.3,可像往常一樣使用pip。
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%
    其實某個特定程序(無論使用何種程式語言)的運行速度是快還是慢,在很大程度上取決於編寫該程序的開發人員自身素質,以及他們編寫優化而高效代碼的能力。Medium上一位小哥就詳細講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問題,而是代碼本身的問題。
  • Python趣味打怪:147段簡單代碼完成從入門到大師
    關注前沿科技 量子位魚羊 發自 凹非寺量子位 報導 | 公眾號 QbitAI人生苦短,編程苦手,不妨學起Python,感受一飛沖天的快樂。入門簡單如十進位轉二進位,盡顯Python簡潔之美:In [1]: bin(10)Out[1]: '0b1010'冬天到了,就算沒有點亮手繪技能,也能用簡單幾行代碼繪出漫天雪花:例子是有趣的例子,教程也是正經教程,學習路徑清晰、系統,先一起來看看完整目錄:
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 如何使用python語言代碼實現判斷是否為回文
    工具Visual Studio 2019python運行環境技術python回文回文,是按照中心對稱,從左到右或從右到左,字符串都一樣的。如果想要python語言代碼實現回文判斷,若為回文,列印回文,否則列印不是回文。
  • Python代碼性能調試和優化
    有經驗的開發者一般都能很容易能找出程序的瓶頸,但對於普通碼農找出系統的問題代碼則很難,為了能快捷有效的發現程序的性能瓶頸就需要進行性能調試,此處我們以一個實際例子進行介紹,以下程序是計算e的x(1..n)次的冪,其代碼如下:# performance.pyfrom decimal import *def exp(x):getcontext().
  • 加快Python算法的四個方法(二)Numba
    使用Numba的代碼運行速度與C,C ++或Fortran中的類似代碼相媲美。這是代碼的編譯方式:首先,獲取,優化Python函數並將其轉換為Numba的中間表示形式,然後類似於Numpy的類型推斷一樣進行類型判斷(因此python float為float64),然後將其轉換為LLVM可解釋的代碼。然後,該代碼被饋送到LLVM的即時編譯器以發出機器代碼。
  • Python學習第129課——醉漢隨機遊走代碼改進
    【每天幾分鐘,從零入門python編程的世界!】上節我們在Python中用代碼實現了醉漢隨機遊走的邏輯和過程,這節我們把上節的代碼改進一下。現在我們的小例子代碼是非常少的,實際開發中,有些項目代碼量會非常大,為了代碼在執行時有更快的速度,那麼就需要對代碼進行改進優化。
  • 溼陷性黃土地區海綿城市建設雨水滲蓄風險防控
    1 溼陷性黃土地區海綿城市建設再認知我國溼陷性黃土地質分布廣泛,主要集中在乾旱、半乾旱氣候區,其在天然狀態下的高孔隙率和低溼性(天然溼度≤塑限含水量)是其產生溼陷的重要條件。非自重溼陷性黃土除土壤含水量飽和度影響外,自重壓力疊加外部荷載壓力大於溼陷性起始壓力時,溼陷發生。
  • 3行代碼Python搞定圖片清晰度識別,原來我們看到不一定是真的
    實操原理看起來比較複雜,涉及到很多信號啊圖片處理的相關知識,下面我們來實操一下,直觀感受下。由於人生苦短,以及我個人是朋友圈第一 Python 吹子,我選擇使用 Python 來實現,核心代碼簡單到令人髮指:import cv2def getImageVar(imgPath):image = cv2.imread(imgPath);
  • 正則實戰秘籍進階-【溫度轉換小程序】
    若輸入帶3位小數的溫度>>22.223match temperature :22.2271.996([CF])')m=re.search(patt,celsius)if m: print m.groups() print m.groups()[-1] temp_str=m.groups()[0] print eval(temp_str)>>('-9.5
  • 成都學習Python開發哪家好
    如何選擇成都python培訓機構? python程式語言語法清晰、乾淨、易讀、易維護、代碼量小、可讀性強。當團隊合作開發時,閱讀別人的代碼將是非常迅速和高效的。通俗說來就是「寫起來快、看起來明白!」所以近年來,python開發非常流行。
  • 乾貨丨Python接口測試自動化實戰及代碼示例:含get、post等方法
    最終選定 python 作為腳本開發語言,使用其自帶的 requests 和 urllib 模塊進行接口請求,使用優化後的 unittest 測試框架編寫測試接口函數,測試結果選用 HTMLTestRunner 框架予以展示,並使用 python 的 ssl 模塊支持 https 協議的驗證。接下來,我詳細地介紹這些模塊,並給出各個模塊完整的測試代碼。
  • Python編程題:兩個日期間的天數統計(附代碼)
    由於python中time模塊的很多函數都是可以直接計算出指定時間的時間戳(秒數),所以統計兩個日期間的總天數就非常方便了!代碼與運行結果:代碼與運行結果代碼解析:time1 = (int(t1[0]),int(t1[1]),int(t1[2]),0,0,0,0,0,0)這裡補足6個0是因為在struct_time類型中至少需要9個值,而已經有了年月日