Changeset 18994


Ignore:
Timestamp:
01/07/15 08:48:32 (10 years ago)
Author:
Mathieu Morlighem
Message:

NEW: merging cost functions

Location:
issm/trunk-jpl/src/m
Files:
5 added
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/inversion.m

    r18993 r18994  
    136136                        md = checkfield(md,'fieldname','inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
    137137                        md = checkfield(md,'fieldname','inversion.step_threshold','size',[md.inversion.nsteps 1]);
    138                         md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:507 601:604]);
     138                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
    139139                        md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
    140140                        md = checkfield(md,'fieldname','inversion.gradient_scaling','size',[md.inversion.nsteps num_controls]);
     
    227227                        %process cost functions
    228228                        num_cost_functions=size(obj.cost_functions,2);
    229                         data=obj.cost_functions;
    230                         pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
    231                         pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
    232                         pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
    233                         pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
    234                         pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
    235                         pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
    236                         pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
    237                         pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
    238                         pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
    239                         pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
    240                         pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
    241                         pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
    242                         pos=find(obj.cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
    243                         pos=find(obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
     229                        data=marshallcostfunctions(obj.cost_functions);
    244230                        WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
    245231                        WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
  • issm/trunk-jpl/src/m/classes/inversion.py

    r18771 r18994  
    11import numpy
    2 import copy
    32from fielddisplay import fielddisplay
    43from EnumDefinitions import *
     
    65from checkfield import checkfield
    76from WriteData import WriteData
     7from supportedcontrols import supportedcontrols
     8from supportedcostfunctions import supportedcostfunctions
     9from marshallcostfunctions import marshallcostfunctions
    810
    911class inversion(object):
     
    119121                md = checkfield(md,'fieldname','inversion.iscontrol','values',[0,1])
    120122                md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
    121                 md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy'])
     123                md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols())
    122124                md = checkfield(md,'fieldname','inversion.nsteps','numel',[1],'>=',0)
    123125                md = checkfield(md,'fieldname','inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
    124126                md = checkfield(md,'fieldname','inversion.step_threshold','size',[md.inversion.nsteps])
    125                 md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
     127                md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',supportedcostfunctions())
    126128                md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
    127129                md = checkfield(md,'fieldname','inversion.gradient_scaling','size',[md.inversion.nsteps,num_controls])
     
    173175                #process cost functions
    174176                num_cost_functions=numpy.size(self.cost_functions)
    175                 data=copy.deepcopy(self.cost_functions)
    176                 pos=[i for i,x in enumerate(self.cost_functions) if x==101];
    177                 for i in pos: data[i]=SurfaceAbsVelMisfitEnum()       
    178                 pos=[i for i,x in enumerate(self.cost_functions) if x==102];
    179                 for i in pos: data[i]=SurfaceRelVelMisfitEnum()       
    180                 pos=[i for i,x in enumerate(self.cost_functions) if x==103];
    181                 for i in pos: data[i]=SurfaceLogVelMisfitEnum()       
    182                 pos=[i for i,x in enumerate(self.cost_functions) if x==104];
    183                 for i in pos: data[i]=SurfaceLogVxVyMisfitEnum()       
    184                 pos=[i for i,x in enumerate(self.cost_functions) if x==105];
    185                 for i in pos: data[i]=SurfaceAverageVelMisfitEnum()   
    186                 pos=[i for i,x in enumerate(self.cost_functions) if x==201];
    187                 for i in pos: data[i]=ThicknessAbsMisfitEnum()         
    188                 pos=[i for i,x in enumerate(self.cost_functions) if x==501];
    189                 for i in pos: data[i]=DragCoefficientAbsGradientEnum()
    190                 pos=[i for i,x in enumerate(self.cost_functions) if x==502];
    191                 for i in pos: data[i]=RheologyBbarAbsGradientEnum()   
    192                 pos=[i for i,x in enumerate(self.cost_functions) if x==503];
    193                 for i in pos: data[i]=ThicknessAbsGradientEnum()       
    194                 pos=[i for i,x in enumerate(self.cost_functions) if x==504];
    195                 for i in pos: data[i]=ThicknessAlongGradientEnum()     
    196                 pos=[i for i,x in enumerate(self.cost_functions) if x==505];
    197                 for i in pos: data[i]=ThicknessAcrossGradientEnum()   
     177                data=marshallcostfunctions(self.cost_functions)
    198178                WriteData(fid,'data',numpy.array(data).reshape(1,-1),'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
    199179                WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
  • issm/trunk-jpl/src/m/classes/inversionvalidation.m

    r18824 r18994  
    5757                        md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
    5858                        md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0 1]);
    59                         md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
    60                                 {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar' 'Vx' 'Vy' 'Thickness',...
    61                                 'BalancethicknessOmega' 'BalancethicknessApparentMassbalance','MaterialsRheologyB'});
     59                        md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
    6260                        md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1);
    63                         md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:507 601:604]);
     61                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
    6462                        md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
    6563                        md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
     
    137135                        %process cost functions
    138136                        num_cost_functions=size(obj.cost_functions,2);
    139                         data=obj.cost_functions;
    140                         pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
    141                         pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
    142                         pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
    143                         pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
    144                         pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
    145                         pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
    146                         pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
    147                         pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
    148                         pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
    149                         pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
    150                         pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
    151                         pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
    152                         pos=find(obj.cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
    153                         pos=find(obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
     137                        data=marshallcostfunctions(obj.cost_functions);
    154138                        WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
    155139                        WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.m

    r18824 r18994  
    7474                        md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
    7575                        md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0 1]);
    76                         md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
    77                                 {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar',...
    78                                 'Vx' 'Vy' 'Thickness' 'BalancethicknessOmega' 'BalancethicknessApparentMassbalance','MaterialsRheologyB'});
     76                        md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
    7977                        md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1);
    8078                        md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0);
     
    8280                        md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
    8381                        md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0);
    84                         md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:507 601:604]);
     82                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
    8583                        md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
    8684                        md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
     
    167165                        %process cost functions
    168166                        num_cost_functions=size(obj.cost_functions,2);
    169                         data=obj.cost_functions;
    170                         pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
    171                         pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
    172                         pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
    173                         pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
    174                         pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
    175                         pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
    176                         pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
    177                         pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
    178                         pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
    179                         pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
    180                         pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
    181                         pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
    182                         pos=find(obj.cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
    183                         pos=find(obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
     167                        data=marshallcostfunctions(obj.cost_functions);
    184168                        WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
    185169                        WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.py

    r17918 r18994  
    11import numpy
    2 import copy
    32from fielddisplay import fielddisplay
    43from EnumDefinitions import *
     
    65from checkfield import checkfield
    76from WriteData import WriteData
     7from supportedcontrols import supportedcontrols
     8from supportedcostfunctions import supportedcostfunctions
     9from marshallcostfunctions import marshallcostfunctions
    810
    911class m1qn3inversion(object):
     
    119121                md = checkfield(md,'fieldname','inversion.iscontrol','values',[0,1])
    120122                md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
    121                 md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy','Thickness'])
     123                md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols())
    122124                md = checkfield(md,'fieldname','inversion.maxsteps','numel',[1],'>=',0)
    123125                md = checkfield(md,'fieldname','inversion.maxiter','numel',[1],'>=',0)
    124126                md = checkfield(md,'fieldname','inversion.dxmin','numel',[1],'>',0.)
    125127                md = checkfield(md,'fieldname','inversion.gttol','numel',[1],'>',0.)
    126                 md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
     128                md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',supportedcostfunctions())
    127129                md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
    128130                md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
     
    166168                #process cost functions
    167169                num_cost_functions=numpy.size(self.cost_functions)
    168                 data=copy.deepcopy(self.cost_functions)
    169                 pos=[i for i,x in enumerate(self.cost_functions) if x==101];
    170                 for i in pos: data[i]=SurfaceAbsVelMisfitEnum()       
    171                 pos=[i for i,x in enumerate(self.cost_functions) if x==102];
    172                 for i in pos: data[i]=SurfaceRelVelMisfitEnum()       
    173                 pos=[i for i,x in enumerate(self.cost_functions) if x==103];
    174                 for i in pos: data[i]=SurfaceLogVelMisfitEnum()       
    175                 pos=[i for i,x in enumerate(self.cost_functions) if x==104];
    176                 for i in pos: data[i]=SurfaceLogVxVyMisfitEnum()       
    177                 pos=[i for i,x in enumerate(self.cost_functions) if x==105];
    178                 for i in pos: data[i]=SurfaceAverageVelMisfitEnum()   
    179                 pos=[i for i,x in enumerate(self.cost_functions) if x==201];
    180                 for i in pos: data[i]=ThicknessAbsMisfitEnum()         
    181                 pos=[i for i,x in enumerate(self.cost_functions) if x==501];
    182                 for i in pos: data[i]=DragCoefficientAbsGradientEnum()
    183                 pos=[i for i,x in enumerate(self.cost_functions) if x==502];
    184                 for i in pos: data[i]=RheologyBbarAbsGradientEnum()   
    185                 pos=[i for i,x in enumerate(self.cost_functions) if x==503];
    186                 for i in pos: data[i]=ThicknessAbsGradientEnum()       
    187                 pos=[i for i,x in enumerate(self.cost_functions) if x==504];
    188                 for i in pos: data[i]=ThicknessAlongGradientEnum()     
    189                 pos=[i for i,x in enumerate(self.cost_functions) if x==505];
    190                 for i in pos: data[i]=ThicknessAcrossGradientEnum()   
     170                data=marshallcostfunctions(self.cost_functions)
    191171                WriteData(fid,'data',numpy.array(data).reshape(1,-1),'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
    192172                WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
  • issm/trunk-jpl/src/m/classes/taoinversion.m

    r18687 r18994  
    8686                        md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
    8787                        md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0 1]);
    88                         md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
    89                                 {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'});
     88                        md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
    9089                        md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0);
    9190                        md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0);
     
    104103                        end
    105104
    106                         md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
     105                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
    107106                        md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
    108107                        md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
     
    187186                        %process cost functions
    188187                        num_cost_functions=size(obj.cost_functions,2);
    189                         data=obj.cost_functions;
    190                         pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
    191                         pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
    192                         pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
    193                         pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
    194                         pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
    195                         pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
    196                         pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
    197                         pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
    198                         pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
    199                         pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
    200                         pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
    201                         pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
    202                         pos=find(obj.cost_functions==507); data(pos)=Balancethickness2MisfitEnum();
     188                        data=marshallcostfunctions(obj.cost_functions);
    203189                        WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
    204190                        WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
Note: See TracChangeset for help on using the changeset viewer.