Changeset 17763
- Timestamp:
- 04/18/14 07:25:06 (11 years ago)
- 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 164 164 MaterialsRheologyLawEnum, 165 165 MaterialsRheologyNEnum, 166 DamageIsdamageEnum, 166 167 DamageDEnum, 167 168 DamageFEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r17757 r17763 172 172 case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw"; 173 173 case MaterialsRheologyNEnum : return "MaterialsRheologyN"; 174 case DamageIsdamageEnum : return "DamageIsdamage"; 174 175 case DamageDEnum : return "DamageD"; 175 176 case DamageFEnum : return "DamageF"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r17757 r17763 175 175 else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum; 176 176 else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum; 177 else if (strcmp(name,"DamageIsdamage")==0) return DamageIsdamageEnum; 177 178 else if (strcmp(name,"DamageD")==0) return DamageDEnum; 178 179 else if (strcmp(name,"DamageF")==0) return DamageFEnum; … … 259 260 else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum; 260 261 else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum; 261 else if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum;262 262 else stage=3; 263 263 } 264 264 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; 266 267 else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum; 267 268 else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum; … … 382 383 else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum; 383 384 else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum; 384 else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;385 385 else stage=4; 386 386 } 387 387 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; 389 390 else if (strcmp(name,"FSpressure")==0) return FSpressureEnum; 390 391 else if (strcmp(name,"Constraints")==0) return ConstraintsEnum; … … 505 506 else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum; 506 507 else if (strcmp(name,"Vel")==0) return VelEnum; 507 else if (strcmp(name,"Velocity")==0) return VelocityEnum;508 508 else stage=5; 509 509 } 510 510 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; 512 513 else if (strcmp(name,"Vx")==0) return VxEnum; 513 514 else if (strcmp(name,"VxPicard")==0) return VxPicardEnum; … … 628 629 else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum; 629 630 else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum; 630 else if (strcmp(name,"Contact")==0) return ContactEnum;631 631 else stage=6; 632 632 } 633 633 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; 635 636 else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum; 636 637 else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum; -
issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
r17687 r17763 32 32 else: 33 33 #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.) 38 39 39 40 # pos=find(md.mesh.vertexonboundary & ~vertexonicefront); … … 42 43 print "SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually." 43 44 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,)) 47 48 md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6)) 48 49 md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3)) … … 68 69 else: 69 70 pos=numpy.nonzero(md.mesh.vertexonboundary)[0] 70 md.stressbalance.spcvx[pos [:]]=071 md.stressbalance.spcvy[pos [:]]=072 md.stressbalance.spcvz[pos [:]]=071 md.stressbalance.spcvx[pos]=0 72 md.stressbalance.spcvy[pos]=0 73 md.stressbalance.spcvz[pos]=0 73 74 74 75 #Dirichlet Values … … 90 91 #Deal with other boundary conditions 91 92 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,)) 93 94 print " no balancethickness.thickening_rate specified: values set as zero" 94 95 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,)) 98 99 99 100 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,)) 101 102 if hasattr(md.mesh,'vertexonsurface'): 102 103 pos=numpy.nonzero(md.mesh.vertexonsurface)[0] 103 104 md.thermal.spctemperature[pos]=md.initialization.temperature[pos] #impose observed temperature on surface 104 105 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/m2106 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 107 108 else: 108 109 print " no thermal boundary conditions created: no observed temperature found" 109 110 110 111 return md 111 -
issm/trunk-jpl/src/m/classes/damage.py
r17745 r17763 17 17 18 18 #damage: 19 self.isdamage = float('NaN') 19 20 self.D = float('NaN') 20 21 self.law = '' … … 24 25 #numerical 25 26 stabilization = float('NaN') 27 maxiter = float('NaN') 28 elementinterp = '' 26 29 penalty_threshold = float('NaN') 27 maxiter = float('NaN')28 30 penalty_lock = float('NaN') 29 31 penalty_factor = float('NaN') … … 47 49 def __repr__(self): # {{{ 48 50 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)") 49 58 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)") 60 65 61 66 if (self.law=='pralong'): … … 74 79 75 80 #damage parameters: 81 self.isdamage=0 76 82 self.D=0 77 83 self.law='undamaged' … … 84 90 #Maximum number of iterations 85 91 self.maxiter=100 92 93 #finite element interpolation 94 self.elementinterp='P1' 86 95 87 96 #factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor … … 119 128 def checkconsistency(self,md,solution,analyses): # {{{ 120 129 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) 131 143 132 144 if self.law == 'pralong': … … 148 160 def marshall(self,md,fid): # {{{ 149 161 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') 154 168 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') 160 175 161 176 if self.law=='pralong': -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r17757 r17763 164 164 def MaterialsRheologyLawEnum(): return StringToEnum("MaterialsRheologyLaw")[0] 165 165 def MaterialsRheologyNEnum(): return StringToEnum("MaterialsRheologyN")[0] 166 def DamageIsdamageEnum(): return StringToEnum("DamageIsdamage")[0] 166 167 def DamageDEnum(): return StringToEnum("DamageD")[0] 167 168 def DamageFEnum(): return StringToEnum("DamageF")[0]
Note:
See TracChangeset
for help on using the changeset viewer.