Федеральное агентство по образованию Московский инженерно-физический институт (государственный университет)
Ю.В. Конова...
44 downloads
179 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 #======= 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 #== 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