mod_ppm Module

The one-dimensional implementation of the PPM (piecewise parabolic method, 分段抛物线法)

  • 假设1:等距网格
  • 假设2:第一个网格和最后一个网格为区域边界网格,为外部约束。

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)

Subroutines

public subroutine adv_by_ppm(dt, dx, n, u, c, increment, volume)

基于PPM方法实现的一维平流函数

Arguments

Type IntentOptional 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;