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