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