[27031] | 1 | #Test Name: RoundSheetShelfGLMigrationMOLHO2d
|
---|
[26439] | 2 | import numpy as np
|
---|
| 3 | from model import *
|
---|
| 4 | from socket import gethostname
|
---|
[26897] | 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
|
---|
[27031] | 10 | from SetMOLHOBC import SetMOLHOBC
|
---|
[26439] | 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')
|
---|
[27031] | 30 | md = setflowequation(md, 'MOLHO', 'all')
|
---|
[26439] | 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'
|
---|
[27031] | 41 | md = SetMOLHOBC(md)
|
---|
[26439] | 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]
|
---|