1. 数学基础
1.1 张量定义
这里我们仅对张量的运算法则进行简单讨论,对于张量的物理意义,数学意义等不做过多探讨.
本章节默认使用了求和约定
openFoam中的基本运算单元/数据结构是张量
如果只关注张量作为一种数学结构的定义,那么张量是这样一种东西:
\[r(\mathbf{A}) = M^s \]
其中\(M\)称为张量\(\mathbf{A}\)的维数,\(s\)称为张量\(\mathbf{A}\)的阶数,\(r(\mathbf{A})\)称为张量\(\mathbf{A}\)的秩,表示张量分量的个数.对于一般情况下,\(M\)一般取为3,即3维张量.在此情况下,有:
\[\mathbf{A} = 3^r \]
- 当\(s\)取值为0时,\(r(\mathbf{A})=1\),即:0阶张量就是我们常说的标量
- 当\(s\)取值为1时,\(r(\mathbf{A})=3\),即:1阶张量就是我们常说的矢量
- 当\(s\)取值为2,3时,\(r(\mathbf{A})\)分别为9,27.
- 当然,\(s,M\)可以随意的取任意值,但这与本文主要研究CFD内容的主题不相符,在此不再讨论.如果有时间可以再写一篇关于数学和物理中的张量的文章
1.2张量运算
-
加减法
张量间的加减法必定是在相同阶数之间的张量进行的.
对于高于0阶的张量,加减法即为两张量各对应元素进行加/减. -
数乘/除
对于数乘运算,即是张量的每个元素分别乘以乘数
对于除法运算也是相同的做法,但注意,只能用标量去做除数 -
张量点乘
张量的点乘可以在一个阶数为\(s_1\)的张量和一个阶数为\(s_2\)的阶数之间进行.得到的结果为一个阶数为\(s = s_1 + s_2\)的张量
对于不同阶的张量点乘,我们分别进行讨论:当然我们可以给出一个普遍的表达式,实际上,在不少数学或者物理的书中,是> 先定义张量的并乘和缩并,之后再定义张量的点乘运算,但是鉴于我们实际上考> 虑的只有四种类型的张量,并且在CFD中我们相当重视实际的运算,因此对不同> 类型的张量点乘进行分别讨论是有意义的
- 一阶张量(矢量)之间的点乘
如大家早已学过的一样,两个矢量的点乘结果为\(s=1+1-2=0\) 阶的张量,即为一个标量:
\[u = \mathbf{a}_i\mathbf{b}_i \]- 二阶张量与一阶张量的点乘
点乘的结果为\(s = 1+2-1=1\) 阶张量:
\[\mathbf{u}_i = \mathbf{T}_{ji}\mathbf{a}_j = \left(\begin{matrix} \mathbf{T}_{11}\mathbf{a}_1 + \mathbf{T}_{21}\mathbf{a}_2 + \mathbf{T}_{31}\mathbf{a}_3\\ \mathbf{T}_{12}\mathbf{a}_1 + \mathbf{T}_{22}\mathbf{a}_2 + \mathbf{T}_{32}\mathbf{a}_3\\ \mathbf{T}_{13}\mathbf{a}_1 + \mathbf{T}_{23}\mathbf{a}_2 + \mathbf{T}_{33}\mathbf{a}_3 \end{matrix}\right) \]注意,从此时开始,点乘操作不再可交换,即:
\[\mathbf{T}\cdot\mathbf{a}\neq\mathbf{a}\cdot\mathbf{T} \]- 二阶张量之间的点乘
点乘的结果为\(s = 2 + 2 - 2 = 2\) 阶张量:
\[\mathbf{u}_{ij} = \mathbf{T}_{ik}\mathbf{P}_{kj} \]此运算仍然是不可交换的
- 一阶张量与三阶张量的点乘
点乘的结果为\(s=1+3-2=2\) 阶张量
\[\mathbf{u}_{ij} = \mathbf{a}_k\mathbf{P}_{kij} \]此运算也是不可交换的
- 二阶张量与三阶张量的点乘
点乘的结果为\(s=2+3-2=3\)阶张量:
\[\mathbf{u}_{ijk} = \mathbf{T}_{ik}\mathbf{P}_{ijk} \]此运算也是不可交换的
你可能注意到了,我们并没有谈论三阶张量之间的点乘,因为那将产生一个四阶向量,在CFD领域,我们不会遇到这一情况,因此我们可以偷点懒,并使运算在本文中保持封闭
- 一阶张量(矢量)之间的点乘