Ignore:
Timestamp:
10/07/13 10:54:18 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: md.inversion.cost_functions is now only one line (i.e., we cannot change the cost function during the optimization)

File:
1 edited

Legend:

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

    r16249 r16307  
    9393
    9494                #several responses can be used:
    95                 self.cost_functions=101*numpy.ones((self.nsteps,1))
     95                self.cost_functions=101
    9696
    9797                #step_threshold is used to speed up control method. When
     
    114114
    115115                num_controls=numpy.size(md.inversion.control_parameters)
    116                 num_costfunc=numpy.size(md.inversion.cost_functions,axis=1)
     116                num_costfunc=numpy.size(md.inversion.cost_functions)
    117117
    118118                md = checkfield(md,'inversion.iscontrol','values',[0,1])
     
    123123                md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
    124124                md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
    125                 md = checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps,num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
     125                md = checkfield(md,'inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
    126126                md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
    127127                md = checkfield(md,'inversion.gradient_scaling','size',[md.inversion.nsteps,num_controls])
     
    171171
    172172                #process cost functions
    173                 num_cost_functions=numpy.size(self.cost_functions,axis=1)
     173                num_cost_functions=numpy.size(self.cost_functions)
    174174                data=copy.deepcopy(self.cost_functions)
    175                 data[numpy.nonzero(data==101)]=SurfaceAbsVelMisfitEnum()
    176                 data[numpy.nonzero(data==102)]=SurfaceRelVelMisfitEnum()
    177                 data[numpy.nonzero(data==103)]=SurfaceLogVelMisfitEnum()
    178                 data[numpy.nonzero(data==104)]=SurfaceLogVxVyMisfitEnum()
    179                 data[numpy.nonzero(data==105)]=SurfaceAverageVelMisfitEnum()
    180                 data[numpy.nonzero(data==201)]=ThicknessAbsMisfitEnum()
    181                 data[numpy.nonzero(data==501)]=DragCoefficientAbsGradientEnum()
    182                 data[numpy.nonzero(data==502)]=RheologyBbarAbsGradientEnum()
    183                 data[numpy.nonzero(data==503)]=ThicknessAbsGradientEnum()
    184                 data[numpy.nonzero(data==504)]=ThicknessAlongGradientEnum()
    185                 data[numpy.nonzero(data==505)]=ThicknessAcrossGradientEnum()
    186                 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
     175                data=[SurfaceAbsVelMisfitEnum()        if x==101 else x for x in data]
     176                data=[SurfaceRelVelMisfitEnum()        if x==102 else x for x in data]
     177                data=[SurfaceLogVelMisfitEnum()        if x==103 else x for x in data]
     178                data=[SurfaceLogVxVyMisfitEnum()       if x==104 else x for x in data]
     179                data=[SurfaceAverageVelMisfitEnum()    if x==105 else x for x in data]
     180                data=[ThicknessAbsMisfitEnum()         if x==201 else x for x in data]
     181                data=[DragCoefficientAbsGradientEnum() if x==501 else x for x in data]
     182                data=[RheologyBbarAbsGradientEnum()    if x==502 else x for x in data]
     183                data=[ThicknessAbsGradientEnum()       if x==503 else x for x in data]
     184                data=[ThicknessAlongGradientEnum()     if x==504 else x for x in data]
     185                data=[ThicknessAcrossGradientEnum()    if x==505 else x for x in data]
     186                WriteData(fid,'data',numpy.array(data).reshape(1,-1),'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
    187187                WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
    188188        # }}}
Note: See TracChangeset for help on using the changeset viewer.