1 | #Test Name: RoundSheetShelfGLMigrationMLHO2d
|
---|
2 | import numpy as np
|
---|
3 | from model import *
|
---|
4 | from socket import gethostname
|
---|
5 | from roundmesh import *
|
---|
6 | from setmask import *
|
---|
7 | from parameterize import *
|
---|
8 | from setflowequation import *
|
---|
9 | from solve import *
|
---|
10 |
|
---|
11 |
|
---|
12 | radius = 1.e6
|
---|
13 | shelfextent = 2.e5
|
---|
14 |
|
---|
15 | md = roundmesh(model(), radius, 50000.)
|
---|
16 | #fix center node to 0, 0
|
---|
17 | rad = np.sqrt(md.mesh.x**2 + md.mesh.y**2)
|
---|
18 | pos = np.argmin(rad)
|
---|
19 | md.mesh.x[pos] = 0.
|
---|
20 | md.mesh.y[pos] = 0. #the closest node to the center is changed to be exactly at the center
|
---|
21 | xelem = np.mean(md.mesh.x[md.mesh.elements - 1], axis=1)
|
---|
22 | yelem = np.mean(md.mesh.y[md.mesh.elements - 1], axis=1)
|
---|
23 | rad = np.sqrt(xelem**2 + yelem**2)
|
---|
24 | flags = np.zeros(md.mesh.numberofelements)
|
---|
25 | pos = np.nonzero(rad >= (radius - shelfextent))
|
---|
26 | flags[pos] = 1
|
---|
27 | md = setmask(md, flags, '')
|
---|
28 | md = parameterize(md, '../Par/RoundSheetShelf.py')
|
---|
29 | md = setflowequation(md, 'MLHO', 'all')
|
---|
30 | md.cluster = generic('name', gethostname(), 'np', 3)
|
---|
31 |
|
---|
32 | md.transient.isthermal = False
|
---|
33 | md.transient.ismasstransport = False
|
---|
34 | md.transient.issmb = True
|
---|
35 | md.transient.isstressbalance = True
|
---|
36 | md.transient.isgroundingline = True
|
---|
37 |
|
---|
38 | #test different grounding line dynamics.
|
---|
39 | md.groundingline.migration = 'AggressiveMigration'
|
---|
40 | md = SetMLHOBC(md);
|
---|
41 | md = solve(md, 'Transient')
|
---|
42 | element_on_iceshelf_agressive = md.results.TransientSolution[0].MaskOceanLevelset
|
---|
43 | vel_agressive = md.results.TransientSolution[0].Vel
|
---|
44 |
|
---|
45 | md.groundingline.migration = 'SoftMigration'
|
---|
46 | md = solve(md, 'Transient')
|
---|
47 | element_on_iceshelf_soft = md.results.TransientSolution[0].MaskOceanLevelset
|
---|
48 | vel_soft = md.results.TransientSolution[0].Vel
|
---|
49 |
|
---|
50 | md.mask.ocean_levelset = md.geometry.thickness + md.materials.rho_water / md.materials.rho_ice * md.geometry.bed
|
---|
51 | md.groundingline.migration = 'SubelementMigration'
|
---|
52 | md.groundingline.friction_interpolation = 'SubelementFriction1'
|
---|
53 | md = solve(md, 'Transient')
|
---|
54 | element_on_iceshelf_subelement = md.results.TransientSolution[0].MaskOceanLevelset
|
---|
55 | vel_subelement = md.results.TransientSolution[0].Vel
|
---|
56 |
|
---|
57 | md.groundingline.friction_interpolation = 'SubelementFriction2'
|
---|
58 | md = solve(md, 'Transient')
|
---|
59 | element_on_iceshelf_subelement2 = md.results.TransientSolution[0].MaskOceanLevelset
|
---|
60 | vel_subelement2 = md.results.TransientSolution[0].Vel
|
---|
61 |
|
---|
62 | #Fields and tolerances to track changes
|
---|
63 | field_names = ['ElementOnIceShelfAggressive', 'VelAggressive', 'ElementOnIceShelfSoft', 'VelSoft', 'ElementOnIceShelfSubelement', 'VelSubelement', 'ElementOnIceShelfSubelement2', 'VelSubelement2']
|
---|
64 | field_tolerances = [1e-13, 2e-13, 1e-13, 2e-13, 1e-13, 2e-13, 1e-13, 2e-13]
|
---|
65 | field_values = [element_on_iceshelf_agressive, vel_agressive, element_on_iceshelf_soft, vel_soft, element_on_iceshelf_subelement, vel_subelement, element_on_iceshelf_subelement2, vel_subelement2]
|
---|