| [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]
|
|---|