source: issm/trunk/examples/Inversion/runme.py@ 26744

Last change on this file since 26744 was 26744, checked in by Mathieu Morlighem, 3 years ago

merged trunk-jpl and trunk for revision 26742

File size: 3.4 KB
Line 
1import numpy as np
2from model import *
3from setmask import setmask
4from parameterize import parameterize
5from setflowequation import setflowequation
6from generic import generic
7from solve import solve
8from plotmodel import plotmodel
9from export_netCDF import export_netCDF
10from m1qn3inversion import m1qn3inversion
11from verbose import verbose
12from loadmodel import loadmodel
13from cuffey import cuffey
14steps = [4]
15Clims = [1.3 * 1e8, 1.9 * 1e8]
16
17if 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
30if 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
47if 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
68if 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')
Note: See TracBrowser for help on using the repository browser.