Bash

Bash—Bourne shell

一种很棒的脚本语言,处理文本文件十分方便。故记之,以备。

格栅参数计算

简单的格栅参数计算脚本,只需更改部分初始参数,即可一次性得到所求参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
# A simple bash script for grill design
# Author: liuyujie

Q=10 # m^3/s 流量
B1=5 # 栅前渠宽,一般由经验公式:B1=sqrt(2*Q/v)
S=0.01 # m 栅条宽度
g=9.81 # m/(s^2) 重力加速度
Ktotal=1.5 # 总变化系数
h=0.4 # m 栅前水深
h1=0.3 # m 栅前渠道超高,一般取0.3m
alpha1=20 # degree 进水渠道展开角度,一般取20度
v=0.9 # m/s 过栅流速,一般取0.8~1.0 (m^2/s)
b=0.02 # m 粗格栅50-100mm,中格栅10-40mm,细格栅3-10mm
alpha=60 # degree 格栅倾角,机械清除60~90度,人工清除为30~60度
k=3 # 格栅受污染堵塞后,水头损失增大数倍,一般取k=3
beta=2.42 # 栅条形状系数,用于求阻力系数,锐边矩形=2.42,迎水面为半圆形的
# 矩形=1.83,圆形=1.79,迎水面和背水面均为半圆形的矩形=1.67,
# 梯形=2.00,正方形=0.64(收缩系数)
W1=0.07 # m^3/(1000m^3) 单位体积污水栅渣量,一般取0.1~0.01,粗格栅取小值,细格栅取大值

awk -v Q=$Q -v S=$S -v g=$g -v Ktotal=$Ktotal -v h=$h -v h1=$h1 -v alpha1=$alpha1 \
-v v=$v -v b=$b -v alpha=$alpha -v k=$k -v beta=$beta -v W1=$W1 -v B1=$B1 \
-v PI=3.141592653 '
BEGIN {
n = Q * sqrt(sin(alpha*PI/180.0))/(b * h * v); n = round(n); B = S*(n-1)+b*n
printf("格栅间隙数n=%d(个) 格栅槽宽度B=%.1f(m)\n", n, B)
if(beta!=0.64) {
Rc = beta * (S/b)^(4/3)
}
else {
Rc = ((b+S)/(beta*b)-1)^2
}
h0 = Rc * v^2/(2*g) * sin(alpha*PI/180.0)
h2 = k * h0
printf("计算水头损失h0=%.6f(m) 过栅水头损失h2=%.6f(m)\n", h0, h2)
printf("栅后槽总高度H=%.6f(m)\n", h+h1+h2)
L1 = (B-B1)/(2*sin(alpha1*PI/180.0)/cos(alpha1*PI/180.0))
L2 = 0.5*L1
H1 = h + h1
L = L1 + L2 + 0.5 + 1.0 + H1/(sin(alpha*PI/180.0)/cos(alpha*PI/180.0))
printf("进水渠道肩宽L1=%.6f(m) 渐宽部分长度L2=%.6f(m)\n栅前槽高H1=%.1f(m) " \
"栅槽总长度L=%.6f(m)\n", L1, L2, H1, L)
W = Q*W1*86400/(Ktotal*1000)
printf("每日栅渣量W=%.2f(m^3/d)\n", W)
}

function round(kl) {
b5 = int(kl)
cc = kl * 10
df = b5 * 10 + 5
if(cc >= df) {
e4 = b5 + 1
}
else {
e4 = b5
}
return e4
}
'

温度对二元铜锌合金系统属性影响

采用二分法,有限差分方式确定温度对合金体系不同属性的影响。awk代码看链接

使用速度Verlet算法模拟铝原子体系。

改自C-Example2:使用速度Verlet算法计算铝原子体系能量一文。采用awk编程进行小规模模拟,速度的确和C或者Fortran等专业的编程差距太大。仅供学习之用。代码较长,就不贴出来了,看链接

高斯-约旦(Gauss-Jordan)消元法求N阶逆矩阵

最近研究了一下Levenberg-Marquard算法来求解非线性方程参数,但是基本上能找到的要么是C或者Fortran程序,要么是PythonMatlab。本来想参考这些现成的来写个awk的脚本,无奈awk支持的内置函数实在是太少了。特别是矩阵运算这一块完全都需要自己编写函数才行,太麻烦了。其中有个求逆矩阵的函数,挺有趣,记之。看代码

线性、二次方程及Freundlich等温吸附拟合

代码

Vasp轨迹坐标(XDATCAR)文件转换为.gro格式轨迹文件

原文参看博文新版VASP轨迹文件转换为GROMACS格式。但感觉有些毛病,稍微修改了一下以供使用。看代码

F3/AOP序参数计算实例

看过水分子序参数的计算一博文的都知道通过调用GROMACS自带分析工具计算虽然方便,但是效率并不高。前面的相关博文中我也给出了更具效率的C程序。折中一下,你可以直接通过bash独自去处理gro文件,不调用GROMACS的内置工具,这样效率也会大幅度提高。注意:提取gro中的数据不要用域来判断,用substr函数来得到固定位置的字符或者值。比如代码

F4序参数计算

比如代码

bash下的MD程序?

尝试用bash下的awk编程跑MD程序?代码改自C-Example1:铝原子体系势能与体积的变化关系一文。看代码

MS轨迹坐标提取

代码