当前位置:文档之家› 海洋环流

海洋环流

一、Stommel 西向强化理论的推导Stommel 假定条件:定常流--忽略局地变化项 ---------u t∂∂= 0 水平均一—忽略平流项 ---------u u u u v w x y z∂∂∂++∂∂∂ = 0 存在’无运动深度’ 0D运动方程的分量:(/V z K A ρ=),为运动学交换系数1()V x p u fv K x z zξρ∂∂∂=++∂∂∂ (01) 1()V y p v fu K y z zξρ∂∂∂=-++∂∂∂ (02) 风应力的表达形式: cos;0x y y F b πττ=-=海水为均质: p h g x x ρ∂∂=∂∂(03) p h g y yρ∂∂=∂∂ (用海面斜率代替水平压强梯度力) (04) 将式(01)和(02)对Z 积分,并将式(03),(04)的结果带入得()hh h h V x D D D D h u g dz fvdz K dz dz x z z ξ----∂∂∂=++∂∂∂⎰⎰⎰⎰ (05) ()h h h h V y D D D D h v g dz fudz K dz dz y z zξ----∂∂∂=-++∂∂∂⎰⎰⎰⎰ (06) 为简化分析,stommel 将05,06式第一项中的u 和v 看成与z 无关,这种简化等于把风看成是一种体积力,看成是作用于流体柱上的力。

对上式各项积分,得到()()()x x h g h D fv h D t h D x ξ∂+=++++∂ (07) ()()()y y h g h D fu h D t h D yξ∂+=-++++∂ (08) 对于x ξ和y ξ,使用最简单的阻力,认为其数值正比于流体的速度()D h +x ξRu =- ; ()D h +y Rv ξ=-为求得涡度平衡的方程,将风应力的表达形式: cos ;0x y yF b πττ=-=和摩擦力表达形式()D h +x ξRu =- ; ()D h +y Rvξ=-带入07式和08式并交叉微分相减得: ()2()()()sin h h h f F y u g h D g f v h D v h D R x y x y y y b b yππ∂∂∂∂∂∂++=++++-∂∂∂∂∂∂∂ (09) ()2()()h h h v g h D g f u h D R x y x y x x∂∂∂∂∂++=-+-∂∂∂∂∂∂ (10) 09式和10式相减得:()()()()()sin f f u h D v h D v h D x y y Fy v u R b b x y ππ⎧⎫∂∂∂-+++-+⎨⎬∂∂∂⎩⎭⎛⎫∂∂=+- ⎪∂∂⎝⎭ (11)考虑铅直积分后的定常状态下的连续方程:0S S x y ∂∂+=∂∂; 可改写为0h h D Dudz vdz x y ρρ--∂∂+=∂∂⎰⎰ (12) 如果ρ= const ,u 和v 又与z 无关 ,(12)式可变为()()()()u h D v h D x y∂∂+++∂∂0= (11)式便简化为()sin f F y v u v h D R y b b x y ππ⎛⎫∂∂∂-+=+- ⎪∂∂∂⎝⎭(13) 前两项表示Sverdrup 平衡关系式,最后一项是stommel 新引进的代表侧向摩擦所产生的附加涡度。

实际海洋中,h<<D ,作为一阶近似,式(13)可改写为sin 0D f F y v u v R y bR b x y ππ⎛⎫∂∂∂++-= ⎪∂∂∂⎝⎭(14) 因为流体是不可压缩的二维流动,满足连续方程。

可以引进流函数ψ,u v y xψψ∂∂=-=-∂∂ ; α=D f R y ∂∂ ,γ=F bR π- 式(14)可改写为2222x y x∂ψ∂ψ∂ψ++α=γ∂∂∂sin y b π (15)边界条件:ψ(0,y)=ψ(λ,y)=ψ(x,0)=ψ(x,b)=0 求解得21121222(1)(1)()sin()[1]k k k k k k b y e e e e b e e λλλλλλλπψπ-+-=-- 1212()cos()(1)k k b y u C e C e b λλλππ=-+- 12211222()sin()()k k b y v C k e C k e bλλλππ=+ 考虑三种情况,其中针对科氏参量的分析,而风应力,摩擦和由海面高度变化引起的水平压强梯度力取相同值1、 科氏参量为0,非旋转情形///12////111;b b b b b b b e e C C e e e e eπλπλπλπλπλπλπλ------====-- 2(//2()sin()[1]x b x b b y e e bλππλπψπ--=+-) 2、 科氏参量为常数,均匀旋转情形1C , 2C 不变,流线形式不变3、 科氏参量为随纬度的线性函数,产生西向强化二、stommel 计算程序中的解释1.变量在程序中的作用解释b8——根据需要赋值,赋值后用于代表实型种别数。

pi ——代表圆周率π值,精度取b8代表的值。

nx ,ny ——分别代表x 方向、y 方向的网格间距。

lx ,ly ——计算区域的长和宽。

alpha ,beta ,gamma ——计算参数,取值依据公式需要而定。

steps ——迭代步数。

dx ,dy ——即差分方程中的x ∆、y ∆,空间步长。

a1,a2,a3,a4,a5,a6——系数,根据改写后的差分方程确定,具体赋值见程序。

psi ,new_psi ——数组,用于存放旧的流函数ψ的值及通过计算得到的下一时间步长的ψ的值。

diff ——用于存放新旧两次ψ值之间的差值,即所有网格点上的ψ值与上一时间步长的ψ值作差,然后全部加起来得到diff ,是判断运算结果是否收敛的依据。

dx2,dy2,bottom ——一些为了使程序中的计算看起来不那么复杂设置的变量,主要用于代替算式中常出现的部分。

比如22dx dx dx dx =⨯=, 2.0_8(22)bottom b dx dy =⨯+还有一些诸如i ,j 之类的就是控制变量了,作用不细讲。

2.各大功能模块的作用解释module的作用是定义一些公用的变量名称,之后需要用的时候只要声明使用这个module,那么这个module中定义的变量名自动应用到程序中,调用时使用use调用。

一开始的几个module就是在做这些事情。

interface比较复杂,一个简单的解释是,调用时可以根据输入的数据的类型自动选择对应的区块去执行操作,在这个程序中可以简单的认为是在定义几个子例行程序和子函数程序,方便后面的计算。

主程序program stommel开始计算,迭代次数steps=100000。

子例行程序subroutine bc是在赋边界条件,题目中边界条件为0。

子例行程序subroutine do_jacobi是在做雅各比迭代,用talk1中提到的方法逐点进行计算。

子函数function force就是对方程中的f函数处理,使其值等于每个点上的f值。

子例行程序subroutine write_grid是将最后的结果写入文件。

3.其他一些解释我们通过查找得到了关于种别参数说明的具体用法:种别是F90 的新概念。

一个数据, 不仅有一个类型,并在同一类型下可分为若干种别,种别值确定了数据的大小范围和精度。

有了种别说明后,程序更易于移植。

因为在不同的计算机系统上,同一种变量类型可以有不同的精度,因此当程序在另一种机子上运行时可能出现溢出或下溢。

规定种别后可以避免这种情况的出现。

我们知道,一个数据通常在内序中占一个存贮单元。

对整型数而言,如果该变量在程序中使用值范围很小,则只需半个存贮单元。

如果变量的整数变化范围很大,则存贮时有必要占两个内存单元。

实型数更复杂,除了存贮的数值范围大小不同外,要求精度也会不同,有的只要8 位有效值即满足,有的则可能要24 位有效值。

这样,它们要求的存贮单元数量不同。

为了提高效率,节约内存,按照该变量表达的值范围与表达的精度范围,把同一类划分成几个种别,不同种别分配不同数目的内存单元。

整数:有4 种,种别值即为字节数n 。

种别值n取值范围(-28n-1 —28n-1 -1)INTEGER([KIND=]1) 或INTEGER*1-128 — 127INTEGER([KIND=]2) 或INTEGER*2-32768 — 32767INTEGER([KIND=]4) 或INTEGER*4-2147483648 — 2147483647缺省值INTEGER([KIND=]8) 或INTEGER*8-9223372036854775808 —9223372036854775807仅用于Alpha芯片机型实型数:有3 种。

F90 标准没有规定指数的允许范围和有效位数,。

REAL([KIND=]4) or REAL*4通常实数的范围是10-38 —1038 之间的7 位有效数字缺省值REAL([KIND=]8) or REAL*8等价于双精度型DOUBLE PRECISIONREAL([KIND=]16) or REAL*16仅用于OpenVMS 、Tru64 UNIX、Linux 操作系统复型数:有3 种。

每种表示整型数据或实型数据的方法都可以用来表示复型数据的实部和虚部。

注意简写与完整写法之间的差别。

COMPLEX([KIND=]4) or COMPLEX*8缺省值COMPLEX([KIND=]8) or COMPLEX*16等价于双精度复型DOUBLE COMPLEXCOMPLEX([KIND=]16) or COMPLEX*32仅用于OpenVMS 、Tru64 UNIX 、Linux操作系统逻辑型:有4 种LOGICAL([KIND=]1) or LOGICAL*1LOGICAL([KIND=]2) or LOGICAL*2LOGICAL([KIND=]4) or LOGICAL*4缺省值LOGICAL([KIND=]8) or LOGICAL*8仅用于Alpha 芯片机型字符型:有1 种CHARACTER([KIND=]1)字节型BYTE :取值为1 个字节,等价于INTEGER([KIND=]1) 。

F90 中关于种别选择的内部函数有:KIND(X) :函数KIND 用于查询变量的种别,它返回X 的种别值,当X 取值为0 时,返回标准种别值即缺省值。

如:KIND(0) 返回值是整型的标准种别值,KIND(0.) 、KIND(.FALSE.) 、KIND(“A ”) 分别返回实型、逻辑型、字符型的标准种别值。

SELECTED_REAL_KIND([n][,m]) :该函数返回实型变量对所取的值范围和精度恰当的种别值。

相关主题