Вектор нагрузки 3D

Теперь вычислим вектор нагрузки для трёхмерного случая. Вектор нагрузки связан с интегралом произведения функции источника на пробную функцию. Рассмотрим интеграл для одного тетраэдра с вершинами

(xi,yi,zi),(xi+1,yi+1,zi+1),(xi+2,yi+2,zi+2),(xi+3,yi+3,zi+3)(x_i, y_i, z_i), \quad (x_{i+1}, y_{i+1}, z_{i+1}), \quad (x_{i+2}, y_{i+2}, z_{i+2}), \quad (x_{i+3}, y_{i+3}, z_{i+3})
тетf(x,y,z)υdV.\int_{\text{тет}} f(x, y, z) \cdot \upsilon \,dV.
(6.45)

Пробная функция на тетраэдре имеет вид υ(i)(i+3)(x,y,z)\upsilon_{(i)(i+3)}(x, y, z) =qiϕi(x,y,z)= q_i \cdot \phi_i(x, y, z) +qi+1ϕi+1(x,y,z)+ q_{i+1} \cdot \phi_{i+1}(x, y, z) +qi+2ϕi+2(x,y,z)+ q_{i+2} \cdot \phi_{i+2}(x, y, z) +qi+3ϕi+3(x,y,z)+ q_{i+3} \cdot \phi_{i+3}(x, y, z). Для вычисления интеграла необходимо интерполировать функцию источника f(x,y,z)f(x, y, z) на тетраэдре линейной функцией. Представим f(x,y,z)f(x, y, z) в виде f~(x,y,z)\widetilde{f}(x, y, z) =e1= e_1 +e2x+ e_2 \cdot x +e3y+ e_3 \cdot y +e4z+ e_4 \cdot z. Коэффициенты e1,e2,e3,e4e_1, e_2, e_3, e_4 определяются из условий интерполяции в узлах

e1\displaystyle e_1 +e2xi\displaystyle + e_2 \cdot x_i +e3yi\displaystyle + e_3 \cdot y_i +e4zi\displaystyle + e_4 \cdot z_i =fi\displaystyle = f_ie1\displaystyle e_1 +e2xi+1\displaystyle + e_2 \cdot x_{i+1} +e3yi+1\displaystyle + e_3 \cdot y_{i+1} +e4zi+1\displaystyle + e_4 \cdot z_{i+1} =fi+1\displaystyle = f_{i+1}e1\displaystyle e_1 +e2xi+2\displaystyle + e_2 \cdot x_{i+2} +e3yi+2\displaystyle + e_3 \cdot y_{i+2} +e4zi+2\displaystyle + e_4 \cdot z_{i+2} =fi+2\displaystyle = f_{i+2}e1\displaystyle e_1 +e2xi+3\displaystyle + e_2 \cdot x_{i+3} +e3yi+3\displaystyle + e_3 \cdot y_{i+3} +e4zi+3\displaystyle + e_4 \cdot z_{i+3} =fi+3\displaystyle = f_{i+3}
(6.46)

Поскольку функции «крышки» ϕn\phi_n равны единице в своём узле и нулю в остальных, линейный интерполянт функции источника, выраженный через них, принимает вид

f~(x,y,z)\displaystyle \widetilde{f}(x, y, z) =fiϕi\displaystyle = f_i \cdot \phi_i +fi+1ϕi+1\displaystyle + f_{i+1} \cdot \phi_{i+1} +fi+2ϕi+2\displaystyle + f_{i+2} \cdot \phi_{i+2} +fi+3ϕi+3,\displaystyle + f_{i+3} \cdot \phi_{i+3},
(6.47)

где fi,fi+1,fi+2,fi+3f_i, f_{i+1}, f_{i+2}, f_{i+3} — значения функции источника в вершинах тетраэдра.

Подставим интерполированную функцию источника и пробную функцию в (6.45). Примем во внимание (6.30) из раздела о функциях «крышек»

тетf(x,y,z)υdV\displaystyle \int_{\text{тет}} f(x, y, z) \cdot \upsilon \,dV =тет(nfnϕn)(mqmϕm)dV\displaystyle = \int_{\text{тет}} \left( \sum_{n} f_n \cdot \phi_n \right) \cdot \left( \sum_{m} q_m \cdot \phi_m \right) \,dV =mnqmfnтетϕmϕndV,\displaystyle = \sum_{m} \sum_{n} q_m \cdot f_n \cdot \int_{\text{тет}} \phi_m \cdot \phi_n \,dV,

где индексы mm и nn пробегают вершины тетраэдра {i,i\{i, i +1,i+1, i +2,i+2, i +3}+3\}.

Воспользуемся соотношениями (6.31) для интегралов произведений функций «крышек», выведенными при вычислении матрицы демпфирования, где VтетV_{\text{тет}} — объём тетраэдра, который вычисляется по формуле (6.15). После приведения подобных получаем

тетf(x,y,z)υdV\displaystyle \int_{\text{тет}} f(x, y, z) \cdot \upsilon \,dV =Vтет20[qi(2fi+fi+1+fi+2+fi+3)+qi+1(fi+2fi+1+fi+2+fi+3)+qi+2(fi+fi+1+2fi+2+fi+3)+qi+3(fi+fi+1+fi+2+2fi+3)]\displaystyle = \frac{\displaystyle V_{\text{тет}}}{\displaystyle 20} \cdot \Big[ q_i \cdot (2 \cdot f_i + f_{i+1} + f_{i+2} + f_{i+3}) + q_{i+1} \cdot (f_i + 2 \cdot f_{i+1} + f_{i+2} + f_{i+3}) + q_{i+2} \cdot (f_i + f_{i+1} + 2 \cdot f_{i+2} + f_{i+3}) + q_{i+3} \cdot (f_i + f_{i+1} + f_{i+2} + 2 \cdot f_{i+3}) \Big]

Введём обозначения для элементов локального вектора нагрузки тетраэдра

ri=Vтет20(2fi+fi+1+fi+2+fi+3)ri+1=Vтет20(fi+2fi+1+fi+2+fi+3)ri+2=Vтет20(fi+fi+1+2fi+2+fi+3)ri+3=Vтет20(fi+fi+1+fi+2+2fi+3)\begin{split} &r_i = \frac{\displaystyle V_{\text{тет}}}{\displaystyle 20} \cdot (2 \cdot f_i + f_{i+1} + f_{i+2} + f_{i+3})\\ &r_{i+1} = \frac{\displaystyle V_{\text{тет}}}{\displaystyle 20} \cdot (f_i + 2 \cdot f_{i+1} + f_{i+2} + f_{i+3})\\ &r_{i+2} = \frac{\displaystyle V_{\text{тет}}}{\displaystyle 20} \cdot (f_i + f_{i+1} + 2 \cdot f_{i+2} + f_{i+3})\\ &r_{i+3} = \frac{\displaystyle V_{\text{тет}}}{\displaystyle 20} \cdot (f_i + f_{i+1} + f_{i+2} + 2 \cdot f_{i+3}) \end{split}
(6.48)

Таким образом, локальный вектор нагрузки для трёхмерного тетраэдрального элемента имеет вид

Rтет=[riri+1ri+2ri+3]=Vтет20[2111121111211112][fifi+1fi+2fi+3].\begin{aligned}\mathbf{R}_{\text{тет}} = \begin{bmatrix} r_i\\ r_{i+1}\\ r_{i+2}\\ r_{i+3} \end{bmatrix} = \frac{\displaystyle V_{\text{тет}}}{\displaystyle 20} \begin{bmatrix} 2 & 1 & 1 & 1\\ 1 & 2 & 1 & 1\\ 1 & 1 & 2 & 1\\ 1 & 1 & 1 & 2 \end{bmatrix} \begin{bmatrix} f_i\\ f_{i+1}\\ f_{i+2}\\ f_{i+3} \end{bmatrix}.\end{aligned}
(6.49)

Заметим, что полученный вектор нагрузки совпадает с произведением локальной матрицы демпфирования (6.33) на вектор узловых значений источника, то есть Rтет\mathbf{R}_{\text{тет}} =Cтетf= \mathbf{C}_{\text{тет}} \cdot \mathbf{f}.

Глобальный вектор нагрузки R\mathbf{R} получается путём суммирования вкладов от всех тетраэдральных элементов сетки методом сборки: элементы локальных векторов добавляются к соответствующим элементам глобального вектора согласно глобальной нумерации узлов. Размерность глобального вектора нагрузки равна NN, где NN — общее количество узлов сетки. Важно отметить, что для внутренних узлов происходит суммирование вкладов от всех смежных тетраэдральных элементов, содержащих данный узел. Для граничных узлов элементные вклады собираются так же, но при последующем учёте граничных условий соответствующие компоненты системы могут изменяться.