The one-dimensional implementation of the PPM (piecewise parabolic method, 分段抛物线法)
Step 1: 计算2~n-1个网格的平均坡度(slopC)
为了让浓度不连续的地方模拟得更好, 同时,确保网格边界处浓度在左右格子平均浓度之间, 对进行约束。
Step 2: 每个网格边界处的浓度 Step 3: 计算抛物线参数,并对边界处浓度进行约束
Step 4: 计算边界处传输的平均浓度,及其通量 其中 Step 5: 用前向欧拉法进行时间积分 网格设计
|Boundary|<-----------------Domain----------------->|Boundary|
| c(1) | c(2) |-----------------------| c(n-1) | c(n) |
| u(1) u(2) -> u(n-1) u(n)
| | slopC(2)|
| |deltaC(2)|
| | c6(2) |
leftC(1) leftC(2)
rightC(1) rightC(2)
egdeC(0) egdeC(1) egdeC(2)
transC(1) transC(2)
flux(1) flux(2) -> flux(n-1)
基于PPM方法实现的一维平流函数
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real, | intent(in) | :: | dt |
时间间隔: s |
||
real, | intent(in) | :: | dx |
网格分辨率: m |
||
integer, | intent(in) | :: | n |
网格数: 2~n-1 参与平流计算 |
||
real, | intent(in) | :: | u(n) |
风速: m/s,网格可以比n少一个 |
||
real, | intent(inout) | :: | c(n) |
网格浓度: umol/m3,包含两个边界浓度 |
||
real, | intent(out) | :: | increment(n) |
浓度变化: umol/m3,只有2~n-1有效 |
||
real, | intent(in), | optional | :: | volume(n) |
每个网格的体积校正因子: dxdydz; |