1 | #Test Name: ThermalEnthBasalcondsTrans
|
---|
2 | import numpy as np
|
---|
3 | from model import *
|
---|
4 | from socket import gethostname
|
---|
5 | from triangle import *
|
---|
6 | from setmask import *
|
---|
7 | from parameterize import *
|
---|
8 | from setflowequation import *
|
---|
9 | from solve import *
|
---|
10 |
|
---|
11 | md = triangle(model(), '../Exp/Square.exp', 300000.)
|
---|
12 | md = setmask(md, '', '')
|
---|
13 | md = parameterize(md, '../Par/SquareThermal.py')
|
---|
14 |
|
---|
15 | h = 100.
|
---|
16 | md.geometry.thickness = h * np.ones((md.mesh.numberofvertices, ))
|
---|
17 | md.geometry.base = -h * np.ones((md.mesh.numberofvertices, ))
|
---|
18 | md.geometry.surface = md.geometry.base + md.geometry.thickness
|
---|
19 |
|
---|
20 | md.extrude(41, 2.)
|
---|
21 | md = setflowequation(md, 'HO', 'all')
|
---|
22 | md.thermal.isenthalpy = True
|
---|
23 | md.thermal.isdynamicbasalspc = True
|
---|
24 |
|
---|
25 | #Basal forcing
|
---|
26 | Ts = 273.15 - 3.
|
---|
27 | Tb = 273.15 - 1.
|
---|
28 | Tsw = Tb
|
---|
29 | qgeo = md.materials.thermalconductivity / max(md.geometry.thickness) * (Tb - Ts) #qgeo = kappa * (Tb - Ts) / H
|
---|
30 | md.basalforcings.geothermalflux[np.where(md.mesh.vertexonbase)] = qgeo
|
---|
31 | md.initialization.temperature = qgeo / md.materials.thermalconductivity * (md.geometry.surface - md.mesh.z) + Ts
|
---|
32 |
|
---|
33 | #Surface forcing
|
---|
34 | pos = np.where(md.mesh.vertexonsurface)
|
---|
35 | SPC_cold = float('NaN') * np.ones((md.mesh.numberofvertices, ))
|
---|
36 | SPC_warm = float('NaN') * np.ones((md.mesh.numberofvertices, ))
|
---|
37 | SPC_cold[pos] = Ts
|
---|
38 | SPC_warm[pos] = Tsw
|
---|
39 | md.thermal.spctemperature = SPC_cold
|
---|
40 | md.timestepping.time_step = 5.
|
---|
41 | t0 = 0.
|
---|
42 | t1 = 10.
|
---|
43 | t2 = 100.
|
---|
44 | md.timestepping.final_time = 400.
|
---|
45 | md.thermal.spctemperature = np.array([SPC_cold, SPC_cold, SPC_warm, SPC_warm, SPC_cold]).T
|
---|
46 | md.thermal.spctemperature = np.vstack((md.thermal.spctemperature, [t0, t1 - 1, t1, t2 - 1, t2]))
|
---|
47 | #print np.shape(md.thermal.spctemperature)
|
---|
48 | #print md.thermal.spctemperature
|
---|
49 |
|
---|
50 | #Additional settings
|
---|
51 | md.transient.ismasstransport = False
|
---|
52 | md.transient.isstressbalance = False
|
---|
53 | md.transient.issmb = True
|
---|
54 | md.transient.isthermal = True
|
---|
55 | md.thermal.stabilization = False
|
---|
56 |
|
---|
57 | #Go solve
|
---|
58 | md.verbose = verbose(0)
|
---|
59 | md.cluster = generic('name', gethostname(), 'np', 3)
|
---|
60 | md = solve(md, 'Transient')
|
---|
61 |
|
---|
62 | #Fields and tolerances to track changes
|
---|
63 | field_names = ['Enthalpy1', 'Temperature1', 'Waterfraction1', 'BasalMeltingRate1', 'Watercolumn1',
|
---|
64 | 'Enthalpy2', 'Temperature2', 'Waterfraction2', 'BasalMeltingRate2', 'Watercolumn2',
|
---|
65 | 'Enthalpy3', 'Temperature3', 'Waterfraction3', 'BasalMeltingRate3', 'Watercolumn3',
|
---|
66 | 'Enthalpy4', 'Temperature4', 'Waterfraction4', 'BasalMeltingRate4', 'Watercolumn4']
|
---|
67 | field_tolerances = [1.e-10, 1.e-10, 1.e-10, 1.e-9, 1.e-10,
|
---|
68 | 1.e-10, 1.e-10, 1.e-10, 2.e-9, 2.e-10,
|
---|
69 | 1.e-10, 1.e-10, 1.e-10, 2.e-9, 1.e-10,
|
---|
70 | 1.e-10, 1.e-10, 1.e-10, 2.e-9, 1.e-10]
|
---|
71 | i1 = 0
|
---|
72 | i2 = int(np.ceil(t2 / md.timestepping.time_step) + 2) - 1
|
---|
73 | i3 = int(np.ceil(md.timestepping.final_time / (2. * md.timestepping.time_step))) - 1
|
---|
74 | i4 = len(md.results.TransientSolution) - 1
|
---|
75 | field_values = [md.results.TransientSolution[i1].Enthalpy,
|
---|
76 | md.results.TransientSolution[i1].Temperature,
|
---|
77 | md.results.TransientSolution[i1].Waterfraction,
|
---|
78 | md.results.TransientSolution[i1].BasalforcingsGroundediceMeltingRate,
|
---|
79 | md.results.TransientSolution[i1].Watercolumn,
|
---|
80 | md.results.TransientSolution[i2].Enthalpy,
|
---|
81 | md.results.TransientSolution[i2].Temperature,
|
---|
82 | md.results.TransientSolution[i2].Waterfraction,
|
---|
83 | md.results.TransientSolution[i2].BasalforcingsGroundediceMeltingRate,
|
---|
84 | md.results.TransientSolution[i2].Watercolumn,
|
---|
85 | md.results.TransientSolution[i3].Enthalpy,
|
---|
86 | md.results.TransientSolution[i3].Temperature,
|
---|
87 | md.results.TransientSolution[i3].Waterfraction,
|
---|
88 | md.results.TransientSolution[i3].BasalforcingsGroundediceMeltingRate,
|
---|
89 | md.results.TransientSolution[i3].Watercolumn,
|
---|
90 | md.results.TransientSolution[i4].Enthalpy,
|
---|
91 | md.results.TransientSolution[i4].Temperature,
|
---|
92 | md.results.TransientSolution[i4].Waterfraction,
|
---|
93 | md.results.TransientSolution[i4].BasalforcingsGroundediceMeltingRate,
|
---|
94 | md.results.TransientSolution[i4].Watercolumn]
|
---|