Федеральное агентство по образованию Московский инженерно-физический институт (государственный университет)
Ю.В. Конова...
44 downloads
193 Views
1MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Федеральное агентство по образованию Московский инженерно-физический институт (государственный университет)
Ю.В. Коновалов, О.В. Нагорнов, П.С. Цыбенко
Учебно-методическое пособие по курсу “Математическое моделирование физических процессов” Часть 1. Модели ледниковых покровов в приближении тонкого слоя льда
Рекомендовано УМО “Ядерные физика и технологии” в качестве учебного пособия для студентов вузов
Москва 2007
УДК 53.01(076.5)+551.32.01(076.5) ББК 22.3ся7+26.222.8я7 К 64 Коновалов Ю.В., Нагорнов О.В., Цыбенко П.С. Учебно-методическое пособие по курсу “Математическое моделирование физических процессов” Часть 1. Модели ледниковых покровов в приближении тонкого слоя льда. М: МИФИ, 2007. – 76 с. Учебное пособие рассчитано на студентов, специализирующихся по направлениям “Прикладная математика и информатика” и “Физика Земли и планет”. Одной из составляющих курса “Математическое моделирование физических процессов” является семестровый практикум, относящийся к области научно-исследовательских задач в геофизике (гляциологии). В рамках представленного практикума рассматриваются математические постановки задачи о течении ледниковых масс, исследования формы ледникового покрова с помощью аналитических и численных методов решения нелинейного дифференциального уравнения параболического типа. Численные решения основаны как на конечноразностном методе, так и на методе конечных элементов. Представлены решения, реализованные с помощью математического пакета Maple. Пособие предназначено как для студентов старших курсов, так и для аспирантов и научных работников, специализирующихся в области математического моделирования и применения численных методов в научных исследованиях. Пособие подготовлено в рамках Инновационной образовательной программы. Рецензент доктор физ.-мат. наук, профессор Н.А. Кудряшов ISBN 978-5-7262-0815-2
©
Московский инженерно-физический институт (государственный университет), 2007
Редактор Т.В.Волвенкова Подписано в печать 25.10.07. Формат 60x84 1/16. П.л. 4,75. Уч.-из.л. 4,75. Тираж 200 экз. Изд. № 3/50. Заказ № Московский инженерно-физический институт (государственный университет). 115409, Москва, Каширское шоссе, 31 Типография издательства “Тровант”. г. Троицк Московской обл.
Оглавление Введение
4
§ 1. Закон Глена. Основные уравнения, описывающие течение льда и эволюцию ледниковых покровов
7
§ 2. Приближение тонкого слоя льда. Приближенные аналитические решения для скорости течения льда
12
§ 3. Уравнение поверхности ледникового покрова
15
§ 4. Плоская модель течения льда в ледниковом покрове
17
§ 5. Аксиально-симметричый ледниковый купол
32
§ 6. Консервативная разностная схема для двумерного уравнения поверхности
36
§ 7. Решение уравнения поверхности методом конечных элементов (методом Галеркина)
53
§ 8. Задачи для самостоятельного решения
74
Список литературы
76
3
Введение Ледниковые покровы Земли представляют интерес с научноисследовательской точки зрения, т.к. они содержат достаточно полную палеоклиматическую информацию о химическом составе атмосферы и глобальной температуре Земли. Эта информация содержится в осадках, ежегодно выпадающих на поверхность ледникового покрова, которые, фактически, со временем формируют ледниковый покров, ежегодно аккумулируясь на его поверхности. Каждый годовой слой снега под давлением вышележащих слоев уплотняется, достигая плотности льда, и постепенно перемещается от поверхности к основанию ледникового покрова, сохраняя в себе указанную палеоклиматическую информацию о химическом составе атмосферы в момент образования соответствующего годового слоя. Таким образом, основная задача гляциологических исследований заключается в датировках и изучении химического состава проб льда, извлеченных из ледникового покрова в результате кернового бурения, и основная часть гляциологических исследований посвящена сбору таких данных в различных регионах Земли. В частности, изменения глобальной температуры Земли в прошлом определяются по относительной концентрации δ18 O – стабильного изотопа 18 O по отношению к основному изотопу 16 O , т.к. эта концентрация в атмосферных осадках зависит от температуры, при которой происходило их формирование [2, 14]. Например, скважинные измерения концентраций углекислоты и метана ( CO 2 и CH 4 ) в Антарктиде (скважина “Восток”) позволили установить корреляции между изменениями концентраций парниковых газов в атмосфере и изменениями глобальной температуры Земли (по данным δ18 O ) за последние 16 ⋅ 10 4 лет [7; 8]. С другой стороны, эволюция ледниковых покровов – изменение ледниковой массы, границ областей залегания ледниковых покровов – также является индикатором изменений климата Земли. Ледниковые покровы эволюционируют под влиянием изменений баланса массы на поверхности (аккумуляции осадков и сезонного таяния) и в результате течения льда, т.е. непрерывной во времени деформации льда под действием 4
приложенных напряжений, возникающих в поле силы тяжести. В отличие от вязкой жидкости не удается удовлетворительно описать непрерывную деформацию льда в рамках линейного соотношения между компонентами тензоров скоростей деформаций и девиатора напряжений. Компоненты этих тензоров связаны нелинейным соотношением – реологическим законом Глена, – в котором учитывается зависимость вязкости от скорости деформации [16]. Изменения ледниковой массы в ледниковых покровах могут быть спрогнозированы, опираясь на математические модели течения льда, в основе которых лежат уравнения, описывающие движение сплошной среды, и закон Глена. Эти уравнения включают в себя уравнение непрерывности для несжимаемой среды, уравнения движения сплошной среды, уравнение переноса тепла и уравнение баланса массы льда в ледниковом покрове. Уравнения движения сплошной среды с учетом малости скорости течения льда, фактически, заменяются уравнениями механического равновесия твердого тела в поле силы тяжести, которые вместе с уравнением непрерывности и законом Глена определяют скорости течения льда на данный момент времени – система диагностических уравнений. Изменения области ледникового покрова со временем определяются решением уравнения баланса массы. Таким образом, решение задачи об эволюции ледникового покрова заключается в последовательном решении системы диагностических уравнений на каждом временном шаге и уравнения баланса массы. Вязкость льда зависит от температуры [16], и в общем случае следует также учитывать изменения температуры льда со временем, решая уравнение переноса тепла. Дальнейшие преобразования (упрощения) системы диагностических уравнений, связанные, в частности, с уменьшением количества неизвестных функций и, соответственно, сокращением объема вычислений, приводят к различным моделям течения льда. Существуют модели, основанные на приближенных аналитических решениях для скорости течения льда (приближение тонкого слоя льда) [9; 10; 13], на численных решениях уравнений механического равновесия льда в поле силы тяжести с учетом закона Глена [11; 12; 13, 14] и уравнения непрерывности [5; 17]. В данном учебном пособии рассмотрена модель, основанная на приближенных 5
аналитических решениях, требующая минимального объема вычислений, т.к. в этом случае задача определения эволюции ледника сводится к решению только прогностического уравнения (для заданной температуры льда). Прогностическое уравнение в данном случае представляет собой нелинейное дифференциальное уравнение параболического типа. Решения прогностического уравнения получены конечно-разностным методом, методом конечных элементов и реализованы с помощью математического пакета Maple.
6
§ 1. Закон Глена. Основные уравнения, описывающие течение льда и эволюцию ледниковых покровов 1.1. Закон Глена Под действием приложенных напряжений поликристаллический лед непрерывно деформируется (в пространстве и во времени), что приводит к течению льда в ледниковых покровах. Скорости течения льда варьируются в широком диапазоне значений от ~ 1м/год до ~ 10 3 м/год в зависимости от геометрии ледникового покрова, толщины льда, граничных условий и термодинамического состояния льда. Например, максимальные, известные значения скорости течения льда (~ 10 3 м/год) достигаются в шельфовых ледниках (ледник Росса, Антарктида). В плоскопараллельном слое льда под действием приложенных скалывающих напряжений (рис.1) возникает непрерывная деформация льда и единственная, отличная от нуля, компонента тензора скоростей деформаций связана с соответствующей компонентой тензора напряжений законом Глена: ε& xz = A (σ ′xz )n , (1) где коэффициент текучести A определяется температурой льда.
z
σ ′xz
x Рис. 1. Поле скоростей в плоскопараллельном слое льда 7
В случае сложной деформации льда в ледниковом покрове выражение, связывающее скорости деформации с девиатором напряжений, должно обладать свойством инвариантности по отношению к ортогональным преобразованиям координат. Нелинейное соотношение вида (1), обладающее свойством инвариантности, может быть записано для скалярных величин – инвариантов соответствующих тензоров. Лед представляет собой несжимаемую среду. Соответственно, первый инвариант тензора скоростей деформаций ε&ii = 0 – уравнение непрерывности для несжимаемой среды. Предположим, что вторые инварианты тензоров скоростей деформаций и девиатора напряжений связаны соотношением:
ε& = A( σ ′)n ,
(2)
где ε& = ε&ik ε&ik / 2 и σ ′ = σ ik′ σ ik′ / 2 . Тогда частный случай непрерывной деформации льда в плоскопараллельном слое (см. рис. 1) удовлетворяет выражению (2). С другой стороны, в изотропной несжимаемой среде, как, например, в несжимаемой вязкой жидкости, должно иметь место линеаризованное соотношение между компонентами тензоров ε&ik и σ ik′ : σ ik′ = 2η ε&ik , (3) которое выражает собой тот факт, что чем больше компонента девиатора напряжений σ ik′ , тем быстрее возрастает i-ая компонента скорости течения в сплошной среде в направлении оси х k . Из выражений (2) и (3) следует, что для вторых инвариантов тензоров имеют место соотношения: −
1
1
σ ′ = A n ε& n , σ ′ = 2η ε& . Сравнивая эти соотношения, получим выражение для коэффициента вязкости η : 1
η=
1 −n A ε& 2
1− n n
.
(4) 8
Таким образом, закон Глена в общем случае имеет вид [16]: 1
σ ik′ = 2η ε&ik ; η =
1 −n A ε& 2
1− n n
.
(5)
1.2. Система диагностических уравнений Основными уравнениями для определения скорости течения льда в ледниковом покрове являются уравнение непрерывности в несжимаемой среде и уравнение движения сплошной среды [3]: r div v = 0; (6) ∂ vi ∂ vi 1 ∂ σ ik + vk = + g i , i = 1,2,3; ∂t ∂ xk ρ ∂ xk r где v – скорость течения льда; ρ – плотность льда ( ρ ≈ 910 кг/м 3 ); r g – ускорение свободного падения. Полагая, что характерное время задачи для уравнений (6) τ ≥ 1 год и характерное значение скорости v ~ 10 3 м/год, получим v для левой части уравнения движения оценку: ≤ 10 −12 м/с 2 . Правая
τ
часть уравнения движения является величиной ≥10 м/c 2 . Таким образом, фактически, вследствие малости скорости течения льда, распределение напряжений в ледниковом покрове определяется уравнениями механического равновесия льда в поле силы тяжести [4]:
∂ σ ik + ρ g i = 0; i = 1,2,3. ∂ xk Окончательно, система уравнений для определения скорости течения льда имеет вид:
9
r ⎧div v = 0; ⎪∂σ ⎪ ik + ρ g i = 0; i = 1,2,3; ⎪⎪ ∂ x k ⎨ 1 1− n 1 −n n ⎪ ⎪σ ik′ = 2η ε&ik ; η = 2 A ε& ; ⎪ ⎪⎩ x, y ∈ Ω; hb ≤ z ≤ hs ;
(7)
где ось z направлена вертикально вверх; hb ( x, y ) и hs ( x, y ) – высоты основания и свободной поверхности ледникового покрова над уровнем моря; Ω – область залегания ледникового покрова. Система уравнений (7) не содержит времени явно. Она определяет поле скорости течения льда для заданного распределения температуры льда и данной геометрии ледникового покрова, которая определяется уровнями основания hb ( x, y ) и свободной поверхности hs ( x, y ) . Эта система может быть названа системой диагностических уравнений. Граничными условиями для уравнений (7) являются условие свободной поверхности σ ik nk = 0 при z = hs и условие отсутствия r проскальзывания в базисном слое v = 0 при z = hb для ледникового покрова, расположенного на земле. Для шельфового ледника граничным условием при z = hb является σ ik nk = − p ni , где p = − ρ w g hb – гидростатическое давление на соответствующей глубине. В определенных случаях, для ледниковых покровов, распложенных на земле, также возможно проскальзывание в базисном слое. Тогда скорость проскальзывания определяется величиной скалывающих напряжений в базисном слое. 1.3. Уравнение баланса массы. Прогностическое уравнение Течение льда, изменения в аккумуляции (количестве выпадающих осадков) и сезонном таянии снега на поверхности ледника, а также существующее в ряде случаев придонное таяние приводят к изменению формы поверхности ледникового покрова со временем. Баланс массы льда в прямоугольном параллелепипеде 10
(рис. 2), верхняя и нижняя грани которого находятся на уровнях hs ( x, y ) и hb ( x, y ) , определяет изменение толщины льда в точке ( x*, y*) за время ∆t : ρ ∆H ∆x ∆y = a0 ∆x∆y ∆t − hs
hs
hs
hs
hb
hb
hb
hb
ρ ∆t (∆y ∫ u x + ∆x dz −∆y ∫ u x dz + ∆x ∫ v y + ∆y dz − ∆x ∫ v y dz ), где u и v – горизонтальные компоненты скорости течения льда, a0 – поток льда через единицу площади поверхности и основания ледникового покрова в единицу времени, учитывающий аккумуляцию и сезонное таяние на поверхности, а также придонное таяние в основании ледника. Переходя к пределам ∆x, ∆y, ∆t → 0 , получим уравнение баланса массы в ледниковом покрове, определяющее изменение формы ледника со временем: r ∂H (8) = a − div q , ∂t H r ⎧H ⎫ где a = a0 / ρ , q = ⎨ ∫ u dz; ∫ v dz ⎬ . 0 ⎭ ⎩0 Уравнение (8) определяет эволюцию ледника и называется прогностическим уравнением.
Г
Ω y+∆y
(x*,y*)
y
x
x+∆x
Рис. 2. Область залегания ледникового покрова Ω с границей Γ 11
1.4. Уравнение переноса тепла Изменение температуры льда со временем определяется уравнением переноса тепла [3]:
( )
r ⎛ ∂T r r ⎞ + v , ∇ T ⎟⎟ = div ( χ ∇T ) + σ ik′ ε&ik . ⎝ ∂t ⎠
ρ с ⎜⎜
С учетом закона Глена (5) уравнение переноса тела в ледниковом покрове окончательно может быть записано в виде: 1 1+ n r − r r div ( χ ∇T ) 2 A n ε& n ∂T + v, ∇ T = + . ρс ρc ∂t
( )
(9)
§ 2. Приближение тонкого слоя льда. Приближенные аналитические решения для скорости течения льда Рассмотрим плоскую модель течения льда (рис. 3). В приближении тонкого слоя H 0 / L0 << 1 , где H 0 – толщина ледникового покрова в окрестности вершины, L0 – линейные размеры основания. В таком приближении может быть получено выражение для горизонтальной составляющей скорости течения льда, основанное на законе Глена (2) и оценках производных компонент скорости течения, входящих в выражение для второго инварианта тензора скоростей деформаций.
12
z
r u H0
σ ′xz x
L0 Рис. 3. Геометрия течения ледника
В данном случае плоского течения, с учетом уравнения непрерывности для несжимаемой среды ( ε& xx + ε& zz = 0 ), второй инвариант тензора скоростей деформаций 2
2
⎛ ∂u ⎞ 1 ⎛ ∂u ∂ w⎞ ⎟⎟ , w – вертикальная ε& = ε& xx + ε& xz = ⎜⎜ ⎟⎟ + ⎜⎜ + ⎝∂x⎠ 4⎝∂z ∂x ⎠ компонента скорости течения льда. Пусть v0 – характерное значение скорости течения льда в ледниковом покрове. Тогда имеют место следующие оценки: ε& xx v v u ′x ∂ w ∂u ∂u H < ~ 0 ; ~ 0 ; ~ << 1 ; << 1 . (10) ∂x ∂x L ∂z H u ′z ε& xz L 2
2
Следовательно, для второго инварианта тензора скоростей деформаций в приближении тонкого слоя имеет место равенство: 1 ∂u ε& ≈ ε& xz ≈ . 2 ∂z Для компонент девиатора напряжений с учетом уравнения непрерывности и соотношений (3) имеет место равенство σ ′xx = −σ ′zz . Соответственно, второй инвариант девиатора 2 2 напряжений σ ′ = σ ′xx + σ ′zz .
13
Принимая во внимание соотношение между компонентами тензора скоростей деформаций (10), получим σ ′xx << 1 ; σ ′ ≈ σ ′xz . σ ′xz Таким образом, закон Глена (2) принимает вид: 1 ∂u n ≈ A σ ′xz . 2 ∂z
(11)
В рассматриваемом приближении малых углов наклона свободной поверхности для компоненты σ ′xz имеет место приближенное равенство: ∂h σ ′xz ≈ ρ g (hs − z ) s . (12) ∂x Окончательно закон Глена (11) с учетом выражения (12) приводит к дифференциальному уравнению относительно горизонтальной компоненты скорости течения льда: n
1 ∂u n n ∂ hs = A (ρ g ) (hs − z ) 2 ∂z ∂x
.
Учитывая, что скорость возрастает от основания к поверхности и направлена противоположно градиенту уровня свободной поверхности hs (x) , получим уравнение:
∂u n n ∂ hs = −2 A (ρ g ) (hs − z ) ∂z ∂x
n −1
∂ hs . ∂x
(13)
Интегрирование уравнения (13) с учетом проскальзывания в базисном слое дает:
u ( x, ξ ) = u b − 2 A (ρ g )
n
∂ hs ∂x
n −1
(
∂ hs H n +1 1 − ξ n +1 ∂ x n +1
)
(14)
hs − z . H Из выражения (14) непосредственно следует, что течение льда в рассматриваемом приближении определяется углом наклона свободной поверхности и не зависит от течения льда в соседних с точкой x областях. Это обстоятельство дает возможность обобщить 14
где ξ =
полученный результат на трехмерный случай, полагая, что горизонтальная составляющая скорости течения льда определяется градиентом уровня свободной поверхности hs ( x, y ) : r r n −1 n +1 r 2 n u ( x, y , ξ ) = − A ( ρ g ) ∇ hs ∇ h s H 1 − ξ n +1 . (15) n +1
(
)
§ 3. Уравнение поверхности ледникового покрова Основываясь на результатах предыдущего параграфа, в приближении тонкого слоя задача определения изменений формы поверхности ледникового покрова со временем заключается в решении уравнений баланса массы (8) и переноса тепла (9). r Вектор q в уравнении баланса массы (8) для горизонтальной составляющей скорости течения льда (15) имеет вид: r r n −1 n + 2 r 2 n q =− A ( ρ g ) ∇h s ∇h s H . (16) n+2 Подстановка этого выражения в уравнение баланса массы (8) приводит к уравнению: r n −1 ∂ hs ∂h ⎞ ∂ ⎛ 2A ⎜⎜ (ρ g )n ∇hs (hs − hb )n + 2 s ⎟⎟ + = a+ ∂x ⎠ ∂t ∂x⎝n+2 (17) r n −1 ∂ ⎛ 2A n n + 2 ∂ hs ⎞ ⎜ ⎟. (ρ g ) ∇hs (hs − hb ) ∂ y ⎜⎝ n + 2 ∂ y ⎟⎠ Далее, будем рассматривать ледниковый покров с постоянной температурой льда, т.е. коэффициент текучести льда A является постоянной величиной. Введем масштабы измерения координат L0 (линейные размеры основания), времени T0 и толщины покрова Z 0 . Тогда, в результате обезразмеривания уравнения (17) получим уравнение поверхности ледникового покрова в виде:
∂s ∂ s ⎞ ∂ ⎛ r n −1 ∂s ⎞ ∂ ⎛ r n −1 ⎜⎜ ∇s (s − b )n + 2 ⎟⎟ + ⎜⎜ ∇s (s − b )n + 2 ⎟ (18) =1 + ∂t ∂x⎝ ∂x⎠ ∂ y⎝ ∂ y ⎟⎠ 15
при условии, что масштабы измерения координат, времени и толщины покрова связаны между собою соотношениями:
2 A (ρ g ) Z 0 n
2 n+ 2
(n + 2) L0 n+1
1
⎛ a (n + 2) L0 n +1 ⎞ 2(n +1) Z ⎟ = a , или Z 0 = ⎜ ; T0 = 0 . (19) ⎜ 2 A ( ρ g )n ⎟ a ⎝ ⎠
Таким образом, в приближении тонкого слоя задача определения прогнозов эволюции ледникового покрова сводится к решению уравнения эллиптического типа в следующей математической постановке:
⎧∂ s ∂ ⎛ ∂s⎞ ∂ ⎛ ∂s ⎞ ⎜k ⎟+ ⎜k ⎟, ⎪ =1 + ∂ x ⎜⎝ ∂ x ⎟⎠ ∂ y ⎜⎝ ∂ y ⎟⎠ ⎪∂t ⎪ x, y ∈ Ω, t > 0; ⎨ ⎪s = b( x, y ); ⎪ t =0 ⎪s = b . Γ ⎩ Γ
r n −1 n+2 k = ∇s (s − b ) , (20)
В такой постановке дополнительно предполагается, что в течение рассматриваемого промежутка времени границы области залегания ледникового покрова остаются неизменными. Порядок значения толщины льда в окрестности вершины определяется линейными размерами основания области залегания ледникового покрова согласно выражению (19). Масштаб измерения времени T0 определяет порядок времени накопления ледниковой массы, т.е. порядок времени, за которое решение задачи (20) выходит на стационарное решение. § 4. Плоская модель течения льда в ледниковом покрове Если линейные размеры основания ледникового покрова в направлении оси y много больше линейных размеров в направлении x , т.е.
∂s ∂s << , то течение льда можно считать ∂y ∂x 16
плоским (§ 2). В этом случае задача (20) сводится к задаче для одномерного уравнения поверхности. Постановка этой задачи для случая плоского горизонтального основания ледникового покрова имеет вид: n −1 ⎧∂ s ∂ ⎛ ∂s ⎞ ∂s ⎪ =1 + ⎜⎜ k ⎟⎟ , k = sn+2 , ∂x⎝ ∂x⎠ ∂x ⎪∂t ⎪ ⎨s t = 0 = 0; ⎪ ⎪∂ s = 0; s x =1 = 0. ⎪∂ x x =0 ⎩
0 < x < 1, t > 0; (21)
4.1. Форма поверхности стационарного ледникового купола Существует аналитическое решение одномерного стационарного уравнения поверхности: n −1 n ⎞ d ⎛⎜ d s d ⎛⎜ d s n +2 ⎞⎟ n+2 d s ⎟ 1+ = 0 , или 1= s . s ⎟ d x⎜ d x d x⎜ d x d x⎟ ⎝ ⎠ ⎝ ⎠ Интегрирование этого уравнения с учетом граничного условия ∂s = 0 приводит к уравнению с разделяющимися переменными: ∂ x x =0 n
x=s
ds ds , или − s dx dx
n+2
n+2 n
=
1 xn
.
Соответственно, с учетом второго граничного условия s x =1 = 0 получим 0
s −∫~ s
n+ 2 n
1
1
d~ s =∫~ x n d~ x. x
Окончательно, аналитическое решение для стационарной формы поверхности ледникового покрова в рамках плоской модели течения льда имеет вид: 17
s st = 2
n 2 ( n +1)
n
n +1 2 ( n +1) ⎛ ⎞ ⎜1 − x n ⎟ . ⎜ ⎟ ⎝ ⎠
(22)
4.2. Консервативная разностная схема поверхности (плоская модель течения льда)
для
уравнения
Запишем уравнение баланса массы в стационарном ледниковом покрове, форма поверхности которого определяется d ⎛ ds⎞ ⎜k ⎟, уравнением на отрезке с границами, 1=− d x ⎜⎝ d x ⎟⎠ расположенными в полуцелых узлах i − 1 / 2 , i + 1 / 2 равномерного разбиения отрезка [0,1] (рис. 4): ∆x = qi +1 / 2 − qi −1 / 2 , где qi ±1 / 2 – безразмерные значения потоков льда в единицу времени на единицу длины в направлении y через боковые границы, расположенные в узлах i ± 1 / 2 . Они определяются выражениями:
qi +1 / 2 ≈ − k i +1 / 2 где k i +1 / 2
si +1 − si ; ∆x
s −s = i +1 i ∆x
i-1
n −1
qi −1 / 2 ≈ −k i −1 / 2
⎛ s i + s i +1 ⎞ ⎜ ⎟ 2 ⎠ ⎝
si − si −1 ; ∆x
n+2
≡ ki .
i-1/2
i
(23)
i+1/2
i+1
Рис. 4. Шаблон разностной схемы Таким образом, консервативная разностная схема для одномерного стационарного уравнения поверхности имеет вид: 18
1= −
s − si −1 ⎫ 1 ⎧ si +1 − si − k i −1 i ⎨k i ⎬. ∆x ⎩ ∆x ∆x ⎭
Соответственно, неявная консервативная разностная схема для одномерного нестационарного уравнения поверхности будет иметь вид: m +1 m m +1 si − si − s im−1+1 ⎫ 1 ⎧ m s im+1+1 − s im +1 m si k k =1 + − ⎨ i ⎬. i −1 ∆τ ∆x⎩ ∆x ∆x ⎭ Вопрос о линеаризации разностной схемы решается аналогично случаю нелинейного уравнения теплопроводности – значения коэффициента k определяются по значениям s на предыдущем временном слое. Окончательно разностная схема для задачи (21) имеет вид:
(
)
⎧ m +1 ⎧ 1 m ⎫ m +1 ⎧ 1 1 ⎫ m m ⎪s i −1 ⎨− 2 k i −1 ⎬ + s i ⎨ 2 k i −1 + k i + ∆τ ⎬ + ⎩ ∆x ⎩ ∆x ⎭ ⎭ ⎪ m ⎪⎪ m +1 ⎧ 1 m ⎫ si ⎨+ s i +1 ⎨− 2 k i ⎬ = 1 + ∆τ , i = 2...N − 1; ⎭ ⎩ ∆x ⎪ ⎪s1m +1 = s 2m +1 ; s Nm +1 = 0; ⎪ ⎪⎩s i0 = 0, i = 1...N .
(24)
Схема (24) имеет первый порядок точности по времени и координате, вследствие аппроксимации граничного условия в т. x = 0 с первым порядком точности. Для того чтобы схема имела второй порядок точности по координате, в т. x = 0 необходимо использовать уравнение баланса массы, вводя в рассмотрение дополнительные узлы в области x < 0 , а также условие четности функции s относительно плоскости ледораздела ( x = 0 ). Т.е., если узел i находится на линии ледораздела, то имеют место следующие условия: si −1 = si +1 ; k i −1 = k i . Используя эти условия в уравнении (24), получим уравнение баланса массы в узле i = 1 . Таким образом, разностная схема второго порядка точности имеет вид: 19
(
)
⎧ m +1 ⎧ 1 m ⎫ m +1 ⎧ 1 1 ⎫ m m ⎪s i −1 ⎨− 2 k i −1 ⎬ + s i ⎨ 2 k i −1 + k i + ∆τ ⎬ + ⎩ ∆x ⎭ ⎩ ∆x ⎭ ⎪ m ⎪ m +1 ⎧ 1 m ⎫ s ⎪⎪+ s i +1 ⎨− 2 k i ⎬ = 1 + i , i = 2...N − 1; ∆τ ⎩ ∆x ⎭ ⎨ ⎪ m ⎪s1m +1 ⎧⎨ 2 k1m + 1 ⎫⎬ + s 2m +1 ⎧⎨− 2 k1m ⎫⎬ = 1 + s1 ; s Nm +1 = 0; 2 2 ⎪ ∆τ ⎭ ∆τ ⎩ ∆x ⎩ ∆x ⎭ ⎪ 0 ⎪⎩s i = 0, i = 1...N .
(25)
Далее представлена программа численного решения задачи (21) (разностной схемы (25)), реализованная с помощью математического пакета Maple. В качестве входных данных заданы следующие значения (§ 1): a = 0.3 м/год ; ρ = 910 кг/м 3 ; A = 10 −16 Па − n год −1 ; n = 3 ;
g = 9.8 м/c 2 ; L0 = 10 5 м . Решение системы линейных алгебраических уравнений (25) с 3-диагональной матрицей осуществлено посредством встроенной процедуры решения СЛАУ из пакета Linear Algebra. На графиках в программе последовательно представлены аналитическое решение (22), расположение ненулевых элементов матрицы системы, уровни поверхности ледникового покрова в различные моменты времени, изменение толщины ледникового покрова на линии ледораздела ( x = 0 ) со временем. Время накопления ледниковой массы (время выхода решения задачи (25) на стационарное решение (22)) для выбранных значений входных данных составляет ≈ 6 ⋅ 10 3 лет – значение представлено в конце программы. Устойчивость разностной схемы (25) исследовалась непосредственным сравнением решения задачи (25), которое выходит на стационарное решение при t ≥ 1.8 , с аналитическим решением (22) стационарного уравнения. В частности, установлено, что для коэффициента вида (23) разностная схема (25) является условно устойчивой. Значения шагов по времени ∆τ , для которых проведены вычисления, представлены в табл.1. В таблице также приведены 20
числа узлов разбиения по координате, начиная с которых для заданного шага по времени проявляется нарушение сходимости численного решения задачи (21) к стационарному решению (22). Таким образом, схема (25) устойчива при условии γ = ∆τ / ∆x 2 < α , где α ≈ 0.75 . На графиках после программы представлены примеры неустойчивости решения для некоторых значений временного шага ∆τ из рассмотренного диапазона (табл. 1) и γ > 0.75 . Значения коэффициента k i достаточно определять по значениям si на предыдущем временном слое. Переопределение значений k i на каждом временном шаге по новым значениям si с помощью итерационной процедуры, фактически, не влияет на конечный результат – расхождение в решениях (на конечный момент времени) без итераций и с десятью итерациями проявляется в четвертом знаке после запятой для ∆τ = 10 −2 . Причиной является относительно малое значение шага по времени, начиная с которого схема (25) дает устойчивое решение.
Таблица 1. Значения шагов программы ∆τ 2 ⋅ 10 −2 10 −2 5 ⋅ 10 −3 2 ⋅ 10 −3
N max ∆τ ∆x 2
8
10
14
21
0.98
0.81
0.85
0.8
Продолжение табл. 1. ∆τ 10 −4 5 ⋅ 10 −5 88 124 N max
∆τ ∆x 2
0.76
0.76
2 ⋅ 10 −5 195 0.75
21
10 −3 29 0.78
5 ⋅ 10 −4 40 0.76
2 ⋅ 10 −4 63 0.77
> #============================================ > #======= 1D Ice Sheet Model (1D-model) ============ > #============================================ > > restart: > > with(LinearAlgebra): > > #-------------------> N_Glen:=3;
N_Glen:=3
> a:=0.3;
a :=0.3
> dens:=910;
dens:=910
> g:=9.8; > Ao:=1e-16;
g :=9.8
Ao := 0.1 10 -15
> Lo:=10^5;
Lo :=100000
> Zo:=(a*(N_Glen+2)*Lo^(N_Glen+1)/(2*Ao*(dens*g)^N_Glen))^(1/( 2*(N_Glen+1)));
Zo := 1007.006694
> To:=Zo/a;
To := 3356.688980
> #-----------------------------------------------------------------------> #-------- Steady State Ice Sheet, Analytic Solution ----------> #-----------------------------------------------------------------------> > Sa:=2^(N_Glen/(2*N_Glen+2))*(1x^((N_Glen+1)/N_Glen))^(N_Glen/(2*N_Glen+2)); ( 3/8 ) ( 3/8 ) ( 4/3 )
Sa := 2
(1 − x 22
)
> plot(Zo*Sa,x=0..1,numpoints=10,axes=boxed,title="Steady State Ice Cap Surface", labels=["Distance from the Summit (X),*100 km","Altitude, m"], labeldirections=[HORIZONTAL,VERTICAL], color=black,thickness=3);
> #-------------------------------------------------------------> Nt:=2000;
Nt := 2000
> Nx:=21; > dx:=1/(Nx-1);
> dt:=0.001;
Nx :=21 1 dx := 20
dt := 0.001
> #-------------------------------------------------------------> N1:=100: N2:=200: N3:=300: N4:=500: N5:=800: N6:=1000: > #-------------------------------------------------------------> K_eff:=array(1..Nx-1): > #-----------------> S:=array(1..Nx): > So:=array(1..Nx): > #-------------------------------------------------------------> H_Ice_Summit:=array(0..Nt): 23
> #-------------------------------------------------------------> M:=Matrix(Nx);
> V:=Vector(Nx);
⎡ ⎢ ⎢ M := ⎢ ⎢ ⎢ ⎣
⎡ ⎢ ⎢ V := ⎢ ⎢ ⎢ ⎣
21 x 21 Matrix ⎤ Data Type: anything⎥⎥ Storage: rectangular ⎥⎥ Order: Fortran_order⎥⎦
21 Element Column Vector⎤ ⎥ Data Type: anything ⎥ ⎥ Storage: rectangular ⎥ ⎥ Order: Fortran_order ⎦
> #------------------------------------------------------------> for i from 1 to Nx do S[i]:=0: end do: > #------------------------------------------------------------> H_Ice_Summit[0]:=S[1]: > #------------------------------------------------------------> for i from 1 to Nx do So[i]:=S[i]: end do: > #------------------------------------------------------------> > for m from 1 to Nt do for Iitr from 1 to 1 do for i from 1 to Nx-1 do K_eff[i]:=abs((So[i+1]-So[i])/dx)^(N_Glen1)*((So[i]+So[i+1])/2)^(N_Glen+2): end do:
LL:=[[seq(-K_eff[i-1]/dx^2,i=2..Nx-1),0], [2*K_eff[1]/dx^2+1/dt,seq((K_eff[i-1]+K_eff[i])/dx^2+1/dt,i=2..Nx1),1], [-2*K_eff[1]/dx^2,seq(-K_eff[i]/dx^2,i=2..Nx-1)]]: M:=BandMatrix(LL): for i from 1 to Nx-1 do V[i]:=1+S[i]/dt: end do: S_solve:=LinearSolve(M,V): 24
for i from 1 to Nx do So[i]:=S_solve[i]: end do: end do: for i from 1 to Nx do S[i]:=So[i]: end do: if m=N1 then for i from 1 to Nx do S1[i]:=S[i]: end do: end if: if m=N2 then for i from 1 to Nx do S2[i]:=S[i]: end do: end if: if m=N3 then for i from 1 to Nx do S3[i]:=S[i]: end do: end if: if m=N4 then for i from 1 to Nx do S4[i]:=S[i]: end do: end if: if m=N5 then for i from 1 to Nx do S5[i]:=S[i]: end do: end if: if m=N6 then for i from 1 to Nx do S6[i]:=S[i]: end do: end if: H_Ice_Summit[m]:=S[1]: end do: > > #-----------------------------------------------------------> plots[sparsematrixplot](M,title="Non-zero matrix elements locations");
> 25
> #-----------------------------------------------------> L_x:=[seq((i-1)*dx,i=1..Nx)]: > #-------------------------------->gr0:=plot(Sa*Zo,x=0..1,numpoints=20,color=black,style=point,sym bol=circle,symbolsize=18,legend="Analitic Steady State Solution"): > L_S:=[seq(S1[i]*Zo,i=1..Nx)]: Surf:=spline(L_x,L_S,x,1): gr1:=plot(Surf,x=0..1,numpoints=30,color=red,thickness=2,linestyle= 2,legend="Numeric Solution, Nt=100"): > L_S:=[seq(S2[i]*Zo,i=1..Nx)]: Surf:=spline(L_x,L_S,x,1): gr2:=plot(Surf,x=0..1,numpoints=30,color=red,thickness=2,linestyle= 3,legend="Numeric Solution, Nt=200"): > L_S:=[seq(S3[i]*Zo,i=1..Nx)]: Surf:=spline(L_x,L_S,x,1): gr3:=plot(Surf,x=0..1,numpoints=30,color=red,thickness=2,linestyle= 4,legend="Numeric Solution, Nt=300"): > L_S:=[seq(S4[i]*Zo,i=1..Nx)]: Surf:=spline(L_x,L_S,x,1): gr4:=plot(Surf,x=0..1,numpoints=30,color=red,thickness=2,linestyle= 5,legend="Numeric Solution, Nt=500"): > L_S:=[seq(S5[i]*Zo,i=1..Nx)]: Surf:=spline(L_x,L_S,x,1): gr5:=plot(Surf,x=0..1,numpoints=30,color=red,thickness=2,linestyle= 6,legend="Numeric Solution, Nt=800"): > L_S:=[seq(S6[i]*Zo,i=1..Nx)]: Surf:=spline(L_x,L_S,x,1): gr6:=plot(Surf,x=0..1,numpoints=30,color=red,thickness=3,linestyle= 7,legend="Numeric Solution, Nt=1000"): > L_S:=[seq(S[i]*Zo,i=1..Nx)]: Surf:=spline(L_x,L_S,x,1): gr7:=plot(Surf,x=0..1,numpoints=30,color=blue,thickness=3,linestyle =1,legend="Numeric Solution, Nt=2000"): > plots[display]([gr0,gr1,gr2,gr3,gr4,gr5,gr6,gr7],axes=boxed,title="Ice Sheet Surface",labels=["Distance from the Summit (X),*100 km","Elevation, m"],labeldirections=[HORIZONTAL,VERTICAL]);
26
> #------------------------------------------------------------> L_t:=[seq(m*dt,m=0..Nt)]: > L_S:=[seq(H_Ice_Summit[m],m=0..Nt)]: > Surf:=spline(L_t,L_S,t,1): > plot(Surf,t=0..Nt*dt,numpoints=10,axes=boxed,title="The Ice Sheet Thickness at the Summit", labels=["Time, nondimensional","Elevation, nondimensional"],labeldirections=[HORIZONTAL,VERTICAL],color= black,thickness=3,linestyle=1);
27
> #------------------------------------------------------------------> #--------- The full time of the ice accumulation ---------> #------------------------------------------------------------------> T_accumulation:=To*1.8;
T_accumulation
:= 6042.040164
Дополнение. Примеры неустойчивости схемы. > #+++++++++++++++++++++++++++++++++++++++++++++++ > #+++++++ The examples of the model instability +++++++++++ > #+++++++++++++++++++++++++++++++++++++++++++++++ > > #-- dt:=0.02: Nx:=8: --
28
> #--- dt:=0.01: Nx:=11: ---
> 29
> #--- dt:=0.005: Nx:=14: ---
> #--- dt:=0.001: Nx:=30: ---
30
> > #--- dt:=0.0005: Nx:=41: ---
> #--- dt:=0.0001: Nx:=90: ---
31
> #--- dt:=0.00005: Nx:=128: ---
§ 5. Аксиально-симметричый ледниковый купол В случае, когда областью залегания ледникового покрова является круг, задача (20) обладает аксиальной симметрией. Соответственно, математическая постановка задачи для уравнения поверхности в случае аксиальной симметрии имеет вид: n −1 ⎧∂ s 1 ∂ ⎛ ∂s⎞ ∂s ⎪ =1 + ⎜⎜ rk ⎟⎟ , k = sn+2 , t r r r r ∂ ∂ ∂ ∂ ⎪ ⎝ ⎠ ⎪ ⎨s t = 0 = 0; ⎪ ⎪∂ s = 0; s r =1 = 0. ⎪∂ r ⎩ r =0
32
0 < r < 1, t > 0; (26)
5.1. Стационарная форма поверхности ледникового купола. Аналитическое решение Алогично рассмотренному в предыдущем параграфе случаю плоского течения льда интегрирование уравнения поверхности стационарного аксиально-симметричного ледникового купола дает выражение, которое определяет форму поверхности:
s st = 2
n −1 2 ( n +1)
n
n +1 2 ( n +1) ⎛ ⎞ ⎜1 − r n ⎟ . ⎜ ⎟ ⎝ ⎠
(27)
5.2. Консервативная разностная схема поверхности в случае аксиальной симметрии
для
уравнения
Консервативная разностная схема в случае стационарного, аксиально-симметричного ледникового купола, поверхность 1 d ⎛ ds⎞ ⎜ rk ⎟ , следует из которого определяется уравнением 1 = − r d r ⎜⎝ d r ⎟⎠ уравнения баланса массы льда в цилиндрическом слое между двумя коаксиальными цилиндрами, проходящими через узлы i − 1 / 2 , i + 1 / 2 равномерного разбиения отрезка [0,1] :
2π ri ∆r = 2π ri +1 / 2 qi +1 / 2 − 2 π ri −1 / 2 qi −1 / 2 ; где qi +1 / 2 ≈ − k i +1 / 2
k i +1 / 2
s −s = i +1 i ∆r
n −1
si +1 − si ; ∆r ⎛ si + si +1 ⎞ ⎜ ⎟ 2 ⎠ ⎝
qi −1 / 2 ≈ −k i −1 / 2
si − si −1 ; ∆r
n+ 2
≡ ki .
Консервативная разностная схема аксиально-симметричном случае имеет вид:
33
в
стационарном,
1= −
s −s r +r s − si −1 ⎫ 1 ⎧ ri + ri +1 k i i +1 i − i −1 i k i −1 i ⎨ ⎬. ri ∆r ⎩ 2 2 ∆r ⎭ ∆r
(28)
Неявная консервативная разностная схема для нестационарного уравнения поверхности в аксиально-симметричном случае, соответственно, имеет вид:
s im +1 − s im =1 + ∆τ 1 ⎪⎧ ri + ri +1 m s im+1+1 − s im +1 ri −1 + ri m s im +1 − s im−1+1 ⎫⎪ ki k i −1 + − ⎨ ⎬ ri ∆r ⎪⎩ 2 2 ∆r ∆r ⎪⎭
(29)
Консервативная разностная схема в узле i = 1 ( r = 0 ) следует из уравнения баланса массы в цилиндре радиуса r3 / 2 = ∆r / 2 , которое в стационарном случае имеет вид:
π ∆r 2 / 4 = π ∆r q3 / 2 ; где q3 / 2 = − k1
s 2 − s1 . ∆r
Соответственно, разностная схема в узле i = 1 выглядит следующим образом:
s 2m +1 − s1m +1 4 m m +1 =1 + k s 2 − s1m +1 . 2 1 ∆τ ∆r
(
)
Окончательно, для задачи (26) получим следующую разностную схему второго порядка точности по координате:
34
⎧ m +1 ⎧⎪ ri −1 + ri m ⎫⎪ m +1 ⎧⎪ ri −1 + ri m ri + ri +1 m 1 ⎫⎪ + + k + k k s ⎪s i −1 ⎨− ⎨ ⎬+ ⎬ 1 1 i i − − i i ∆τ ⎪⎭ ⎪⎩ 2ri ∆r 2 ⎪⎩ 2ri ∆r 2 ⎪⎭ 2ri ∆r 2 ⎪ ⎪ m ⎪+ s m +1 ⎧⎪− ri + ri +1 k m ⎫⎪ = 1 + s i , ⎨ ⎬ ⎪ i +1 ⎪ 2r ∆r 2 i ⎪ ∆τ i ⎩ ⎭ ⎪⎪ (30) ⎨ i = 2...N − 1; ⎪ m ⎪s m +1 ⎧⎨ 4 k m + 1 ⎫⎬ + s m +1 ⎧⎨− 4 k m ⎫⎬ = 1 + s1 ; s m +1 = 0; N ⎪ 1 ⎩ ∆r 2 1 ∆τ ⎭ 2 ⎩ ∆r 2 1 ⎭ ∆τ ⎪ 0 ⎪s i = 0, i = 1...N . ⎪ ⎪⎩ Программа и результаты вычислений с помощью схемы (30) аналогичны результатам для одномерной задачи (21), рассмотренной в предыдущем параграфе. Отношение высот аксиальносимметричного ледникового купола и ледникового покрова (задача (21)) определятся решениями стационарных задач (27), (22) и для вершины составляет ≈ 0.92 (для n = 3 ). Соответственно, время накопления ледниковой массы (время выхода решения задачи (26) на стационарное) для аксиально-симметричного ледникового купола меньше, чем для ледникового покрова. Отношение времен составляет величину ≈ 0.85 . Разностная схема (30), как и схема (25), устойчива при условии γ = ∆τ / ∆r 2 < α , где α ≈ 1.35 . Числа узлов разбиения по координате, начиная с которых для заданного шага по времени проявляется нарушение сходимости численного решения, представлены в табл.2. Эти значения больше соответствующих значений в табл.1 приблизительно в 1.3 ( 2 ) раза. Таблица 2. Параметры шагов программы ∆τ 2 ⋅ 10 −2 10 −2 5 ⋅ 10 −3 2 ⋅ 10 −3
N max
10
13
18
27
∆τ / ∆r 2
1.62
1.44
1.44
1.35
35
10 −3 38 1.37
5 ⋅ 10 −4 54 1.4
Продолжение табл. 2. ∆τ 2 ⋅ 10 −4 10 −4 85 120 N max
170
1.41
1.43
∆τ / ∆r 2
1.42
5 ⋅ 10 −5
Далее, рассмотрены методы численного решения задачи для двумерного уравнения поверхности ледникового покрова. § 6. Консервативная разностная схема для двумерного уравнения поверхности Рассмотрим случай, когда областью залегания ледникового покрова является квадрат, и построим консервативную разностную для двумерного уравнения поверхности. Математическая постановка задачи в этом случае имеет вид: n −1 ⎧ 2 2 ⎧ ⎫ ⎪∂ s ⎛ ∂ s ⎞ ⎪ 2 n+2 ∂ ⎛ ∂s⎞ ∂ ⎛ ∂s ⎞ ⎪⎛ ∂ s ⎞ ⎜⎜ k ⎟⎟ + ⎜⎜ k ⎟⎟, k = ⎨⎜⎜ ⎟⎟ + ⎜⎜ ⎟⎟ ⎬ s , ⎪ =1 + ∂x⎝ ∂x⎠ ∂ y ⎝ ∂ y⎠ ⎝ ∂ y ⎠ ⎪⎭ ⎪⎩⎝ ∂ x ⎠ ⎪∂t ⎪ (31) ⎨0 < x < 1, 0 < y < 1, t > 0; ⎪ ⎪s t =0 = 0; ⎪ ⎪⎩s Γ = 0.
Аналогично рассмотренным в предыдущих параграфах пространственно-одномерным случаям, консервативная разностная схема для двумерного уравнения в стационарном случае может быть получена, исходя из баланса массы в прямоугольном параллелепипеде, основанием которого является квадрат с вершинами в полуцелых узлах (рис. 5):
36
i +1 / 2 , j +1 / 2
∫
∆2 −
i −1 / 2 , j +1 / 2
q x dy +
i +1 / 2 , j −1 / 2
где q x = − k
∫
q x dy −
i −1 / 2 , j −1 / 2
i +1 / 2 , j +1 / 2
∫
i +1 / 2 , j −1 / 2
q y dx +
i −1 / 2 , j +1 / 2
∫q
y dx i −1 / 2 , j −1 / 2
= 0 ; (32)
r n −1 ∂s ∂s ; q y = −k ; k = ∇ s s n + 2 ; ∆ – шаг координатной ∂x ∂y
сетки.
i-1, j+1
i, j+1
i-1/2, j+1/2
i+1/2, j+1/2
i-1, j
i, j
i-1/2, j-1/2
i-1, j-1
i+1, j+1
i+1, j
i+1/2, j-1/2
i, j-1
i+1, j-1
Рис. 5. Шаблон разностной схемы для двумерной задачи
37
Аппроксимация интегралов методом прямоугольников приводит к следующей разностной схеме:
⎧ s i +1, j − s i , j k i +1 / 2, j +1 / 2 + k i +1 / 2, j −1 / 2 ⎫ ⋅ − ⎪ ⎪ ∆ 2 ⎪ ⎪ ⎪ s i , j − s i −1, j k i −1 / 2, j +1 / 2 + k i −1 / 2, j −1 / 2 ⎪ ⋅ +⎪ ⎪− ⎪ ⎪ ∆ 2 ∆2 + ∆ ⎨ ⎬ =0. ⎪+ s i , j +1 − s i , j ⋅ k i −1 / 2, j +1 / 2 + k i +1 / 2, j +1 / 2 − ⎪ ⎪ ⎪ ∆ 2 ⎪ ⎪ ⎪− s i , j − s i , j −1 ⋅ k i −1 / 2, j −1 / 2 + k i +1 / 2, j −1 / 2 ⎪ ∆ 2 ⎩⎪ ⎭⎪
(33)
Выражение, аппроксимирующее коэффициент k в полуцелом узле i + 1 / 2, j + 1 / 2 со вторым порядком точности, имеет вид:
k i +1 / 2, j +1 / 2
((
⎧ ⎪ 1 ≈⎨ 2 ⎪⎩ 4 ∆
(
)
⎛ s i +1, j − s i , j + s i +1, j +1 − s i , j +1 2 ⎜ ⎜+ s i , j +1 − s i , j + s i +1, j +1 − s i +1, j ⎝
(
) )
⋅ s i , j + s i +1, j + s i , j +1 + s i +1, j +1 / 4
n+2
⎞⎫⎪ ⎟ 2 ⎟⎬ ⎠⎪⎭
)
n −1 2
⋅
(34)
≡ k i, j .
Соответственно, из схемы (33) с учетом (34) следует, что неявная консервативная схема для нестационарного уравнения поверхности в рассматриваемой задаче (31) имеет вид:
38
(
)
⎧ m +1 ⎧ 1 1 m ⎫ m m m ⎪s i , j ⎨ ∆τ + 2 k i , j + k i , j −1 + k i −1, j + k i −1, j −1 ⎬ + ∆ ⎩ ⎭ ⎪ ⎪ ⎧ 1 ⎫ m m ⎪s im+1+,1j ⎨− k k + ⎬+ i j i j − , , 1 2 2 ∆ ⎪ ⎩ ⎭ ⎪ ⎪ m +1 ⎧ 1 m m ⎫ ⎪s i , j +1 ⎨− 2 ∆2 k i −1, j + k i , j ⎬ + ⎩ ⎭ ⎪ ⎪ ⎫ m ⎪s m +1 ⎧− 1 k m i −1, j −1 + k i , j −1 ⎬ + ⎨ i , j −1 ⎨ 2 ⎩ 2∆ ⎭ ⎪ ⎪ ⎧ ⎫ ⎪s im−1+,1j ⎨− 1 k im−1, j + k im−1, j −1 ⎬ = 2 ⎪ ⎩ 2∆ ⎭ ⎪ m si, j ⎪ ; 1 < i < N, 1 < j < N; ⎪= 1 + ∆τ ⎪ ⎪s1m, j+1 = s Nm ,+j1 = 0; 1 ≤ j ≤ N ; ⎪ ⎪⎩s im,1+1 = s im, N+1 = 0; 1 < i < N .
(
)
(
)
(
)
(
)
(35)
Решение задачи (35) сводится к решению СЛАУ, которая образуется после перехода от двумерного массива значений si , j к одномерному массиву посредством взаимнооднозначного соответствия между множеством узлов координатной сетки и множеством натуральных чисел отрезка 1, N 2 : (i, j ) ↔ (i − 1) N + j . Таким образом, столбец неизвестных значений СЛАУ состоит из N столбцов, и каждый i-й столбец содержит N элементов s (i −1)N + j ,
[
]
1≤ j ≤ N . Соответственно, разностной схеме (35) в узле i, j соответствует уравнение (строка матрицы A p ,q ) СЛАУ с номером
(i − 1) N +
j . Ненулевыми элементами этой строки (для внутреннего узла) будут следующие элементы: 39
(
)
1 1 m + k i , j + k im, j −1 + k im−1, j + k im−1, j −1 ; ∆τ ∆2 1 A(i −1)N + j , i N + j = − 2 k im, j + k im, j −1 ; 2∆ 1 A(i −1)N + j , (i −1)N + j +1 = − 2 k im−1, j + k im, j ; 2∆ A(i −1)N + j , (i −1)N + j =
(
)
(
A(i −1)N + j , (i −1)N + j −1 = − A(i −1)N + j , (i − 2 )N + j = −
)
(
)
1 k im−1, j −1 + k im, j −1 ; 2 2∆
(
)
1 k im−1, j + k im−1, j −1 . 2 ∆2
Учитывая симметрию ледникового купола относительно плоскостей x = 1 / 2 , y = 1 / 2 , с целью уменьшения объема вычислений задача для уравнения поверхности может быть рассмотрена в области, соответствующей 1/4 части ледникового купола. Т.е. задачу (31) можно рассматривать в следующей математической постановке: n −1 ⎧ 2 2 ⎧ ⎫ ⎪∂ s ⎛ ∂ s ⎞ ⎪ 2 n+2 ∂ ⎛ ∂s⎞ ∂ ⎛ ∂s ⎞ ⎪⎛ ∂ s ⎞ ⎜⎜ k ⎟⎟ + ⎜⎜ k ⎟⎟, k = ⎨⎜⎜ ⎟⎟ + ⎜⎜ ⎟⎟ ⎬ s , ⎪ =1 + ∂x⎝ ∂x⎠ ∂ y⎝ ∂ y⎠ ⎝ ∂ y ⎠ ⎪⎭ ⎪⎩⎝ ∂ x ⎠ ⎪∂t ⎪ ⎪0 < x < 1, 0 < y < 1, t > 0; (36) ⎨ ⎪s t =0 = 0; ⎪ ∂s ⎪∂ s ⎪ ∂x x =0; = 0; ∂ y y =0; = 0; s x =1 = 0; s y =1 = 0. ⎪⎩ 0≤ y <1 0≤ x <1
Аналогично одномерному случаю разностная схема для задачи (35) будет иметь второй порядок точности по координате, если на границах квадрата x = 0 , y = 0 использовать разностную схему для уравнения поверхности во внутренних узлах, учитывая условия симметрии: si −1, j = si +1, j , k i −1, j = k i , j (на границе x = 0) и 40
si , j −1 = si , j +1 , k i , j −1 = k i , j
(на
границе y = 0 ).
Тогда
граничные
условия будут иметь вид:
(
)
(
)
2 ⎧ 1 ⎫ ⎧ 1 ⎫ s1m, j+1 ⎨ + 2 k1m, j + k1m, j −1 ⎬ + s 2m, +j 1 ⎨− 2 k1m, j + k1m, j −1 ⎬ + ⎭ ⎩ ∆τ ∆ ⎭ ⎩ ∆ s1m, j ⎧ 1 ⎫ ⎧ 1 ⎫ + s1m, j++11 ⎨− 2 k1m, j ⎬ + s1m, j+−11 ⎨− 2 k1m, j −1 ⎬ = 1 + , i = 1, j = 2...N − 1; ∆τ ⎩ ∆ ⎭ ⎩ ∆ ⎭ 2 ⎫ ⎧ 1 ⎫ ⎧ 1 + 2 k im−1,1 + k im,1 ⎬ + s im, 2+1 ⎨− 2 k im−1,1 + k im,1 ⎬ + s im,1+1 ⎨ ⎭ ⎩ ∆ ⎭ ⎩ ∆τ ∆
(
)
(
)
s im,1 1 m ⎫ ⎧ 1 m⎫ m +1 ⎧ + − + − = + k s k 1 , j = 1, i = 2...N − 1; ⎨ 2 i ,1 ⎬ i −1,1 ⎨ 2 i −1,1 ⎬ ∆τ ⎩ ∆ ⎭ ⎩ ∆ ⎭ 4 ⎧ 1 ⎫ ⎧ 2 ⎫ + 2 k1m,1 ⎬ + s 2m,1+1 ⎨− 2 k1m,1 ⎬ + s1m,1+1 ⎨ ⎩ ∆τ ∆ ⎭ ⎩ ∆ ⎭
(37)
s im+1+,11
s1m,1 ⎧ 2 ⎫ + s1m, 2+1 ⎨− 2 k1m,1 ⎬ = 1 + , i = 1, j = 1. ∆τ ⎩ ∆ ⎭ Численное решение задачи (35) реализовано с помощью математического пакета Maple. На графиках в программе (в конце параграфа) последовательно представлены: расположение ненулевых элементов матрицы системы, уровни поверхности ледникового покрова в различные моменты времени в плоскостях ледораздела ( x = 0 и y = 0 ), изменение толщины ледникового покрова на вершине со временем, форма поверхности ледника. Время накопления ледниковой массы (время выхода решения задачи (25) на стационарное решение (22)) для выбранных значений входных данных составляет ≈ 6 ⋅ 10 3 лет – значение представлено в конце программы. Результаты получены как для постоянной во времени аккумуляции a(t ) = 1 , так и для случая периодически 6π t . осциллирующей аккумуляции a(t ) = 1 + sin T 41
Известно, что климат Земли претерпевает периодические изменения, связанные с вариациями орбиты Земли. Это проявляется в изменениях как глобальной температуры Земли, так и в количестве выпадающих на различных широтах осадков. Выделяют четыре периода изменений климата Земли: 100, 41, 23, и 19 × 10 3 лет (циклы Миланковича). В программе период изменения аккумуляции составляет величину ≈ 20 ⋅ 10 3 лет, что соответствует одному из циклов Миланковича. Период и фаза колебаний толщины льда соответствуют входным данным для аккумуляции. Аналогично одномерным случаям разностная схема (35), устойчива при условии γ = ∆τ / ∆2 < α , где α ≈ 1.2 (см. графики в конце программы). Числа узлов разбиения по координате, начиная с которых для заданного шага по времени проявляется нарушение сходимости численного решения, представлены в табл.3. Таблица 3. Параметры шагов программы ∆τ 2 ⋅ 10 −2 10 −2 5 ⋅ 10 −3 2 ⋅ 10 −3
N max
11
15
18
26
10 −3 36
∆τ / ∆2
2
1.96
1.45
1.25
1.23
> #=========================================== > #== 2D-Ice Cap Model, Shallow Ice Approximation ===== > #=========================================== > > restart: > #-----------------------------------------------------------> > N_Glen:=3;
N_Glen := 3
> a:=0.3; > dens:=910; > g:=9.8;
a := 0.3 dens := 910 g := 9.8 42
5 ⋅ 10 −4 51 1.25
> Ao:=1e-16; > Lo:=10^5;
Ao := 0.1 10-15 Lo := 100000
> Zo:=(a*(N_Glen+2)*Lo^(N_Glen+1)/(2*Ao*(dens*g)^N_Glen))^(1/( 2*(N_Glen+1)));
Zo := 1007.006694
> To:=Zo/a;
To := 3356.688980
> > #-------------------------------------------------------------> > Nt:=18000;
Nt := 18000
> No:=11;
No := 11
> dl:=1/(No-1);
dl := > dt:=0.001;
1 10
dt := 0.001
> > #-------------------------------------------------------------> K_eff:=array(1..No-1,1..No-1): > #-------------------------------------------------------------> S1:=array(1..No,1..No): S2:=array(1..No,1..No): > #-------------------------------------------------------------> H_Ice_Summit1:=array(0..Nt): H_Ice_Summit2:=array(0..Nt): > #-------------------------------------------------------------> > N1:=100: N2:=200: N3:=300: N4:=500: N5:=800: > > #-------------------------------------------------------------> for i from 1 to No do for j from 1 to No do S1[i,j]:=0: S2[i,j]:=0: end do: end do: > #-------------------------------------------------------------43
> H_Ice_Summit1[0]:=S1[1,1]: > H_Ice_Summit2[0]:=S2[1,1]: > #-------------------------------------------------------------> M:=Matrix(No^2);
⎡⎢ M := ⎢⎢ ⎢⎢ ⎣
> > V:=Vector(No^2);
⎡⎢ V := ⎢⎢ ⎢⎢ ⎣
121 x 121 Matrix ⎤ Data Type: anything ⎥⎥ Storage: rectangular ⎥⎥ Order: Fortran_order ⎥⎦
121 Element Column Vector ⎤ ⎥⎥ Data Type: anything ⎥⎥ Storage: rectangular ⎥⎦ Order: Fortran_order
> > #-------------------------> > for m from 1 to Nt do ...
for i from 1 to No-1 do for j from 1 to No-1 do K_eff[i,j]:=(((S2[i,j]+S2[i+1,j]+S2[i+1,j+1]+S2[i,j+1])/4)^(N_Glen+2)) *((1/(4*dl^2))*((S2[i+1,j]-S2[i,j]+S2[i+1,j+1]-S2[i,j+1])^2+(S2[i,j+1]S2[i,j]+S2[i+1,j+1]-S2[i+1,j])^2))^((N_Glen-1)/2): end do: end do: M[1,1]:=1/dt+(4/dl^2)*K_eff[1,1]: M[1,No+1]:=(-2/(dl^2))*K_eff[1,1]: M[1,2]:=(-2/(dl^2))*K_eff[1,1]: for i from 2 to No-1 do M[(i-1)*No+1,(i-1)*No+1]:=1/dt+(2/dl^2)*(K_eff[i-1,1]+K_eff[i,1]): M[(i-1)*No+1,i*No+1]:=(-1/(dl^2))*K_eff[i,1]: M[(i-1)*No+1,(i-2)*No+1]:=(-1/(dl^2))*K_eff[i-1,1]: M[(i-1)*No+1,(i-1)*No+2]:=(-1/dl^2)*(K_eff[i-1,1]+K_eff[i,1]): 44
end do: for i from 1 to No do M[(i-1)*No+No,(i-1)*No+No]:=1: end do: for j from 2 to No-1 do M[j,j]:=1/dt+(2/dl^2)*(K_eff[1,j]+K_eff[1,j-1]): M[j,j+1]:=(-1/(dl^2))*K_eff[1,j]: M[j,j-1]:=(-1/(dl^2))*K_eff[1,j-1]: M[j,No+j]:=(-1/(dl^2))*(K_eff[1,j]+K_eff[1,j-1]): end do: for j from 1 to No-1 do M[(No-1)*No+j,(No-1)*No+j]:=1: end do: for i from 2 to No-1 do for j from 2 to No-1 do M[(i-1)*No+j,(i-1)*No+j]:=(1/dt+(1/dl^2)*(K_eff[i,j]+K_eff[i1,j]+K_eff[i,j-1]+K_eff[i-1,j-1])): M[(i-1)*No+j,(i-1)*No+j+1]:=(-1/(2*dl^2))*(K_eff[i-1,j]+K_eff[i,j]): M[(i-1)*No+j,(i-1)*No+j-1]:=(-1/(2*dl^2))*(K_eff[i-1,j-1]+K_eff[i,j1]): M[(i-1)*No+j,i*No+j]:=(-1/(2*dl^2))*(K_eff[i,j]+K_eff[i,j-1]): M[(i-1)*No+j,(i-2)*No+j]:=(-1/(2*dl^2))*(K_eff[i-1,j]+K_eff[i-1,j-1]): end do: end do: V[1]:=S2[1,1]/dt+1+sin(6*evalf(Pi)*(m-1)/(Nt-1)): for i from 2 to No-1 do V[(i-1)*No+1]:=S2[i,1]/dt+1+sin(6*evalf(Pi)*(m-1)/(Nt-1)): end do: for j from 2 to No-1 do V[j]:=S2[1,j]/dt+1+sin(6*evalf(Pi)*(m-1)/(Nt-1)): end do: 45
for i from 2 to No-1 do for j from 2 to No-1 do V[(i-1)*No+j]:=S2[i,j]/dt+1+sin(6*evalf(Pi)*(m-1)/(Nt-1)): end do: end do: Surf:=LinearAlgebra[LinearSolve](M,V): for i from 1 to No do for j from 1 to No do S2[i,j]:=Surf[(i-1)*No+j]: end do: end do: H_Ice_Summit1[m]:=S1[1,1]: H_Ice_Summit2[m]:=S2[1,1]: if m=N1 then for i from 1 to No do S1t1[i]:=S1[i,1]: S2t1[i]:=S2[i,1]: end do: end if: if m=N2 then for i from 1 to No do S1t2[i]:=S1[i,1]: S2t2[i]:=S2[i,1]: end do: end if: if m=N3 then for i from 1 to No do S1t3[i]:=S1[i,1]: S2t3[i]:=S2[i,1]: end do: end if: if m=N4 then for i from 1 to No do S1t4[i]:=S1[i,1]: S2t4[i]:=S2[i,1]: end do: end if: if m=N5 then for i from 1 to No do S1t5[i]:=S1[i,1]: S2t5[i]:=S2[i,1]: end do: end if: end do: > #------------------------------------------------------------> plots[sparsematrixplot](M,symbol=circle,symbolsize=5,title="Nonzero matrix elements locations"); 46
> #------------------------------------------------------------> L_x:=[seq((i-1)*dl,i=1..No)]: > L_y:=[seq((j-1)*dl,j=1..No)]: > > #-----------------------------------------------------------> > L_S:=[seq(S1t1[i],i=1..No)]: S_sp:=spline(L_x,L_S,x,1): gr1:=plot(S_sp,x=0..1,color=red,thickness=2,linestyle=1,legend="Nt= 100"): > L_S:=[seq(S1t2[i],i=1..No)]: S_sp:=spline(L_x,L_S,x,1): gr2:=plot(S_sp,x=0..1,color=red,thickness=2,linestyle=2,legend="Nt= 200"): > L_S:=[seq(S1t3[i],i=1..No)]: S_sp:=spline(L_x,L_S,x,1): gr3:=plot(S_sp,x=0..1,color=red,thickness=2,linestyle=3,legend="Nt= 300"):
47
> L_S:=[seq(S1t4[i],i=1..No)]: S_sp:=spline(L_x,L_S,x,1): gr4:=plot(S_sp,x=0..1,color=red,thickness=2,linestyle=4,legend="Nt= 500"): > L_S:=[seq(S1t5[i],i=1..No)]: S_sp:=spline(L_x,L_S,x,1): gr5:=plot(S_sp,x=0..1,color=red,thickness=2,linestyle=5,legend="Nt= 800"): > L_S:=[seq(S1[i,round(No/2)],i=1..No)]: S_sp:=spline(L_x,L_S,x,1): gr6:=plot(S_sp,x=0..1,color=blue,thickness=3,linestyle=1,legend="Nt =1500"): > plots[display]([gr1,gr2,gr3,gr4,gr5,gr6],axes=boxed,title="Ice Cap Surface",labels=["x *200, km","Elevation, m"],labeldirections=[HORIZONTAL,VERTICAL]);
> #------------------------------------------------------------> L_S:=[seq(S1[i,1],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr1:=plot(Surf,x=0..1,color=red,thickness=3,linestyle=3,legend="y=0 "): 48
> L_S:=[seq(S1[1,j],j=1..No)]: Surf:=spline(L_y,L_S,x,1): gr2:=plot(Surf,x=0..1,color=blue,thickness=3,linestyle=1,legend="x= 0"): > plots[display]([gr1,gr2],axes=boxed,title="Ice Cap Surface Elevation at the flowlines",labels=["x,y *200, km","Elevation, nondimensional value"],labeldirections=[HORIZONTAL,VERTICAL]);
> #-------------------------------------------------------------> > Accum:=1+sin(6*evalf(Pi)*t/(18*To)): > gr1:=plot(Accum,t=0..18*To,axes=boxed,color=red,thickness=3,linest yle=4,legend="accumulation"): > > L_t:=[seq(m*dt*To,m=0..Nt)]: > L_S:=[seq(H_Ice_Summit1[m],m=0..Nt)]: > S_sp:=spline(L_t,L_S,t,1): > gr2:=plot(S_sp,t=0..Nt*dt*To,axes=boxed,color=black,thickness=3,li 49
nestyle=1,legend="Ice Thickness at the Summit, steady accumulation"): > L_S:=[seq(H_Ice_Summit2[m],m=0..Nt)]: > S_sp:=spline(L_t,L_S,t,1): > gr3:=plot(S_sp,t=0..Nt*dt*To,axes=boxed,color=blue,thickness=3,lin estyle=3,legend="Ice Thickness at the Summit, periodic accumulation"): > > plots[display]([gr1,gr2,gr3],axes=boxed,labels=["Time, years","Non-dimensional values"],labeldirections=[HORIZONTAL,VERTICAL],labeldirectio ns=[HORIZONTAL,VERTICAL]);
> > #----------------------------------------------------------------------> #------------------ The Time of Ice Accumulation -----------> #-----------------------------------------------------------------------> T_accumulation:=To*1.8;
T_accumulation := 6042.040164
> #-----------------------------------------------------------------------> #-------------- Ice Cap Thickness at the Summit -------------> #-----------------------------------------------------------------------> Thickness:=S1[1,1]*Zo;
Thickness := 1254.965269
> #-----------------------------------------------------------------------50
> > L_P:=[seq(seq([L_x[i],L_y[j],S1[i,j]],j=1..No),i=1..No)]: > > PLOT3D(POINTS(L_P),SYMBOL(CIRCLE),AXES(FRAME),TITL E("Ice Cap Surface"),AXESLABELS(X,Y,Z));
> #------------------------------------------------------------> Points:=[seq([seq(S1[i,j], j=1..No)],i=1..No)]: > plots[listcontplot](Points,contours=16,filled=true,linestyle=3,coloring =[blue,white],title="Ice Cap Surface");
51
> Дополнение. Примеры неустойчивости схемы. > #++++++++++++++++++++++++++++++++++++++++++++++++ > #++++++++ The examples of the model instability +++++++++++ > #++++++++++++++++++++++++++++++++++++++++++++++++
52
53
§ 7. Решение уравнения поверхности методом конечных элементов (методом Галеркина) Уравнение поверхности эквивалентно уравнению: r ⎫ ⎧∂ s ∫∫ ⎨ −1 − div k∇s ⎬W dx dy = 0 Ω ⎩∂t ⎭
( )
задачи
(20)
в
области
Ω
(38)
где W – произвольная непрерывная в области Ω функция, удовлетворяющая граничным условиям задачи (20): W Γ = 0 . Учитывая это граничное условие и применяя теорему ГауссаОстроградского, уравнение (36) можно записать в виде: r r ⎛∂s ⎞ (39) ∫∫ ⎜⎜ −1⎟⎟ W dx dy + ∫∫ k ∇W ∇s dx dy = 0 . Ω⎝ ∂t Ω ⎠ Метод конечных элементов заключается в следующем. Узлы разбиения области Ω (в общем случае нерегулярной сетки) соединяются непересекающимися линиями. Таким образом, область Ω разбивается на элементарные непересекающиеся области (треугольники или четырехугольники) – конечные элементы. Эта процедура носит название триангуляции области ( Ω ). Рассмотрим произвольный p -й узел разбиения и конечные элементы, одной из вершин которых является данный узел. Объединение этих элементов образует окрестность p -го узла ω p . Определим в ω p функцию g p , которая равна 1 в p -м, является заданным алгебраическим полиномом n -й степени в каждом из элементов окрестности ω p , обращается в 0 на границе ω p и равна тождественно 0 вне ω p . Например, в случае двумерной области Ω , треугольных конечных элементов и полиномов 1-й степени геометрическим образом такой функции является пирамида (рис.6, рис.7). Построенные указанным способом в каждом узле разбиения N функции g p p =1 образуют линейно независимую систему функций
{ }
в пространстве C (Ω ) – всех непрерывных в области Ω функций.
54
i-1,j
i,j+1
i+1,j+1
i,j
i+1,j
i-1,j-1
i,j-1
Рис. 6. Схема узлов элементарной ячейки МКЭ
Рис. 7. Вид базисной функции МКЭ Будем искать решение задачи (38) в подпространстве C (Ω ) ,
( )
{ }
которое является линейной оболочкой L g p – множества g p 55
N p =1
.
Т.е.
функции
однозначно
s , W ∈ L( g p )
представлены
и, в
следовательно,
виде
разложений
могут
быть
N
s = ∑ spg p , p =1
N
W = ∑ W p g p . В этих разложениях s p и W p – значения функций в p =1
узлах разбиения. Подставим указанные разложения в интеграл (39). Тогда, переходя к сумме интегралов по конечным элементам и вычисляя соответствующие интегралы (учитывая, что функции g p известны), получим уравнение (разностную схему) относительно неизвестных значений s p ( W – заданная функция). Окончательно, линейнонезависимых в
W выбрав в качестве L g p функций, получим систему
( )
N N
линейных алгебраических уравнений относительно s p (с отличным от 0 определителем). В частности, в качестве таких функций могут быть взяты базисные функции g p . Далее, применим описанную выше процедуру к задачам (31) (или (36)), когда областью Ω является квадрат. Триангуляцию области осуществим для равномерной сетки, как показано на рис. 6. Будем рассматривать базисные функции g p , которые линейно изменяются в каждом конечном элементе – это пирамиды, в основаниях которых лежат шестиугольники, образованные шестью конечными элементами (рис. 7). Тогда в любом конечном элементе (треугольнике): 3
s E (x, y, t ) = ∑ siE (t )ϕ iE ( x, y ); i =1
3
W E ( x, y ) = ∑ w Ej ϕ Ej ( x, y ); j =1
(40)
где siE (t ), w Ej – значения функций в соответствующих узлах сетки,
ϕ Ej – плоскости, образующие грани пирамид с вершинами в соответствующих узлах (рис.8): ϕ Ej ( x, y ) = α Ej x + β jE y + γ Ej , j = 1,2,3.
56
3
1
2
Рис. 8. Базисные функций в элементе i,j+1 (3)
i+1,j+1 (2)
1 2
6 i+1,j (3)
i-1,j (2)
i,j (1)
3
5 4
i-1,j-1 (3)
i,j-1 (2)
Рис. 9. Нумерация узлов 57
Коэффициенты α Ej , β jE и γ Ej являются решениями СЛАУ:
⎛ x1E y1E 1⎞ ⎛ α Ej ⎞ ⎛ δ 1 j ⎞ ⎟ ⎜ ⎜ ⎟⎜ ⎟ ⎜ x 2E y 2E 1⎟ ⎜ β jE ⎟ = ⎜ δ 2 j ⎟ , ⎟ ⎜ ⎜ E E ⎟⎜ ⎟ ⎜ x3 y 3 1⎟ ⎜ γ E ⎟ ⎜ δ 3 j ⎟ ⎠ ⎝ ⎠⎝ j ⎠ ⎝ где ( xiE , y iE ) – координаты вершин элемента (треугольника). Представив интегралы в (39) в виде суммы интегралов по конечным элементам области Ω и подставляя в эти интегралы выражения (40), получим: ⎧ ∂ s iE ⎫ ϕ iE ϕ Ej dx dy + ⎪ ⎪ ⎪ ∂t E ⎪ ⎪ ⎪ ⎪⎪ w Ej ⎨+ s iE k E ϕ iE, x ϕ Ej , x + ϕ iE, y ϕ Ej , y dx dy − ⎬ = 0 , ⎪ ⎪ E ⎪ ⎪ E ⎪ − ϕ j dx dy ⎪ ⎪⎩ E ⎪⎭
∫∫
∑ E
∫∫ (
)
(41)
∫∫
n+ 2 n −1 r r ⎛ s + s + s3 ⎞ siE s Ej ∇ϕ iE , ∇ϕ Ej 2 , по повторяющимся где k E = ⎜ 1 2 ⎟ 3 ⎠ ⎝ индексам проводится суммирование. Интегралы в выражении (41) соответственно равны:
(
(
))
aE ; 3 E ⎧aE ⎪⎪ , i = j; 6 E E ϕ ϕ = dx dy ∫∫ i j ⎨ E E ⎪ a , i ≠ j. ⎪⎩ 12 E E E E E ∫∫ ϕ i , x ϕ j , x dx dy = α i α j a ; E ∫∫ ϕ i dx dy =
E
58
E E E E E ∫∫ ϕ i , y ϕ j , y dx dy = β i β j a ; E
1 1 1 1 E E E где a – площадь элемента: a = x1 x 2 x3 . 2 E E E y1 y 2 y3 E
E
С учетом указанных выражений для интегралов и конечноразностной аппроксимации производной по времени уравнение (41) имеет вид:
⎧ ⎫ ⎧ 1 ,i = j ⎪ ⎪ ⎪ ⎪ s E m +1 ⎪⎨ 6 ∆ τ ⎪ + ⎪ i ⎪ 1 ⎪ ,i ≠ j ⎪ ⎪ ⎪⎩12 ∆ τ ⎪ ⎪ ⎪ E E ⎪ E m +1 E m E E E E w j a ⎨+ s i k αi α j + βi β j − ⎬ = 0 . ⎪ ⎪ ⎧ 1 ⎪ ⎪ ⎪ 6 ∆τ , i = j ⎪ 1 ⎪ m ⎪ E ⎪− − s i ⎪ ⎨ ⎪ 3 ⎪ ⎪ 1 ,i ≠ j ⎪ ⎪ ⎪⎩12 ∆ τ ⎩ ⎭
( )
∑∑ E
i, j
( ) ( ) (
)
(42)
( )
Чтобы получить систему уравнений относительно N 2 неизвестных значений si , j в узлах сетки, требуется задать N 2 линейно-независимых функций W и подставить соответствующие значения w j в выражение (42). Линейная независимость этих функций обеспечивает отличие от нуля определителя матрицы СЛАУ, которая формируется согласно описанному в предыдущем параграфе алгоритму. Наиболее простой способ – взять в качестве таких функций базисные функции g p . Тогда, обозначив элементы с общей вершиной в узле i, j и соответствующие вершины, как показано на рис. 9, получим следующую разностную схему: 59
6 ⎧ m +1 ⎧ 1 6 E 2 2 ⎫ s a a E k E ⎛⎜ α 1E + β 1E ⎞⎟⎬ + + ⎪ i, j ⎨ ⎠⎭ ⎝ E =1 ⎪ ⎩ 6∆τ E =1 ⎪ ⎪s im, j++11 ⎧⎨ 1 a 1 + a 2 + a 1 k 1 α 31α 11 + β 31 β 11 + a 2 k 2 α 32α 12 + β 32 β 12 ⎫⎬ + ⎪ ⎩12∆τ ⎭ ⎪ ⎪s m +1 ⎧⎨ 1 a 2 + a 3 + a 2 k 2 α 2α 2 + β 2 β 2 + a 3 k 3 α 3α 3 + β 3 β 3 ⎫⎬ + 2 1 2 1 2 1 2 1 ⎪ i −1, j ⎩12∆τ ⎭ ⎪ ⎪s m +1 ⎧ 1 a 3 + a 4 + a 3 k 3 α 3α 3 + β 3 β 3 + a 4 k 4 α 4α 4 + β 4 β 4 ⎫ + 3 1 3 1 3 1 3 1 ⎬ ⎪ i −1, j −1 ⎨⎩12∆τ ⎭ ⎪ ⎪ m +1 ⎧ 1 4 5 4 4 4 4 4 4 5 5 5 5 5 5 ⎫ ⎪s i , j −1 ⎨12∆τ a + a + a k α 2 α 1 + β 2 β 1 + a k α 2 α 1 + β 2 β 1 ⎬ + ⎩ ⎭ ⎪ ⎪ m +1 ⎧ 1 ⎫ ⎨s i +1, j ⎨ a 5 + a 6 + a 5 k 5 α 35α 15 + β 35 β 15 + a 6 k 6 α 36α 16 + β 36 β 16 ⎬ + ⎪ ⎩12∆τ ⎭ ⎪ ⎪s im+1+,1j +1 ⎧⎨ 1 a 6 + a 1 + a 6 k 6 α 26α 16 + β 26 β 16 + a 1 k 1 α 21α 11 + β 21 β 11 ⎫⎬ = ⎪ ⎩12∆τ ⎭ ⎪ m m m s i , j 6 E s i , j +1 1 s i −1, j 2 ⎪ 1 6 E = + a a + a + a2 + a + a3 + ⎪ 3 ∆ ∆ ∆ 6 12 12 τ τ τ E =1 E =1 ⎪ ⎪sm s im, j −1 4 s im+1, j 5 s im+1, j +1 6 i −1, j −1 3 4 5 6 ⎪ a +a + a +a + a +a + a + a1 ; 12 ∆ τ 12 ∆ τ 12 ∆ τ ⎪ 12 ∆ τ ⎪ (43) ⎪1 < i < N, 1 < j < N; ⎪s m +1 = s m +1 = 0; 1 ≤ j ≤ N ; N, j ⎪ 1, j ⎪s im,1+1 = s im, N+1 = 0; 1 < i < N ; ⎩
( ) ( )
∑
∑
(
)
(
(
)
(
(
)
)
)
(
)
(
)
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
∑
(
)
(
n+ 2
)
)
(
(
(
)
)
)
(
n −1
)
⎛ 3 ⎞ 2 ⎜ si s j α iα j + β i β j ⎟ . ⎜ i , j =1 ⎟ ⎝ ⎠ ненулевые элементы матрицы СЛАУ после двумерного массива неизвестных s im, j+1 в
⎛ s + s 2 + s3 ⎞ где k E = ⎜ 1 ⎟ 3 ⎝ ⎠ Соответственно, преобразования
)
(
∑
(
(
∑
(
одномерный (см. § 6) равны:
60
)
A(i −1)N + j , (i −1)N + j =
6
1 6∆τ
∑
aE +
E =1
6
∑a E =1
E
( ) + (β ) ⎞⎟⎠ ;
k E ⎛⎜ α 1E ⎝
2
E 2 1
(
)
(
)
(
)
(
)
(
)
1 A(i −1)N + j , (i −1) N + j −1 = a 4 + a 5 + a 4 k 4 α 24α 14 + β 24 β 14 + 12∆τ + a 5 k 5 α 25α 15 + β 25 β15 ;
(
)
1 a 1 + a 2 + a 1 k 1 α 31α 11 + β 31 β 11 + 12∆τ + a 2 k 2 α 32α 12 + β 32 β12 ; A(i −1)N + j , (i −1)N + j +1 =
(
)
(
)
1 a 2 + a 3 + a 2 k 2 α 22α 12 + β 22 β 12 + 12∆τ + a 3 k 3 α 23α 13 + β 23 β 13 ; A(i −1)N + j , (i − 2 )N + j =
(
)
(
)
(
)
1 a 5 + a 6 + a 5 k 5 α 35α 15 + β 35 β 15 + 12∆τ + a 6 k 6 α 36α 16 + β 36 β 16 ; A(i −1)N + j ,i N + j =
(
)
(
)
(
)
1 a 3 + a 4 + a 3 k 3 α 33α 13 + β 33 β13 + 12∆τ 4 4 4 4 4 4 + a k α 3 α 1 + β 3 β1 ; A(i −1)N + j , (i − 2 )N + j −1 =
(
) 1 (a = 12∆τ + β β ).
A(i −1)N + j ,i N + j +1
(
6
)
(
)
+ a 1 + a 6 k 6 α 26α 16 + β 26 β 16 +
1 1 + a 1 k 1 α 21α 11 2 1 В математической постановке (36), разностную схему 2-го порядка точности по координате можно получить, используя основную разностную схему (43) в граничных узлах при x = 0 , y = 0 и учитывая условия симметрии: s i −1, j = s i +1, j , s i −1, j −1 = s i +1, j −1 (на
границе x = 0 ) и s i −1, j −1 = s i −1, j +1 , s i , j −1 = s i , j +1 (на границе y = 0 ). Далее приведены результаты вычислений для математической постановки задачи (31) (схемы (43)). На графиках в программе последовательно представлены уровни поверхности ледникового покрова в различные моменты времени в плоскости ледораздела y = 1 / 2 , стационарные решения в плоскостях x = 1 / 2 и y = 1 / 2 , изменение толщины ледникового покрова на вершине со 61
временем, поверхность ледника. Время накопления ледниковой массы и толщина покрова в центральной части соответствуют результатам, полученным ранее конечно-разностным методом, соответственно, ≈ 6 ⋅ 10 3 лет и ≈ 1.2 км. В начальные моменты накопления ледниковой массы, когда ∂s производная в краевых частях претерпевает резкие изменения, ∂ xi наблюдается немонотонность изменения численного решения в отличие от решения, полученного конечно-разностным методом. Впоследствии решение выходит на монотонно изменяющиеся стационарные значения, если выполнено условие устойчивости γ = ∆τ / ∆2 < α , где α ≈ 0.4 . Устойчивость схемы исследовалась в математической постановке задачи (36) для ¼ области ледника. Результаты исследования представлены в таб. 4. Таблица 4. Параметры шагов программы ∆τ 2 ⋅ 10 −2 10 −2 5 ⋅ 10 −3 2 ⋅ 10 −3 10 −3
5 ⋅ 10 −4
2 ⋅ 10 −4
N max
7
9
11
16
21
29
44
∆τ / ∆2
0.72
0.64
0.5
0.45
0.4
0.4
0.37
> #=========================================== > #=== 2D Ice Sheet Model (Finite-Element Method) ===== > #=========================================== > restart: > #-------------------> N_Glen:=3;
N_Glen := 3
> a:=0.3; > dens:=910;
a := 0.3 dens := 910 62
> g:=9.8; > Ao:=1e-16; > Lo:=2*10^5;
g := 9.8 Ao := 0.1 10-15 Lo := 200000
> Zo:=(a*(N_Glen+2)*Lo^(N_Glen+1)/(2*Ao*(dens*g)^N_Glen))^(1/( 2*(N_Glen+1)));
Zo := 1424.122524
> To:=Zo/a;
To := 4747.075080
> > #-------------------------------------------------------------> > Nt:=1500;
Nt := 1500
> No:=21;
No := 21
> dl:=1/(No-1);
dl := > dt:=0.001;
1 20
dt := 0.001
> > a_e:=dl^2/2;
a_e :=
1 800
> > #-------------------------------------------------------------> N1:=100: N2:=200: N3:=300: N4:=500: N5:=800: > #-------------------------------------------------------------> S:=array(1..No,1..No): > #-------------------------> H_Ice_Summit:=array(0..Nt): > #-------------------------------------------------------------63
> for i from 1 to No do for j from 1 to No do S[i,j]:=0: end do: end do: > #-------------------------------------------------------------> H_Ice_Summit[0]:=S[round(No/2),round(No/2)]: > #-------------------------------------------------------------> M:=Matrix(No^2);
⎡⎢ M := ⎢⎢ ⎢⎢ ⎣
> V:=Vector(No^2);
⎡⎢ V := ⎢⎢ ⎢⎢ ⎣
441 x 441 Matrix ⎤ Data Type: anything ⎥⎥ Storage: rectangular ⎥⎥ Order: Fortran_order ⎥⎦
441 Element Column Vector ⎤ ⎥⎥ Data Type: anything ⎥⎥ Storage: rectangular ⎥⎦ Order: Fortran_order
> > #--------------------------------------------------------------> M_abc:=Matrix(3);
> V_abc:=Vector(3);
⎡⎢ 0 M_abc := ⎢⎢ 0 ⎢⎢ ⎣0
0 0 0
⎡⎢ 0⎤⎥ V_abc := ⎢⎢ 0⎥⎥ ⎢⎢ ⎥⎥ ⎣ 0⎦
0⎤ ⎥ 0⎥⎥ ⎥ 0⎥⎦
> #---------------------> a:=array(1..6,1..3): > b:=array(1..6,1..3): > c:=array(1..6,1..3): > #---------------------> i:=2: j:=2: > #-------------------------- (1) -----------------------------> M_abc[1,1]:=(i-1)*dl: M_abc[1,2]:=(j-1)*dl: M_abc[1,3]:=1: M_abc[2,1]:=i*dl: M_abc[2,2]:=j*dl: M_abc[2,3]:=1: M_abc[3,1]:=(i-1)*dl: M_abc[3,2]:=j*dl: M_abc[3,3]:=1: V_abc[1]:=1: V_abc[2]:=0: V_abc[3]:=0: L_abc:=LinearAlgebra[LinearSolve](M_abc,V_abc): a[1,1]:=L_abc[1]: b[1,1]:=L_abc[2]: c[1,1]:=L_abc[3]: 64
V_abc[1]:=0: V_abc[2]:=1: V_abc[3]:=0: L_abc:=LinearAlgebra[LinearSolve](M_abc,V_abc): a[1,2]:=L_abc[1]: b[1,2]:=L_abc[2]: c[1,2]:=L_abc[3]: V_abc[1]:=0: V_abc[2]:=0: V_abc[3]:=1: L_abc:=LinearAlgebra[LinearSolve](M_abc,V_abc): a[1,3]:=L_abc[1]: b[1,3]:=L_abc[2]: c[1,3]:=L_abc[3]: > > ... > > #-------------------------- (6) -----------------------------> M_abc[1,1]:=(i-1)*dl: M_abc[1,2]:=(j-1)*dl: M_abc[1,3]:=1: M_abc[2,1]:=i*dl: M_abc[2,2]:=j*dl: M_abc[2,3]:=1: M_abc[3,1]:=i*dl: M_abc[3,2]:=(j-1)*dl: M_abc[3,3]:=1: V_abc[1]:=1: V_abc[2]:=0: V_abc[3]:=0: L_abc:=LinearAlgebra[LinearSolve](M_abc,V_abc): a[6,1]:=L_abc[1]: b[6,1]:=L_abc[2]: c[6,1]:=L_abc[3]: V_abc[1]:=0: V_abc[2]:=1: V_abc[3]:=0: L_abc:=LinearAlgebra[LinearSolve](M_abc,V_abc): a[6,2]:=L_abc[1]: b[6,2]:=L_abc[2]: c[6,2]:=L_abc[3]: V_abc[1]:=0: V_abc[2]:=0: V_abc[3]:=1: L_abc:=LinearAlgebra[LinearSolve](M_abc,V_abc): a[6,3]:=L_abc[1]: b[6,3]:=L_abc[2]: c[6,3]:=L_abc[3]: > #------------------------------------------------------------> Dlk:=array(1..6,1..3,1..3): > #------------------------------------------------------------> for p from 1 to 6 do for l from 1 to 3 do for k from 1 to 3 do Dlk[p,l,k]:=a[p,l]*a[p,k]+b[p,l]*b[p,k]: end do: end do: end do: > > #------------------------------------------------------------> > for m from 1 to Nt do for i from 1 to No do M[(i-1)*No+1,(i-1)*No+1]:=1: M[(i-1)*No+No,(i-1)*No+No]:=1: 65
end do: for j from 2 to No-1 do M[j,j]:=1: M[(No-1)*No+j,(No-1)*No+j]:=1: end do: for i from 2 to No-1 do for j from 2 to No-1 do K_eff_1:=((S[i,j]+S[i+1,j+1]+S[i,j+1])/3)^(N_Glen+2)*(S[i,j]^2*Dlk[1 ,1,1]+S[i+1,j+1]^2*Dlk[1,2,2]+S[i,j+1]^2*Dlk[1,3,3]+2*S[i,j]*S[i+1,j+ 1]*Dlk[1,1,2]+2*S[i,j]*S[i,j+1]*Dlk[1,1,3]+2*S[i+1,j+1]*S[i,j+1]*Dlk[ 1,2,3])^((N_Glen-1)/2): K_eff_2:=((S[i,j]+S[i1,j]+S[i,j+1])/3)^(N_Glen+2)*(S[i,j]^2*Dlk[2,1,1]+S[i1,j]^2*Dlk[2,2,2]+S[i,j+1]^2*Dlk[2,3,3]+2*S[i,j]*S[i1,j]*Dlk[2,1,2]+2*S[i,j]*S[i,j+1]*Dlk[2,1,3]+2*S[i1,j]*S[i,j+1]*Dlk[2,2,3])^((N_Glen-1)/2): K_eff_3:=((S[i,j]+S[i-1,j]+S[i-1,j1])/3)^(N_Glen+2)*(S[i,j]^2*Dlk[3,1,1]+S[i-1,j]^2*Dlk[3,2,2]+S[i-1,j1]^2*Dlk[3,3,3]+2*S[i,j]*S[i-1,j]*Dlk[3,1,2]+2*S[i,j]*S[i-1,j1]*Dlk[3,1,3]+2*S[i-1,j]*S[i-1,j-1]*Dlk[3,2,3])^((N_Glen-1)/2): K_eff_4:=((S[i,j]+S[i,j-1]+S[i-1,j1])/3)^(N_Glen+2)*(S[i,j]^2*Dlk[4,1,1]+S[i,j-1]^2*Dlk[4,2,2]+S[i-1,j1]^2*Dlk[4,3,3]+2*S[i,j]*S[i,j-1]*Dlk[4,1,2]+2*S[i,j]*S[i-1,j1]*Dlk[4,1,3]+2*S[i,j-1]*S[i-1,j-1]*Dlk[4,2,3])^((N_Glen-1)/2): K_eff_5:=((S[i,j]+S[i,j1]+S[i+1,j])/3)^(N_Glen+2)*(S[i,j]^2*Dlk[5,1,1]+S[i,j1]^2*Dlk[5,2,2]+S[i+1,j]^2*Dlk[5,3,3]+2*S[i,j]*S[i,j1]*Dlk[5,1,2]+2*S[i,j]*S[i+1,j]*Dlk[5,1,3]+2*S[i,j1]*S[i+1,j]*Dlk[5,2,3])^((N_Glen-1)/2):
66
K_eff_6:=((S[i,j]+S[i+1,j+1]+S[i+1,j])/3)^(N_Glen+2)*(S[i,j]^2*Dlk[6 ,1,1]+S[i+1,j+1]^2*Dlk[6,2,2]+S[i+1,j]^2*Dlk[6,3,3]+2*S[i,j]*S[i+1,j+ 1]*Dlk[6,1,2]+2*S[i,j]*S[i+1,j]*Dlk[6,1,3]+2*S[i+1,j+1]*S[i+1,j]*Dlk[ 6,2,3])^((N_Glen-1)/2): M[(i-1)*No+j,(i1)*No+j]:=a_e*(1/dt+K_eff_1*Dlk[1,1,1]+K_eff_2*Dlk[2,1,1]+K_eff_ 3*Dlk[3,1,1]+K_eff_4*Dlk[4,1,1]+K_eff_5*Dlk[5,1,1]+K_eff_6*Dlk[6 ,1,1]): M[(i-1)*No+j,(i1)*No+j+1]:=a_e*(1/(6*dt)+K_eff_1*Dlk[1,3,1]+K_eff_2*Dlk[2,3,1]): M[(i-1)*No+j,(i2)*No+j]:=a_e*(1/(6*dt)+K_eff_2*Dlk[2,2,1]+K_eff_3*Dlk[3,2,1]): M[(i-1)*No+j,(i-2)*No+j1]:=a_e*(1/(6*dt)+K_eff_3*Dlk[3,3,1]+K_eff_4*Dlk[4,3,1]): M[(i-1)*No+j,(i-1)*No+j1]:=a_e*(1/(6*dt)+K_eff_4*Dlk[4,2,1]+K_eff_5*Dlk[5,2,1]): M[(i1)*No+j,i*No+j]:=a_e*(1/(6*dt)+K_eff_5*Dlk[5,3,1]+K_eff_6*Dlk[6, 3,1]): M[(i1)*No+j,i*No+j+1]:=a_e*(1/(6*dt)+K_eff_1*Dlk[1,2,1]+K_eff_6*Dlk[ 6,2,1]): V[(i-1)*No+j]:=a_e*(2+S[i,j]/dt+S[i+1,j+1]/(6*dt)+S[i,j+1]/(6*dt)+S[i1,j]/(6*dt)+S[i-1,j-1]/(6*dt)+S[i,j-1]/(6*dt)+S[i+1,j]/(6*dt)): end do: end do: H_Ice_Summit[m]:=S[round(No/2),round(No/2)]: Surf:=LinearAlgebra[LinearSolve](M,V): 67
for i from 1 to No do for j from 1 to No do S[i,j]:=Surf[(i-1)*No+j]: end do: end do: if m=N1 then for i from 1 to No do S1[i]:=S[i,round(No/2)]: end do: end if: if m=N2 then for i from 1 to No do S2[i]:=S[i,round(No/2)]: end do: end if: if m=N3 then for i from 1 to No do S3[i]:=S[i,round(No/2)]: end do: end if: if m=N4 then for i from 1 to No do S4[i]:=S[i,round(No/2)]: end do: end if: if m=N5 then for i from 1 to No do S5[i]:=S[i,round(No/2)]: end do: end if: end do: > > #------------------------------------------------------------> L_x:=[seq((i-1)*dl,i=1..No)]: > L_y:=[seq((j-1)*dl,j=1..No)]: > #--------------------------------> L_S:=[seq(S1[i],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr1:=plot(Surf,x=0..1,color=red,thickness=3,linestyle=1,legend="Nt= 100"): > L_S:=[seq(S2[i],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr2:=plot(Surf,x=0..1,color=red,thickness=3,linestyle=2,legend="Nt= 200"): > L_S:=[seq(S3[i],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr3:=plot(Surf,x=0..1,color=red,thickness=3,linestyle=3,legend="Nt= 300"): > L_S:=[seq(S4[i],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr4:=plot(Surf,x=0..1,color=red,thickness=3,linestyle=4,legend="Nt= 500"): > L_S:=[seq(S5[i],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr5:=plot(Surf,x=0..1,color=red,thickness=3,linestyle=5,legend="Nt= 800"): 68
> L_S:=[seq(S[i,round(No/2)],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr6:=plot(Surf,x=0..1,color=blue,thickness=3,linestyle=1,legend="Nt =1500"): > plots[display]([gr1,gr2,gr3,gr4,gr5,gr6],axes=boxed,title="Ice Cap Surface",labels=["x *200, km","Elevation, non-dimensional value"],labeldirections=[HORIZONTAL,VERTICAL]);
> #------------------------------------------------------------> L_S:=[seq(S[i,round(No/2)],i=1..No)]: Surf:=spline(L_x,L_S,x,1): gr1:=plot(Surf,x=0..1,color=red,thickness=3,linestyle=3,legend="y=1/ 2"): > L_S:=[seq(S[round(No/2),j],j=1..No)]: Surf:=spline(L_y,L_S,x,1): gr2:=plot(Surf,x=0..1,color=blue,thickness=3,linestyle=1,legend="x= 1/2"): 69
> plots[display]([gr1,gr2],axes=boxed,title="Ice Cap Surface",labels=["x,y *200, km","Elevation, non-dimensional value"],labeldirections=[HORIZONTAL,VERTICAL]);
> #------------------------------------------------------------> L_t:=[seq(m*dt,m=0..Nt)]: > L_S:=[seq(H_Ice_Summit[m],m=0..Nt)]: > Surf:=spline(L_t,L_S,t,1): > plot(Surf,t=0..Nt*dt,axes=boxed,title="Ice Thickness at the Ice Cap Summit", labels=["time, non-dimensional value","Elevation, nondimensional value"],labeldirections=[HORIZONTAL,VERTICAL],color=black,t hickness=3,linestyle=1);
70
> #----------------------------------------------------------------------> #------------------ The Time of Ice Accumulation -----------> #----------------------------------------------------------------------> T_accumulation:=To*1.3;
T_accumulation := 6171.197604
> #-----------------------------------------------------------------------> #---------------- Ice Cap Thickness at the Summit -----------> #-----------------------------------------------------------------------> Thickness:=S[round(No/2),round(No/2)]*Zo;
Thickness := 1233.248441
> #------------------------------------------------------------> > L_P:=[seq(seq([L_x[i],L_y[j],S[i,j]],j=1..No),i=1..No)]: > > PLOT3D(POINTS(L_P),SYMBOL(CIRCLE),AXES(FRAME),TITL E("Ice Cap Surface"),AXESLABELS(X,Y,Elevation));
71
> #------------------------------------------------------------> Points:=[seq([seq(S[i,j], j=1..No)],i=1..No)]: > plots[listcontplot](Points,contours=20,filled=true,linestyle=3,coloring =[blue,white],title="Ice Cap Surface");
72
Дополнение. Примеры неустойчивости схемы. > #+++++++++++++++++++++++++++++++++++++++++++++++ > #+++++ The examples of the model instability +++++++++++++ > #+++++++++++++++++++++++++++++++++++++++++++++++ >
73
§ 8. Задачи для самостоятельного решения Задача 1. (к §2) Определить скорости течения льда в плоскопараллельном слое заданной толщины H . Поверхность и основание ледникового покрова - бесконечные параллельные плоскости, расположенные под углом ϕ к горизонту. Проскальзывание в базисном слое отсутствует. Задача 2. (к §2) Получить выражение для вертикальной составляющей скорости течения льда в плоской модели, исходя из выражения для горизонтальной составляющей скорости течения льда и уравнения непрерывности. Задача 3. (к §4) Используя программу для плоской модели течения льда, построить профили горизонтальной и вертикальной составляющих скорости течения льда (распределение составляющих скорости по толщине льда) на некоторых расстояниях от вершины, например, x = n / 5, n = 1..4 (2 графика). Построить график 74
зависимости среднего значения горизонтальной составляющей скорости течения от x (расстояния от вершины до фронта ледника). Задача 4. (к §5) Используя программу для плоской модели течения льда, получить численное решение задачи для аксиальносимметричного ледникового купола. Определить, насколько отличаются времена накопления ледниковой массы и толщина покрова в центре ледников. Задача 5. (к §6) Построить график поля горизонтальной скорости течения льда в стационарном ледниковом покрове, используя программу для двумерного уравнения поверхности. Задача 6. (к §6) Основываясь на программе для двумерного уравнения поверхности, получить решение задачи для случая осциллирующей подстилающей поверхности b = b0 sin 2π x sin 2π y . Исследовать влияние амплитуды колебаний подстилающего рельефа b0 на стационарную форму поверхности ледника и поле горизонтальной составляющей скорости течения льда. Задача 7. (к §7) Внося соответствующие изменения в аппроксимацию граничных условий с учетом замечаний в конце §7 и соответственно в программу, получить решение задачи методом конечных элементов для ¼ области залегания ледникового покрова. Список литературы
1. Арсенин 2. 3. 4. 5.
В.Я. Методы математической физики и специальные функции. М.: Наука, 1984. Васильчук Ю.К., Котляков В.М. Основы изотопной геокриологии и гляциологии. М.: Издательство МГУ, 2000. Ландау Л.Д., Е.М. Лившиц, Гидродинамика, М.: Наука, 1988. Ландау Л.Д., Е.М. Лившиц, Теория упругости, М.: Наука, 1987. Нагорнов О.В., Коновалов Ю.В. Прогноз эволюции ледника Григорьева (Тянь-Шань)// Материалы гляциологических исследований. Том 98. С. 122-132. 2005. 75
6. Самарский А.А., Попов Ю.П. Разностные методы решения задач газовой динамики. М.: Наука, 1992.
7. Barnola J.M., D. Raynaud, Y.S. Korotkevich, C. Lorius. Vostok ice core provides 160000-year record of atmospheric CO2 // Nature. 329, P. 408-414. 1987. 8. Chappellaz J., T. Blunier, D. Ratnaud, J.M. Barnola, J. Schwander, B.Stauffer. Synchronous changes in atmospheric CH 4 and Greenland climate between 40 and 8 kyr B.P// Nature. 366, P. 443-445. 1990. 9. Hutter K. Theoretical Glaciology// Reidel, Dordrecht, 510 p, 1983. 10. Huybrechts P. and Oerlemans J. Evolution of the East Antarctic ice sheet: a numerical study of thermo-mechanical response pattern with changing climate// Annals of Glaciology. 11, P. 5259. 1988. 11. MacAyeal, D. R. and V. Barcilon. Ice-shelf response to icestream discharge fluctuation: I. Unconfined ice tongues// Journal of Glaciology, 34(116), P. 121-127. 1988. 12. MacAyeal, D. R. Large-scale ice flow over a viscous basal sediment: theory and application to ice stream B, Antarctica. Journal of Geophysical Research// 94(B4), P. 4071-4088. 1989. 13. MacAyeal D.R. EISMINT: Lessons in Ice-Sheet Modeling. Chicago. Illinois: University of Chicago. 428 p. 1997. 14. Nagornov O.V., Konovalov Yu.V., Tchijov V.E. Temperature reconstruction for Arctic glaciers// Palaeo. Elsevier. V. 236, Issue 1-2, P. 125-134. 2006. 15. Nagornov O., Konovalov Yu., Mikhalenko V. Prediction of thermodynamic state of the Gregoriev ice cap, Tien Shan, Central Asia, in the future// Annals of Glaciology. V. 43, P. 307-312. 2006. 16. Paterson W.S.B. The physics of glaciers. Oxford. The 3rd edition. 1994. 17. Pattyn F. Ice-sheet modeling at different spatial resolutions: focus on the grounding zone// Annals of Glaciology. 31, P. 211-216. 2000. 76