1 | import numpy as np
|
---|
2 | from model import *
|
---|
3 | from setmask import setmask
|
---|
4 | from parameterize import parameterize
|
---|
5 | from setflowequation import setflowequation
|
---|
6 | from generic import generic
|
---|
7 | from solve import solve
|
---|
8 | from plotmodel import plotmodel
|
---|
9 | from export_netCDF import export_netCDF
|
---|
10 | from m1qn3inversion import m1qn3inversion
|
---|
11 | from verbose import verbose
|
---|
12 | from loadmodel import loadmodel
|
---|
13 | from cuffey import cuffey
|
---|
14 | steps = [4]
|
---|
15 | Clims = [1.3 * 1e8, 1.9 * 1e8]
|
---|
16 |
|
---|
17 | if 1 in steps:
|
---|
18 | #Generate observations
|
---|
19 | md = model()
|
---|
20 | md = triangle(md, 'DomainOutline.exp', 100000)
|
---|
21 | md = setmask(md, 'all', '')
|
---|
22 | md = parameterize(md, 'Square.py')
|
---|
23 | md = setflowequation(md, 'SSA', 'all')
|
---|
24 | md.cluster = generic('np', 2)
|
---|
25 | md = solve(md, 'Stressbalance')
|
---|
26 | plotmodel(md, 'axis#all', 'tight', 'data', md.materials.rheology_B, 'caxis', Clims, 'title', '"True" B',
|
---|
27 | 'data', md.results.StressbalanceSolution.Vel, 'title', '"observed velocities"')
|
---|
28 | export_netCDF(md, 'model1.nc')
|
---|
29 |
|
---|
30 | if 2 in steps:
|
---|
31 | #Modify rheology, now constant
|
---|
32 | md = loadmodel('model1.nc')
|
---|
33 | md.materials.rheology_B[:] = 1.8 * 1e8
|
---|
34 |
|
---|
35 | #results of previous run are taken as observations
|
---|
36 | md.inversion = m1qn3inversion()
|
---|
37 | md.inversion.vx_obs = md.results.StressbalanceSolution.Vx
|
---|
38 | md.inversion.vy_obs = md.results.StressbalanceSolution.Vy
|
---|
39 | md.inversion.vel_obs = md.results.StressbalanceSolution.Vel
|
---|
40 |
|
---|
41 | md = solve(md, 'Stressbalance')
|
---|
42 | plotmodel(md, 'axis#all', 'tight', 'data', md.materials.rheology_B, 'caxis', Clims, 'title', 'B first guess',
|
---|
43 | 'data', md.results.StressbalanceSolution.Vel, 'title', 'modeled velocities')
|
---|
44 | export_netCDF(md, 'model2.nc')
|
---|
45 |
|
---|
46 |
|
---|
47 | if 3 in steps:
|
---|
48 | #invert for ice rigidity
|
---|
49 | md = loadmodel('model2.nc')
|
---|
50 |
|
---|
51 | #Set up inversion parameters
|
---|
52 | maxsteps = 20
|
---|
53 | md.inversion.iscontrol = 1
|
---|
54 | md.inversion.control_parameters = ['MaterialsRheologyBbar']
|
---|
55 | md.inversion.maxsteps = maxsteps
|
---|
56 | md.inversion.cost_functions = [101]
|
---|
57 | md.inversion.cost_functions_coefficients = np.ones((md.mesh.numberofvertices, 1))
|
---|
58 | md.inversion.min_parameters = cuffey(273) * np.ones((md.mesh.numberofvertices, 1))
|
---|
59 | md.inversion.max_parameters = cuffey(200) * np.ones((md.mesh.numberofvertices, 1))
|
---|
60 |
|
---|
61 | #Go solve!
|
---|
62 | md.verbose = verbose(0)
|
---|
63 | md = solve(md, 'Stressbalance')
|
---|
64 | plotmodel(md, 'axis#all', 'tight', 'data', md.results.StressbalanceSolution.MaterialsRheologyBbar, 'caxis', Clims, 'title', 'inferred B',
|
---|
65 | 'data', md.results.StressbalanceSolution.Vel, 'title', 'modeled velocities')
|
---|
66 |
|
---|
67 |
|
---|
68 | if 4 in steps:
|
---|
69 | #invert for ice rigidity
|
---|
70 | md = loadmodel('model2.nc')
|
---|
71 |
|
---|
72 | #Set up inversion parameters
|
---|
73 | maxsteps = 20
|
---|
74 | md.inversion.iscontrol = 1
|
---|
75 | md.inversion.control_parameters = ['MaterialsRheologyBbar']
|
---|
76 | md.inversion.maxsteps = maxsteps
|
---|
77 | md.inversion.cost_functions = [101, 502]
|
---|
78 | md.inversion.cost_functions_coefficients = np.ones((md.mesh.numberofvertices, 2))
|
---|
79 | md.inversion.cost_functions_coefficients[:, 1] = 1e-16
|
---|
80 | md.inversion.min_parameters = cuffey(273) * np.ones((md.mesh.numberofvertices, 1))
|
---|
81 | md.inversion.max_parameters = cuffey(200) * np.ones((md.mesh.numberofvertices, 1))
|
---|
82 |
|
---|
83 | #Go solve!
|
---|
84 | md.verbose = verbose(0)
|
---|
85 | md = solve(md, 'Stressbalance')
|
---|
86 | plotmodel(md, 'axis#all', 'tight', 'data', md.results.StressbalanceSolution.MaterialsRheologyBbar, 'caxis', Clims, 'title', 'inferred B',
|
---|
87 | 'data', md.results.StressbalanceSolution.Vel, 'title', 'modeled velocities')
|
---|