Changeset 17763


Ignore:
Timestamp:
04/18/14 07:25:06 (11 years ago)
Author:
cborstad
Message:

CHG: python fixes for NR now that it is no longer necessary to specify damage

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17757 r17763  
    164164        MaterialsRheologyLawEnum,
    165165        MaterialsRheologyNEnum,
     166        DamageIsdamageEnum,
    166167        DamageDEnum,
    167168        DamageFEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17757 r17763  
    172172                case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw";
    173173                case MaterialsRheologyNEnum : return "MaterialsRheologyN";
     174                case DamageIsdamageEnum : return "DamageIsdamage";
    174175                case DamageDEnum : return "DamageD";
    175176                case DamageFEnum : return "DamageF";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17757 r17763  
    175175              else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
    176176              else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
     177              else if (strcmp(name,"DamageIsdamage")==0) return DamageIsdamageEnum;
    177178              else if (strcmp(name,"DamageD")==0) return DamageDEnum;
    178179              else if (strcmp(name,"DamageF")==0) return DamageFEnum;
     
    259260              else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
    260261              else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
    261               else if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum;
     265              if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum;
     266              else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum;
    266267              else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum;
    267268              else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum;
     
    382383              else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
    383384              else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
    384               else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
     388              if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
     389              else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
    389390              else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
    390391              else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
     
    505506              else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
    506507              else if (strcmp(name,"Vel")==0) return VelEnum;
    507               else if (strcmp(name,"Velocity")==0) return VelocityEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
     511              if (strcmp(name,"Velocity")==0) return VelocityEnum;
     512              else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
    512513              else if (strcmp(name,"Vx")==0) return VxEnum;
    513514              else if (strcmp(name,"VxPicard")==0) return VxPicardEnum;
     
    628629              else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
    629630              else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
    630               else if (strcmp(name,"Contact")==0) return ContactEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
     634              if (strcmp(name,"Contact")==0) return ContactEnum;
     635              else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
    635636              else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum;
    636637              else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
  • issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py

    r17687 r17763  
    3232        else:
    3333                #Guess where the ice front is
    34                 vertexonfloatingice=numpy.zeros((md.mesh.numberofvertices,1))
    35                 pos=numpy.nonzero(numpy.sum(md.mask.groundedice_levelset[md.mesh.elements-1]<0.,axis=1) >0.)[0]
    36                 vertexonfloatingice[md.mesh.elements[pos].astype(int)-1]=1.
    37                 vertexonicefront=numpy.logical_and(numpy.reshape(md.mesh.vertexonboundary,(-1,1)),vertexonfloatingice>0.)
     34                vertexonfloatingice=numpy.zeros((md.mesh.numberofvertices,))
     35                pos=numpy.nonzero(numpy.sum(md.mask.groundedice_levelset[md.mesh.elements-1]<0,axis=1) > 0)[0]
     36                #vertexonfloatingice[md.mesh.elements[pos].astype(int)-1]=1.
     37                vertexonfloatingice[md.mesh.elements[pos]-1]=1.
     38                vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,vertexonfloatingice>0.)
    3839
    3940#       pos=find(md.mesh.vertexonboundary & ~vertexonicefront);
     
    4243                print "SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually."
    4344
    44         md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
    45         md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
    46         md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
     45        md.stressbalance.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,))
     46        md.stressbalance.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,))
     47        md.stressbalance.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,))
    4748        md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
    4849        md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
     
    6869        else:
    6970                pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
    70         md.stressbalance.spcvx[pos[:]]=0
    71         md.stressbalance.spcvy[pos[:]]=0
    72         md.stressbalance.spcvz[pos[:]]=0
     71        md.stressbalance.spcvx[pos]=0
     72        md.stressbalance.spcvy[pos]=0
     73        md.stressbalance.spcvz[pos]=0
    7374
    7475        #Dirichlet Values
     
    9091        #Deal with other boundary conditions
    9192        if numpy.all(numpy.isnan(md.balancethickness.thickening_rate)):
    92                 md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
     93                md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,))
    9394                print "      no balancethickness.thickening_rate specified: values set as zero"
    9495
    95         md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
    96         md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
    97         md.damage.spcdamage=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
     96        md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,))
     97        md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,))
     98        md.damage.spcdamage=float('nan')*numpy.ones((md.mesh.numberofvertices,))
    9899
    99100        if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
    100                 md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
     101                md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,))
    101102                if hasattr(md.mesh,'vertexonsurface'):
    102103                        pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
    103104                        md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
    104105                if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
    105                         md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
    106                         md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)]=50.*10.**-3    #50mW/m2
     106                        md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,))
     107                        md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)[0]]=50.*10.**-3    #50mW/m2
    107108        else:
    108109                print "      no thermal boundary conditions created: no observed temperature found"
    109110
    110111        return md
    111 
  • issm/trunk-jpl/src/m/classes/damage.py

    r17745 r17763  
    1717                       
    1818                #damage:
     19                self.isdamage           = float('NaN')
    1920                self.D                                          = float('NaN')
    2021                self.law                                                = ''
     
    2425                #numerical
    2526                stabilization                           = float('NaN')
     27                maxiter                                         = float('NaN')
     28                elementinterp           = ''
    2629                penalty_threshold                       = float('NaN')
    27                 maxiter                                         = float('NaN')
    2830                penalty_lock                            = float('NaN')
    2931                penalty_factor                          = float('NaN')
     
    4749        def __repr__(self):    # {{{
    4850                s ='   Damage:\n'
     51               
     52                s+="%s\n" % fielddisplay(self,"isdamage","is damage mechanics being used? [0 (default) or 1]")
     53                if self.isdamage:
     54                        s+="%s\n" % fielddisplay(self,"D","damage tensor (scalar for now)")
     55                        s+="%s\n" % fielddisplay(self,"law","damage law (string) from ['undamaged','pralong']")
     56                        s+="%s\n" % fielddisplay(self,"spcdamage","damage constraints (NaN means no constraint)")
     57                        s+="%s\n" % fielddisplay(self,"max_damage","maximum possible damage (0<=max_damage<1)")
    4958
    50                 s+="%s\n" % fielddisplay(self,"D","damage tensor (scalar for now)")
    51                 s+="%s\n" % fielddisplay(self,"law","damage law (string) from ['undamaged','pralong']")
    52                 s+="%s\n" % fielddisplay(self,"spcdamage","damage constraints (NaN means no constraint)")
    53                 s+="%s\n" % fielddisplay(self,"max_damage","maximum possible damage (0<=max_damage<1)")
    54 
    55                 s+="%s\n" % fielddisplay(self,"stabilization","0: no, 1: artificial_diffusivity, 2: SUPG")
    56                 s+="%s\n" % fielddisplay(self,"maxiter","maximum number of non linear iterations")
    57                 s+="%s\n" % fielddisplay(self,"penalty_lock","stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)")
    58                 s+="%s\n" % fielddisplay(self,"penalty_threshold","threshold to declare convergence of damage evolution solution (default is 0)")
    59                 s+="%s\n" % fielddisplay(self,"penalty_factor","scaling exponent (default is 3)")
     59                        s+="%s\n" % fielddisplay(self,"stabilization","0: no, 1: artificial_diffusivity, 2: SUPG")
     60                        s+="%s\n" % fielddisplay(self,"maxiter","maximum number of non linear iterations")
     61                        s+="%s\n" %     fielddisplay(self,"elementinterp","interpolation scheme for finite elements {''P1'',''P2''}")
     62                        s+="%s\n" % fielddisplay(self,"penalty_lock","stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)")
     63                        s+="%s\n" % fielddisplay(self,"penalty_threshold","threshold to declare convergence of damage evolution solution (default is 0)")
     64                        s+="%s\n" % fielddisplay(self,"penalty_factor","scaling exponent (default is 3)")
    6065
    6166                if (self.law=='pralong'):
     
    7479
    7580                #damage parameters:
     81                self.isdamage=0
    7682                self.D=0
    7783                self.law='undamaged'
     
    8490                #Maximum number of iterations
    8591                self.maxiter=100
     92
     93                #finite element interpolation
     94                self.elementinterp='P1'
    8695
    8796                #factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor
     
    119128        def checkconsistency(self,md,solution,analyses):    # {{{
    120129
    121                 md = checkfield(md,'fieldname','damage.D','>=',0,'<=',self.max_damage,'size',[md.mesh.numberofvertices])
    122                 md = checkfield(md,'fieldname','damage.max_damage','<',1,'>=',0)
    123                 md = checkfield(md,'fieldname','damage.law','values',['undamaged','pralong'])
    124                 md = checkfield(md,'fieldname','damage.spcdamage','forcing',1)
    125                        
    126                 md = checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0,1,2])
    127                 md = checkfield(md,'fieldname','damage.maxiter','>=0',0)
    128                 md = checkfield(md,'fieldname','damage.penalty_factor','>=0',0)
    129                 md = checkfield(md,'fieldname','damage.penalty_lock','>=0',0)
    130                 md = checkfield(md,'fieldname','damage.penalty_threshold','>=0',0)
     130                md = checkfield(md,'fieldname','damage.isdamage','numel',[1],'values',[0,1])
     131                if self.isdamage:
     132                        md = checkfield(md,'fieldname','damage.D','>=',0,'<=',self.max_damage,'size',[md.mesh.numberofvertices])
     133                        md = checkfield(md,'fieldname','damage.max_damage','<',1,'>=',0)
     134                        md = checkfield(md,'fieldname','damage.law','values',['undamaged','pralong'])
     135                        md = checkfield(md,'fieldname','damage.spcdamage','forcing',1)
     136                               
     137                        md = checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0,1,2])
     138                        md = checkfield(md,'fieldname','damage.maxiter','>=0',0)
     139                        md = checkfield(md,'fieldname','damage.elementinterp','values',['P1','P2'])
     140                        md = checkfield(md,'fieldname','damage.penalty_factor','>=0',0)
     141                        md = checkfield(md,'fieldname','damage.penalty_lock','>=0',0)
     142                        md = checkfield(md,'fieldname','damage.penalty_threshold','>=0',0)
    131143
    132144                if self.law == 'pralong':
     
    148160        def marshall(self,md,fid):    # {{{
    149161
    150                 WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1)
    151                 WriteData(fid,'object',self,'fieldname','law','format','String')
    152                 WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
    153                 WriteData(fid,'object',self,'fieldname','max_damage','format','Double')
     162                WriteData(fid,'object',self,'fieldname','isdamage','format','Boolean')
     163                if self.isdamage:
     164                        WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1)
     165                        WriteData(fid,'object',self,'fieldname','law','format','String')
     166                        WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1)
     167                        WriteData(fid,'object',self,'fieldname','max_damage','format','Double')
    154168
    155                 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
    156                 WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer')
    157                 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
    158                 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer')
    159                 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
     169                        WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
     170                        WriteData(fid,'object',self,'fieldname','elementinterp','format','String')
     171                        WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer')
     172                        WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
     173                        WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer')
     174                        WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
    160175
    161176                if self.law=='pralong':
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17757 r17763  
    164164def MaterialsRheologyLawEnum(): return StringToEnum("MaterialsRheologyLaw")[0]
    165165def MaterialsRheologyNEnum(): return StringToEnum("MaterialsRheologyN")[0]
     166def DamageIsdamageEnum(): return StringToEnum("DamageIsdamage")[0]
    166167def DamageDEnum(): return StringToEnum("DamageD")[0]
    167168def DamageFEnum(): return StringToEnum("DamageF")[0]
Note: See TracChangeset for help on using the changeset viewer.