基于HYDRUS1D的环评文件土壤污染物垂直入渗模拟预测
环评文件土壤污染物垂直入渗模拟预测,基于HYDRUS1D
搞环评的朋友们应该都懂,土壤污染物迁移预测这事就像玩俄罗斯方块——参数没调好分分钟堆出个污染炸弹。今天咱们来盘盘用HYDRUS1D做垂直入渗模拟的那些骚操作,手把手教你避开新手必踩的坑。
先说说这货的基本设定。HYDRUS的工程文件里藏着个叫Selector.in的配置文件,打开一看满屏参数能让人犯密集恐惧症。重点看这几行:
TPrint(1)= 0.0001 //输出步长 Mat(1)= 1 //材料编号 hCritA= -10000 //底部边界条件这堆参数决定了你的模型是精准预测还是玄学占卜。比如hCritA设成-10000代表自由排水边界,要是污染物渗漏到地下水,这个值能直接让模拟结果变恐怖片结局。
接着是网格划分的讲究。新手常犯的错误是均匀剖分,结果算到天亮还没出结果。试试指数增长剖分:
N = 20 //总层数 dzini = 0.1 //初始厚度 dzmax = 5.0 //最大厚度地表附近用0.1米的细网格抓吸附过程,深处用5米粗网格省算力。实测这么搞能把计算时间从三集连续剧缩短成短视频,精度还基本不掉线。
环评文件土壤污染物垂直入渗模拟预测,基于HYDRUS1D
污染物参数设置才是重头戏。某次我把硝基苯的吸附系数Kd填错小数点,模拟结果直接显示污染物原地升天。正确的打开方式:
ChPar(1,1)= 0.23 //Kd吸附系数 ChPar(1,2)= 0.05 //降解速率 Beta(1)= 0.4 //阻滞因子阻滞因子Beta别直接抄文献,实测不同质地土壤能差出两个数量级。有个野路子——拿当地土壤样本做批实验测值,虽然费事但能避免项目验收时被专家怼到自闭。
跑完模型别急着出图,先看质量平衡误差:
library(hydrusR) results <- read_results("ProjectX") mass_balance <- results$Balance plot(mass_balance$Time, mass_balance$Error, type='l')要是误差曲线像心电图的,赶紧回去检查边界条件。正常情况误差应该控制在1%以内,超过这个数的模型比天气预报还不靠谱。
最后来个骚操作——用Python批量改参数:
import fileinput with fileinput.FileInput('Selector.in', inplace=True) as f: for line in f: if line.strip().startswith('hCritA'): print('hCritA= -15000 //modified by script') else: print(line, end='')这脚本能批量修改边界条件,做参数敏感性分析时比手动香多了。上次用这个方法,半小时就试完了20组参数组合,效率直接拉满。
搞模拟最玄学的是有时候明明参数都对,结果却魔幻现实。有次模拟显示污染物在3米深处神秘消失,后来发现是没关软件的自动截断功能。所以记住——模型可以跑得慢,日志必须看得细,这行当里最贵的永远是你的时间成本。
