[26560] | 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')
|
---|