[26439] | 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'
|
---|
[26555] | 40 | md = SetMLHOBC(md);
|
---|
[26439] | 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]
|
---|