[22267] | 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 |
|
---|
[24313] | 11 | md = triangle(model(), '../Exp/Square.exp', 300000.)
|
---|
| 12 | md = setmask(md, '', '')
|
---|
| 13 | md = parameterize(md, '../Par/SquareThermal.py')
|
---|
[22267] | 14 |
|
---|
| 15 | h = 100.
|
---|
[24313] | 16 | md.geometry.thickness = h * np.ones((md.mesh.numberofvertices, ))
|
---|
| 17 | md.geometry.base = -h * np.ones((md.mesh.numberofvertices, ))
|
---|
[22267] | 18 | md.geometry.surface = md.geometry.base + md.geometry.thickness
|
---|
| 19 |
|
---|
[24313] | 20 | md.extrude(41, 2.)
|
---|
| 21 | md = setflowequation(md, 'HO', 'all')
|
---|
[22267] | 22 | md.thermal.isenthalpy = True
|
---|
| 23 | md.thermal.isdynamicbasalspc = True
|
---|
| 24 |
|
---|
| 25 | #Basal forcing
|
---|
[24313] | 26 | Ts = 273.15 - 3.
|
---|
| 27 | Tb = 273.15 - 1.
|
---|
[22267] | 28 | Tsw = Tb
|
---|
[24313] | 29 | qgeo = md.materials.thermalconductivity / max(md.geometry.thickness) * (Tb - Ts) #qgeo = kappa * (Tb - Ts) / H
|
---|
[22267] | 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)
|
---|
[24313] | 35 | SPC_cold = float('NaN') * np.ones((md.mesh.numberofvertices, ))
|
---|
| 36 | SPC_warm = float('NaN') * np.ones((md.mesh.numberofvertices, ))
|
---|
[22267] | 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.
|
---|
[24313] | 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]))
|
---|
[22267] | 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)
|
---|
[24313] | 59 | md.cluster = generic('name', gethostname(), 'np', 3)
|
---|
| 60 | md = solve(md, 'Transient')
|
---|
[22267] | 61 |
|
---|
| 62 | #Fields and tolerances to track changes
|
---|
[24313] | 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]
|
---|
[22267] | 71 | i1 = 0
|
---|
[24313] | 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
|
---|
[25836] | 74 | i4 = len(md.results.TransientSolution) - 1
|
---|
[24313] | 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]
|
---|