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.groundedice_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 |
|
---|
45 | #Misc
|
---|
46 | md = setflowequation(md,'FS','all')
|
---|
47 | md.stressbalance.abstol = np.nan
|
---|
48 | #md.stressbalance.reltol = 10**-16
|
---|
49 | md.stressbalance.FSreconditioning = 1.
|
---|
50 | md.stressbalance.maxiter = 20
|
---|
51 | md.flowequation.augmented_lagrangian_r = 10000.
|
---|
52 | md.miscellaneous.name = 'test701'
|
---|
53 | md.verbose = verbose('convergence',True)
|
---|
54 | md.cluster = generic('np',2)
|
---|
55 | md.groundingline.migration='None'
|
---|
56 |
|
---|
57 | #Go solve
|
---|
58 | field_names = []
|
---|
59 | field_tolerances = []
|
---|
60 | field_values = []
|
---|
61 | #md.initialization.pressure = md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.y)
|
---|
62 | for i in ['MINI','MINIcondensed','TaylorHood','LATaylorHood','CrouzeixRaviart','LACrouzeixRaviart']:
|
---|
63 | print ' '
|
---|
64 | print '======Testing ' +i+ ' Full-Stokes Finite element====='
|
---|
65 | md.flowequation.fe_FS = i
|
---|
66 | md = solve(md,'Stressbalance')
|
---|
67 | field_names = field_names + [['Vx'+i],['Vy'+i],['Vel'+i],['Pressure'+i]]
|
---|
68 | field_tolerances = field_tolerances + [9e-5,9e-5,9e-5,1e-10]
|
---|
69 | field_values = field_values + [md.results.StressbalanceSolution.Vx,
|
---|
70 | md.results.StressbalanceSolution.Vy,
|
---|
71 | md.results.StressbalanceSolution.Vel,
|
---|
72 | md.results.StressbalanceSolution.Pressure]
|
---|