source:
issm/oecreview/Archive/21724-22754/ISSM-22103-22104.diff@
22755
Last change on this file since 22755 was 22755, checked in by , 7 years ago | |
---|---|
File size: 10.4 KB |
-
../trunk-jpl/src/m/classes/misfit.py
1 import numpy as np 2 from project3d import project3d 3 from pairoptions import * 4 from collections import OrderedDict 5 from fielddisplay import fielddisplay 6 from checkfield import checkfield 7 from WriteData import WriteData 8 9 10 class misfit(object): 11 """ 12 MISFIT class definition 13 14 Usage: 15 misfit=misfit() 16 misfit=misfit(name='SurfaceAltimetry', 17 definitionstring='Outputdefinition1', 18 model_string='Surface', 19 observation_string='SurfaceObservations', 20 observation=md.geometry.surface, 21 timeinterpolation='nearestneighbor', 22 local=1, 23 weights=np.ones((md.mesh.numberofvertices,1)), 24 weights_string='WeightsSurfaceObservations') 25 """ 26 27 def __init__(self, name = None, definitionstring = None, model_string = None, observation = None, observation_string = None, timeinterpolation = None, local = None, weights = None, weights_string = None, cumulated = None): 28 # {{{ 29 self.name = name if name is not None else '' 30 31 #string that identifies this output definition uniquely, from 'Outputdefinition[1-100]' 32 self.definitionstring = definitionstring if definitionstring is not None else '' 33 34 #string for field that is modeled 35 self.model_string = model_string if model_string is not None else '' 36 37 #observed field that we compare the model against 38 self.observation = observation if observation is not None else float('NaN') 39 40 #string for observed field. 41 self.observation_string = observation_string if observation_string is not None else '' 42 43 self.timeinterpolation = timeinterpolation if timeinterpolation is not None else 'nearestneighbor' 44 45 self.local = local if local is not None else 1 46 47 #weight coefficients for every vertex 48 self.weights = weights if weights is not None else float('NaN') 49 50 #string to identify this particular set of weights 51 self.weights_string = weights_string if weights_string is not None else '' 52 53 #do we cumulate misfit through time? 54 self.cumulated = cumulated if cumulated is not None else float('NaN') 55 #}}} 56 57 def __repr__(self): # {{{ 58 string=' Misfit:' 59 60 string="%s\n%s"%(string,fielddisplay(self,'name','identifier for this misfit response')) 61 string="%s\n%s"%(string,fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from "Outputdefinition[1-10]"')) 62 string="%s\n%s"%(string,fielddisplay(self,'model_string','string for field that is modeled')) 63 string="%s\n%s"%(string,fielddisplay(self,'observation','observed field that we compare the model against')) 64 string="%s\n%s"%(string,fielddisplay(self,'observation_string','observation string')) 65 string="%s\n%s"%(string,fielddisplay(self,'local','is the response local to the elements, or global? (default is 1)')) 66 string="%s\n%s"%(string,fielddisplay(self,'timeinterpolation','interpolation routine used to interpolate misfit between two time steps (default is "nearestneighbor"')) 67 string="%s\n%s"%(string,fielddisplay(self,'weights','weights (at vertices) to apply to the misfit')) 68 string="%s\n%s"%(string,fielddisplay(self,'weights_string','string for weights for identification purposes')) 69 return string 70 #}}} 71 72 def extrude(self,md): # {{{ 73 if not np.any(np.isnan(self.weights)): 74 self.weights = project3d(md,'vector',self.weights,'type','node') 75 if not np.any(np.isnan(self.observation)): 76 self.observation = project3d(md,'vector',self.observation,'type','node') 77 return self 78 #}}} 79 80 def checkconsistency(self,md,solution,analyses): # {{{ 81 if type(self.name) != str: 82 raise TypeError('misfit error message: "name" field should be a string!') 83 84 OutputdefinitionStringArray = [] 85 for i in range(100): 86 OutputdefinitionStringArray.append('Outputdefinition' + str(i)) 87 88 md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray) 89 if type(self.timeinterpolation) != str: 90 raise TypeError('misfit error message: "timeinterpolation" field should be a string!') 91 92 md = checkfield(md,'fieldname','self.observation','field',self.observation,'timeseries',1,'NaN',1,'Inf',1) 93 md = checkfield(md,'fieldname','self.timeinterpolation','field',self.timeinterpolation,'values',['nearestneighbor']) 94 md = checkfield(md,'fieldname','self.weights','field',self.weights,'timeseries',1,'NaN',1,'Inf',1) 95 96 return md 97 # }}} 98 99 def marshall(self,prefix,md,fid): # {{{ 100 WriteData(fid,prefix,'data',self.name,'name','md.misfit.name','format','String') 101 WriteData(fid,prefix,'data',self.definitionstring,'name','md.misfit.definitionstring','format','String') 102 WriteData(fid,prefix,'data',self.model_string,'name','md.misfit.model_string','format','String') 103 WriteData(fid,prefix,'data',self.observation,'name','md.misfit.observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 104 WriteData(fid,prefix,'data',self.observation_string,'name','md.misfit.observation_string','format','String') 105 WriteData(fid,prefix,'data',self.local,'name','md.misfit.local','format','Integer') 106 WriteData(fid,prefix,'data',self.timeinterpolation,'name','md.misfit.timeinterpolation','format','String') 107 WriteData(fid,prefix,'data',self.weights,'name','md.misfit.weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 108 WriteData(fid,prefix,'data',self.weights_string,'name','md.misfit.weights_string','format','String') 109 # }}} -
../trunk-jpl/test/NightlyRun/test123.py
1 #Test Name: SquareShelfConstrainedTranMisfitSurface 2 from model import * 3 from socket import gethostname 4 from triangle import * 5 from setmask import * 6 from parameterize import * 7 from setflowequation import * 8 from solve import * 9 from misfit import * 10 11 12 md=triangle(model(),'../Exp/Square.exp',180000) 13 md=setmask(md,'all','') 14 md=parameterize(md,'../Par/SquareShelfConstrained.py') 15 md=setflowequation(md,'SSA','all') 16 md.cluster=generic('name',gethostname(),'np',3) 17 18 fake_surface = np.vstack((np.append(np.array(md.geometry.surface)+100,1.1), 19 np.append(np.array(md.geometry.surface)+200,2.1), 20 np.append(np.array(md.geometry.surface)+300,2.5))).T 21 22 md.transient.requested_outputs = ['default','SurfaceMisfit'] 23 md.outputdefinition.definitions = [misfit( 24 name='SurfaceMisfit', 25 definitionstring='Outputdefinition1', 26 model_string='Surface', 27 observation=fake_surface, 28 observation_string='SurfaceObservation', 29 timeinterpolation='nearestneighbor', 30 weights=np.ones((md.mesh.numberofvertices,1)), 31 weights_string='WeightsSurfaceObservation' 32 )] 33 34 md=solve(md,'Transient') 35 36 #Fields and tolerances to track changes 37 field_names = ['SurfaceMisfitFirstStep','SurfaceMisfitSecondStep','SurfaceMisfitThirdStep'] 38 field_tolerances = [1e-13,1e-13,1e-13] 39 field_values = [ 40 md.results.TransientSolution[0].SurfaceMisfit, 41 md.results.TransientSolution[1].SurfaceMisfit, 42 md.results.TransientSolution[2].SurfaceMisfit 43 ] -
../trunk-jpl/test/NightlyRun/test124.py
1 #Test Name: SquareShelfConstrainedTranFSFreeSurface 2 from model import * 3 from socket import gethostname 4 from triangle import * 5 from setmask import * 6 from parameterize import * 7 from setflowequation import * 8 from solve import * 9 10 md=triangle(model(),'../Exp/Square.exp',150000) 11 md=setmask(md,'all','') 12 md=parameterize(md,'../Par/SquareShelfConstrained.py') 13 md.extrude(3,1) 14 md=setflowequation(md,'FS','all') 15 16 #Free surface 17 md.masstransport.isfreesurface = 1 18 md.timestepping.time_step = 0.00001 19 md.timestepping.final_time = 0.00005 20 21 #Go solve 22 md.cluster=generic('name',gethostname(),'np',3) 23 md=solve(md,'Transient') 24 25 #Fields and tolerances to track changes 26 field_names = [ 27 'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1', 28 'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2', 29 'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'] 30 field_tolerances = [ 31 2e-09,3e-9,3e-9,3e-9,1e-13,1e-12,1e-12, 32 2e-09,3e-9,3e-9,3e-9,1e-10,1e-10,1e-10, 33 2e-09,3e-9,3e-9,3e-9,1e-10,1e-10,1e-10] 34 field_values = [ 35 md.results.TransientSolution[0].Vx, 36 md.results.TransientSolution[0].Vy, 37 md.results.TransientSolution[0].Vel, 38 md.results.TransientSolution[0].Pressure, 39 md.results.TransientSolution[0].Base, 40 md.results.TransientSolution[0].Surface, 41 md.results.TransientSolution[0].Thickness, 42 md.results.TransientSolution[1].Vx, 43 md.results.TransientSolution[1].Vy, 44 md.results.TransientSolution[1].Vel, 45 md.results.TransientSolution[1].Pressure, 46 md.results.TransientSolution[1].Base, 47 md.results.TransientSolution[1].Surface, 48 md.results.TransientSolution[1].Thickness, 49 md.results.TransientSolution[2].Vx, 50 md.results.TransientSolution[2].Vy, 51 md.results.TransientSolution[2].Vel, 52 md.results.TransientSolution[2].Pressure, 53 md.results.TransientSolution[2].Base, 54 md.results.TransientSolution[2].Surface, 55 md.results.TransientSolution[2].Thickness, 56 ] -
../trunk-jpl/test/NightlyRun/runme.py
179 179 #compare to archive 180 180 # Matlab uses base 1, so use base 1 in labels 181 181 archive=np.array(archread(archive_file,archive_name+'_field'+str(k+1))) 182 if archive == None: 182 #Because np.array is weird (str(np.array(None)) becomes 'None' but np.array(None) is never equal to None, it basically becomes a type of string in an array): 183 if str(archive) == 'None': 183 184 raise NameError("Field name '"+archive_name+'_field'+str(k+1)+"' does not exist in archive file.") 184 185 error_diff=np.amax(np.abs(archive-field),axis=0)/(np.amax(np.abs(archive),axis=0)+float_info.epsilon) 185 186 if not np.isscalar(error_diff): error_diff=error_diff[0]
Note:
See TracBrowser
for help on using the repository browser.