Chapter 6 应用案例

6.1 热传播问题(Heat Transfer)

6.2 大气混沌系统(Chaos System in Atmosphere)

spin-up的时间与模型的设计和模型模拟的问题有关,简单的,可以这样估算:D/v. D是初始条件偏离动态平衡的幅度,V是系统中最慢的过程的新陈代谢速率。 同样是研究水文问题,有的模型代谢速度快,预热时间就短,有的模型代谢慢就需要较长代谢时间。

举例子: 海洋模型通常需要上千年的spin-up, 地下水模型spin-up时间都是几十到几百年。水文模型中,有的只需要一两年spin-up,有的耦合地下水之后需要几十年时间,陆面过程模型通常涉及的地下水比较浅,不到一年就可以完成spin-up。

以上讲的模型都可以通过spin-up,将初始条件偏离问题解决,可以说:只要时间足够长,任何的初始条件都可以接受。这类问题属于可以新陈代谢的系统。 另外有一些系统——混沌系统,对于初始条件非常敏感,初始条件的细微差异,就会导致未来不可预测——即蝴蝶效应,细微初始条件或者过程的数值波动导致结果不具有可预测性。


Definition 6.1 洛伦兹方程(Lorenz equation)描述空气流体 运动的一个简化微分方程组.1963年,美国气象学家洛伦兹(Lorenz,E. N.)将描述大气热对流的非线 性偏微分方程组通过傅里叶展开,大胆地截断而导 出描述垂直速度、上下温差的展开系数x(t),y(t),z(t)的三维自治动力系统。

dxdt=b(yx)dydt=xz+rxydzdt=xyaz


利用龙格-库塔方法迭代: x(t+Δt)=x(t)+fx(x,y,z,t)Δty(t+Δt)=y(t)+fy(x,y,z,t)Δtz(t+Δt)=z(t)+fz(x,y,z,t)Δt

rm( list = ls() )
fun.reaction <- function (x, dt, t.end, rt.col = 1:3){
  f1 <- function(sigma, x){
    sigma * x[2] - sigma * x[1]
  }
  f2 <- function(rho, x){
    rho * x[1] - x[1] * x[3] - x[2]
    # rho * x[1] -  x[2]
  }
  f3 <- function(beta, x){
    x[1] * x[2] - beta * x[3]
    # - beta * x[3]
  }
  NT = t.end / dt
  mat= matrix(0, NT,3)
  for( i in 1:NT){
    x[1] = x[1] + f1(sigma, x) * dt
    x[2] = x[2] + f2(rho, x) * dt
    x[3] = x[3] + f3(beta, x) * dt
    mat[i, ]= x
  }
  ret = cbind(1:NT * dt,  mat[, rt.col])
  colnames(ret) = c('Time', 'x', 'y', 'z')
  ret= data.frame(ret)
  ret
}

sigma = 10; beta = 8/3; rho = 28

x= c(1, 1, 1) # IC
t.end = 50
dt = 0.01

x0 = c(10, 2, 1)
x1 = fun.reaction(x = x0, dt, t.end)

#' ==================================================================
#' ==================================================================
x = x1
par(mfrow=c(2,2))
plot(x$x, x$y, type = 'l')
plot(x$x, x$z, type = 'l')
plot(x$y, x$z, type = 'l')
par(mfrow=c(1,1))

# 
# rgl::plot3d(x[, 2:4])
# stop()
#' ==================================================================
#' ==================================================================
icol=1
epsilon = c(0,1,0) * 10^(-14)

x2 = fun.reaction(x = x0 + epsilon, dt, t.end)
# x2 = fun.reaction(x = x0+ c(0, 10^-13, 0), dt, t.end)
tr = (1:nrow(x1))[x1[, 1] > 40]
tr = (1:nrow(x1))[]
par(mfrow=c(3,1), mar=c(2, 4, 1, 1))
plot(x1$Time[tr], x1$x[tr], type='l', col=1, xlab='Time', ylab='X'); grid()
lines(x2$Time[tr], x2$x[tr], col=2)

plot(x1$Time[tr], x1$y[tr], type='l', col=1, xlab='Time', ylab='Y'); grid()
lines(x2$Time[tr], x2$y[tr], col=2)

plot(x1$Time[tr], x1$z[tr], type='l', col=1, xlab='Time', ylab='Z'); grid()
lines(x2$Time[tr], x2$z[tr], col=2)

#' ==================================================================
#' ==================================================================
library(plot3D)
x=x1
par(mfrow=c(1,1), mar=c(1, 1, 1, 1))
scatter3D (x=x$x, y=x$y, z=x$z, type = "l", theta=45, phi=10, bty='b2')

图上画的是最简单的Lorenz系统,混沌系统的代表,只有x,y,z三个变量。黑线是控制实验,红线是控制实验基础上给Y加入10的n次方波动。这张图是给Y一个1014次方的波动,结果是在40天以后,预测结果失去相关性。

6.3 承压地下水(Confined Aquifer)

6.3.1 控制方程

(1)sdhdt=kBd2hdx2+ss

公式中变量含义为

  • s - 储水率 [LL1]
  • h - 水头高度 [L]
  • t - 时间 [T]
  • k - 饱和水力传导度[L3T1L2]
  • B - 承压含水层厚度 [L]
  • x - 沿x方向的距离 [L]
  • ss - 源汇项,即系统获得或者失去水分 [LT1]

[ β α000000α β α000000α β  α000000α β α000000α  β α000000α β α000000α β ][h1th2th3th4thithn3thn2thn1thnt]=[h1t1h2t1h3t1h4t1hit1hn3t1hn2t1hn1t1hnt1]

6.4 湖面湍流(Lake Turbulence)

6.5 溶质运移(Solute Transport)

6.6 地貌侵蚀(Landscape Evolution)

6.7 熔岩入侵(Lava Invasion)