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 |
|
---|
9 | x = np.arange(1, 3001, 100).T
|
---|
10 | h = np.linspace(1000, 300, np.size(x)).T
|
---|
11 | b = -917. / 1023. * h
|
---|
12 |
|
---|
13 | md = bamgflowband(model(), x, b + h, b, 'hmax', 80.)
|
---|
14 |
|
---|
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 |
|
---|
20 | #mask
|
---|
21 | md.mask.ice_levelset = -np.ones((md.mesh.numberofvertices))
|
---|
22 | md.mask.ice_levelset[np.where(md.mesh.vertexflags(2))] = 0.
|
---|
23 | md.mask.ocean_levelset = np.zeros((md.mesh.numberofvertices)) - 0.5
|
---|
24 |
|
---|
25 | #materials
|
---|
26 | md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices))
|
---|
27 | md.materials.rheology_B = paterson(md.initialization.temperature)
|
---|
28 | md.materials.rheology_n = 3. * np.ones((md.mesh.numberofelements))
|
---|
29 |
|
---|
30 | #friction
|
---|
31 | md.friction.coefficient = np.zeros((md.mesh.numberofvertices))
|
---|
32 | md.friction.coefficient[np.where(md.mesh.vertexflags(1))] = 20.
|
---|
33 | md.friction.p = np.ones((md.mesh.numberofelements))
|
---|
34 | md.friction.q = np.ones((md.mesh.numberofelements))
|
---|
35 |
|
---|
36 | #Boundary conditions
|
---|
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, ))
|
---|
42 | md.stressbalance.spcvx[np.where(md.mesh.vertexflags(4))] = 0.
|
---|
43 | md.stressbalance.spcvy[np.where(md.mesh.vertexflags(4))] = 0.
|
---|
44 | md.basalforcings.floatingice_melting_rate = np.zeros((md.mesh.numberofvertices, ))
|
---|
45 |
|
---|
46 | #Misc
|
---|
47 | md = setflowequation(md, 'FS', 'all')
|
---|
48 | md.stressbalance.abstol = np.nan
|
---|
49 | #md.stressbalance.reltol = 10**-16
|
---|
50 | md.stressbalance.FSreconditioning = 1.
|
---|
51 | md.stressbalance.maxiter = 20
|
---|
52 | md.flowequation.augmented_lagrangian_r = 10000.
|
---|
53 | md.miscellaneous.name = 'test701'
|
---|
54 | md.verbose = verbose('convergence', True)
|
---|
55 | md.cluster = generic('np', 2)
|
---|
56 | md.groundingline.migration = 'None'
|
---|
57 |
|
---|
58 | #Go solve
|
---|
59 | field_names = []
|
---|
60 | field_tolerances = []
|
---|
61 | field_values = []
|
---|
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(' ')
|
---|
65 | print('=====Testing ' + i + ' Full-Stokes Finite element=====')
|
---|
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]
|
---|