- 积分
- 579
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2017-10-23
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 FuXiu 于 2017-11-18 10:48 编辑
最近在绘制探空图,卡在了湿绝热线这里,也查找了很多相关资料未果,有的公式出处不明确不敢用,有的变量未说明不能用(不是本专业的看不太懂,哎),有的找到公式了,但是计算出来不知道是否准确,误差在不在允许范围内。大气物理也说了如下内容:
个人觉得既然不能明确绘制湿绝热线,只能是根据公式迭代出t(温度)的值了,那么最关键的就是要精确算出假相当位温的值(求大神指正思路呀)
目前找到两个觉得靠谱的方法:
t代表温度(也想明确这个温度具体值什么温度呢),de代表露点温度,P代表气压。
方法一:
借鉴了 活在当下de 帖子: http://bbs.06climate.com/forum.php?mod=viewthread&tid=32336
public static double Get_θse_Value(double t, double de, double P)
{
double T =t + 273.15;
double es = Get_E_Value(t);
double rhum_ave = (Math.Pow(10, (7.5 * de) / ((237.3 + de) * 1.0f))) / (Math.Pow(10, (7.5 * t) / ((237.3 + t) * 1.0f))) * 100;
double q = rhum_ave * (0.62197 * es / (P - 0.378 * es)) / 100;
double e = P * q / (0.62197 + q) + Math.Pow(10, -10);
double tlcl = 55 + 2840 / (3.5 * Math.Log(T, Math.E) - Math.Log(e, Math.E) - 4.805);//55 + 2840 / (3.5 * Math.Log(T) - Math.Log(e) - 4.805);
double theta = T * Math.Pow((1000 / P), (0.2854 * (1.0 - 0.28 * q)));
double θse = theta * Math.Exp(((3376 / tlcl) - 2.54) * q * (1.0 + 0.81 * q));
double tθse =θse - 273.15;
return tθse;
}
public static double Get_E_Value(double t)
{
if (t <= 0)
{
return 6.112 * Math.Exp((17.67 * t) / ((t + 243.5) * 1.0f));
}
else
{
return 6.11 * Math.Pow(10, (7.5 * t) / ((237.3 + t) * 1.0f));
}
}
计算出来的结果,比原帖子的值误差了0.1~0.2。
方法二:
我在万能的帖子里下载了《大气物理学》盛裴轩 版 北京大学出版社(具体谁的帖子忘记了,贡献的楼主太不好意思了,看的帖子太多了)
通过查找书籍得出了以下公式:
public static double Get_θse_Value(double t, double de, double P)
{
double T =t + 273.15;
double es = Get_E_Value(de);
double rs = 0.622 * es / ((P - es) * 1.0f);
double θd = Math.Round(T * Math.Pow((1000 / (P * 1.0)), 0.286, 1);
double Lv = 2.5 * Math.Pow(10, 6) - 2323 * t;
double θse = θd * Math.Exp(rs * Lv / (1004 * T));
double tθse =θse - 273.15;
return tθse;
}
计算结果和方法一差距更大,简直想哭呀,
请教各位大神,我计算哪里失误了呢?小女子在这里谢过啦。这次第,怎一个愁字了得!
|
-
|