[22267] | 1 | #Test Name: FlowbandFSshelf
|
---|
| 2 | import numpy as np
|
---|
| 3 | from model import *
|
---|
| 4 | from solve import *
|
---|
| 5 | from setflowequation import *
|
---|
| 6 | from bamgflowband import *
|
---|
| 7 | from paterson import *
|
---|
| 8 |
|
---|
[24313] | 9 | x = np.arange(1, 3001, 100).T
|
---|
| 10 | h = np.linspace(1000, 300, np.size(x)).T
|
---|
| 11 | b = -917. / 1023. * h
|
---|
[22267] | 12 |
|
---|
[24313] | 13 | md = bamgflowband(model(), x, b + h, b, 'hmax', 80.)
|
---|
[22267] | 14 |
|
---|
[24313] | 15 | #Geometry #interp1d returns a function to be called on md.mesh.x
|
---|
| 16 | md.geometry.surface = np.interp(md.mesh.x, x, b + h)
|
---|
| 17 | md.geometry.base = np.interp(md.mesh.x, x, b)
|
---|
| 18 | md.geometry.thickness = md.geometry.surface - md.geometry.base
|
---|
| 19 |
|
---|
[22267] | 20 | #mask
|
---|
[25836] | 21 | md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices))
|
---|
[22267] | 22 | md.mask.ice_levelset[np.where(md.mesh.vertexflags(2))] = 0.
|
---|
[25836] | 23 | md.mask.ocean_levelset = np.zeros((md.mesh.numberofvertices)) - 0.5
|
---|
[22267] | 24 |
|
---|
| 25 | #materials
|
---|
[25836] | 26 | md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices))
|
---|
[22267] | 27 | md.materials.rheology_B = paterson(md.initialization.temperature)
|
---|
[25836] | 28 | md.materials.rheology_n = 3. * np.ones((md.mesh.numberofelements))
|
---|
[22267] | 29 |
|
---|
| 30 | #friction
|
---|
[25836] | 31 | md.friction.coefficient = np.zeros((md.mesh.numberofvertices))
|
---|
[22267] | 32 | md.friction.coefficient[np.where(md.mesh.vertexflags(1))] = 20.
|
---|
[25836] | 33 | md.friction.p = np.ones((md.mesh.numberofelements))
|
---|
| 34 | md.friction.q = np.ones((md.mesh.numberofelements))
|
---|
[22267] | 35 |
|
---|
| 36 | #Boundary conditions
|
---|
[24313] | 37 | md.stressbalance.referential = np.nan * np.ones((md.mesh.numberofvertices, 6))
|
---|
| 38 | md.stressbalance.loadingforce = 0. * np.ones((md.mesh.numberofvertices, 3))
|
---|
| 39 | md.stressbalance.spcvx = np.nan * np.ones((md.mesh.numberofvertices, ))
|
---|
| 40 | md.stressbalance.spcvy = np.nan * np.ones((md.mesh.numberofvertices, ))
|
---|
| 41 | md.stressbalance.spcvz = np.nan * np.ones((md.mesh.numberofvertices, ))
|
---|
[22267] | 42 | md.stressbalance.spcvx[np.where(md.mesh.vertexflags(4))] = 0.
|
---|
| 43 | md.stressbalance.spcvy[np.where(md.mesh.vertexflags(4))] = 0.
|
---|
[24313] | 44 | md.basalforcings.floatingice_melting_rate = np.zeros((md.mesh.numberofvertices, ))
|
---|
[22267] | 45 |
|
---|
| 46 | #Misc
|
---|
[24313] | 47 | md = setflowequation(md, 'FS', 'all')
|
---|
[23189] | 48 | md.stressbalance.abstol = np.nan
|
---|
[22267] | 49 | #md.stressbalance.reltol = 10**-16
|
---|
| 50 | md.stressbalance.FSreconditioning = 1.
|
---|
| 51 | md.stressbalance.maxiter = 20
|
---|
| 52 | md.flowequation.augmented_lagrangian_r = 10000.
|
---|
[24313] | 53 | md.miscellaneous.name = 'test701'
|
---|
| 54 | md.verbose = verbose('convergence', True)
|
---|
| 55 | md.cluster = generic('np', 2)
|
---|
| 56 | md.groundingline.migration = 'None'
|
---|
[22267] | 57 |
|
---|
| 58 | #Go solve
|
---|
| 59 | field_names = []
|
---|
| 60 | field_tolerances = []
|
---|
| 61 | field_values = []
|
---|
[24313] | 62 | #md.initialization.pressure = md.constants.g * md.materials.rho_ice * (md.geometry.surface - md.mesh.y)
|
---|
| 63 | for i in ['MINI', 'MINIcondensed', 'TaylorHood', 'LATaylorHood', 'CrouzeixRaviart', 'LACrouzeixRaviart']:
|
---|
| 64 | print(' ')
|
---|
[25836] | 65 | print('=====Testing ' + i + ' Full-Stokes Finite element=====')
|
---|
[24313] | 66 | md.flowequation.fe_FS = i
|
---|
| 67 | md = solve(md, 'Stressbalance')
|
---|
| 68 | field_names = field_names + [['Vx' + i], ['Vy' + i], ['Vel' + i], ['Pressure' + i]]
|
---|
| 69 | field_tolerances = field_tolerances + [9e-5, 9e-5, 9e-5, 1e-10]
|
---|
| 70 | field_values = field_values + [md.results.StressbalanceSolution.Vx,
|
---|
| 71 | md.results.StressbalanceSolution.Vy,
|
---|
| 72 | md.results.StressbalanceSolution.Vel,
|
---|
| 73 | md.results.StressbalanceSolution.Pressure]
|
---|