Changeset 19381
- Timestamp:
- 06/01/15 05:37:07 (10 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 1 added
- 3 deleted
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
r18930 r19381 69 69 parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum)); 70 70 parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum)); 71 parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyThresholdEnum));72 parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyLockEnum));73 parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyFactorEnum));74 71 parameters->AddObject(iomodel->CopyConstantObject(DamageMaxiterEnum)); 75 72 parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum)); … … 91 88 parameters->AddObject(iomodel->CopyConstantObject(DamageC4Enum)); 92 89 parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum)); 90 parameters->AddObject(iomodel->CopyConstantObject(DamageKappaEnum)); 93 91 parameters->AddObject(iomodel->CopyConstantObject(DamageHealingEnum)); 94 92 parameters->AddObject(iomodel->CopyConstantObject(DamageEquivStressEnum)); -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r19373 r19381 877 877 if(materials_type==MatdamageiceEnum){ 878 878 parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum)); 879 parameters->AddObject(iomodel->CopyConstantObject(DamageKappaEnum)); 879 880 parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum)); 880 881 } -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r19371 r19381 46 46 IssmDouble eps_xx,eps_xy,eps_yy,eps_xz,eps_yz,eps_zz,eps_eff; 47 47 IssmDouble epsmin=1.e-27; 48 IssmDouble eps_0, eps_f,sigma_0,B,D,n;48 IssmDouble eps_0,kappa,sigma_0,B,D,n,envelopeD; 49 49 int dim,counter=0; 50 50 IssmDouble k1,k2,threshold=1.e-12; … … 54 54 this->ComputeStrainRate(); 55 55 parameters->FindParam(&dim,DomainDimensionEnum); 56 parameters->FindParam(& eps_f,DamageC1Enum);56 parameters->FindParam(&kappa,DamageKappaEnum); 57 57 parameters->FindParam(&sigma_0,DamageStressThresholdEnum); 58 58 … … 113 113 /* Compute threshold strain rate from threshold stress */ 114 114 eps_0=pow(sigma_0/B,n); 115 _assert_(eps_f>eps_0); 116 117 /* Compute kappa (k) from pre-existing level of damage, using Newton-Raphson */ 118 /* provide a reasonable initial guess */ 119 if(D==0){ 120 k1=eps_0; 121 } 122 else{ 123 k1=exp(n*eps_0/(eps_f-eps_0)-n*log(1.-D)+log(eps_0)); /* initial guess */ 124 } 125 126 counter=0; 127 while(true){ 128 /*Newton step k2=k1-f(k1)/f'(k1) */ 129 k2=k1-(k1+(eps_f-eps_0)/n*log(k1)-eps_0+(eps_f-eps_0)*(log(1.-D)-1./n*log(eps_0)))/(1.+(eps_f-eps_0)/n/k1); 130 131 if( fabs(k2-k1)/(fabs(k2))<threshold ){ 132 break; 133 } 134 else{ 135 k1=k2; 136 counter++; 137 } 138 139 if(counter>50) break; 140 } 141 142 if(eps_eff>k2){ 143 newD[i]=1.-pow(eps_0/eps_eff,1./n)*exp(-(eps_eff-eps_0)/(eps_f-eps_0)); 115 116 if(eps_eff>eps_0){ 117 /* Compute damage on envelope curve for existing level of effective strain rate */ 118 envelopeD=1.-pow(eps_0/eps_eff,1./n)*exp(-(eps_eff-eps_0)/(eps_0*(kappa-1.))); 119 120 if(envelopeD>D){ 121 newD[i]=envelopeD; 122 } 123 else newD[i]=D; 144 124 } 145 125 else newD[i]=D; -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r19373 r19381 204 204 DamageHealingEnum, 205 205 DamageStressThresholdEnum, 206 DamageKappaEnum, 206 207 DamageStabilizationEnum, 207 DamagePenaltyThresholdEnum,208 DamagePenaltyLockEnum,209 DamagePenaltyFactorEnum,210 208 DamageMaxiterEnum, 211 209 DamageSpcdamageEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r19373 r19381 210 210 case DamageHealingEnum : return "DamageHealing"; 211 211 case DamageStressThresholdEnum : return "DamageStressThreshold"; 212 case DamageKappaEnum : return "DamageKappa"; 212 213 case DamageStabilizationEnum : return "DamageStabilization"; 213 case DamagePenaltyThresholdEnum : return "DamagePenaltyThreshold";214 case DamagePenaltyLockEnum : return "DamagePenaltyLock";215 case DamagePenaltyFactorEnum : return "DamagePenaltyFactor";216 214 case DamageMaxiterEnum : return "DamageMaxiter"; 217 215 case DamageSpcdamageEnum : return "DamageSpcdamage"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r19373 r19381 213 213 else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum; 214 214 else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum; 215 else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum; 215 216 else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum; 216 else if (strcmp(name,"DamagePenaltyThreshold")==0) return DamagePenaltyThresholdEnum;217 else if (strcmp(name,"DamagePenaltyLock")==0) return DamagePenaltyLockEnum;218 else if (strcmp(name,"DamagePenaltyFactor")==0) return DamagePenaltyFactorEnum;219 217 else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum; 220 218 else if (strcmp(name,"DamageSpcdamage")==0) return DamageSpcdamageEnum; … … 260 258 else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum; 261 259 else if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum; 260 else if (strcmp(name,"MeshNumberofelements2d")==0) return MeshNumberofelements2dEnum; 261 else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum; 262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"MeshNumberofelements2d")==0) return MeshNumberofelements2dEnum; 266 else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum; 267 else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum; 265 if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum; 268 266 else if (strcmp(name,"MeshNumberofvertices2d")==0) return MeshNumberofvertices2dEnum; 269 267 else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum; … … 383 381 else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum; 384 382 else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum; 383 else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum; 384 else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum; 385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum; 389 else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum; 390 else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum; 388 if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum; 391 389 else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum; 392 390 else if (strcmp(name,"SurfaceforcingsAccumulation")==0) return SurfaceforcingsAccumulationEnum; … … 506 504 else if (strcmp(name,"Matice")==0) return MaticeEnum; 507 505 else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum; 506 else if (strcmp(name,"Matpar")==0) return MatparEnum; 507 else if (strcmp(name,"Node")==0) return NodeEnum; 508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"Matpar")==0) return MatparEnum; 512 else if (strcmp(name,"Node")==0) return NodeEnum; 513 else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum; 511 if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum; 514 512 else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum; 515 513 else if (strcmp(name,"Param")==0) return ParamEnum; … … 629 627 else if (strcmp(name,"StressTensor")==0) return StressTensorEnum; 630 628 else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum; 629 else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum; 630 else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum; 631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum; 635 else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum; 636 else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum; 634 if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum; 637 635 else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum; 638 636 else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum; … … 752 750 else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum; 753 751 else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum; 752 else if (strcmp(name,"Outputdefinition63")==0) return Outputdefinition63Enum; 753 else if (strcmp(name,"Outputdefinition64")==0) return Outputdefinition64Enum; 754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"Outputdefinition63")==0) return Outputdefinition63Enum; 758 else if (strcmp(name,"Outputdefinition64")==0) return Outputdefinition64Enum; 759 else if (strcmp(name,"Outputdefinition65")==0) return Outputdefinition65Enum; 757 if (strcmp(name,"Outputdefinition65")==0) return Outputdefinition65Enum; 760 758 else if (strcmp(name,"Outputdefinition66")==0) return Outputdefinition66Enum; 761 759 else if (strcmp(name,"Outputdefinition67")==0) return Outputdefinition67Enum; … … 875 873 else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum; 876 874 else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum; 875 else if (strcmp(name,"Regular")==0) return RegularEnum; 876 else if (strcmp(name,"Scaled")==0) return ScaledEnum; 877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"Regular")==0) return RegularEnum; 881 else if (strcmp(name,"Scaled")==0) return ScaledEnum; 882 else if (strcmp(name,"Separate")==0) return SeparateEnum; 880 if (strcmp(name,"Separate")==0) return SeparateEnum; 883 881 else if (strcmp(name,"Sset")==0) return SsetEnum; 884 882 else if (strcmp(name,"Verbose")==0) return VerboseEnum; -
issm/trunk-jpl/src/m/classes/damage.m
r19048 r19381 17 17 maxiter = 0; 18 18 elementinterp = ''; 19 penalty_threshold = 0;20 penalty_lock = 0;21 penalty_factor = 0;22 19 23 20 %general parameters for evolution law: 24 21 stress_threshold = 0; 22 kappa = 0; 25 23 c1 = 0; 26 24 c2 = 0; … … 80 78 81 79 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="maxiter" type="', class(self.maxiter),'" default="', num2str(self.maxiter),'">', ' <section name="damage" />',' <help> maximum number of non linear iterations </help>','</parameter>'); 82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_lock" type="', class(self.penalty_lock),'" default="', num2str(self.penalty_lock),'">', ' <section name="damage" />',' <help> stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>','</parameter>');83 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_threshold" type="', class(self.penalty_threshold),'" default="', num2str(self.penalty_threshold),'">', ' <section name="damage" />',' <help> threshold to declare convergence of damage evolution solution (default is 0) </help>','</parameter>');84 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_factor" type="', class(self.penalty_factor),'" default="', num2str(self.penalty_factor),'">', ' <section name="damage" />',' <help> scaling exponent (default is 3) </help>','</parameter>');85 80 86 81 end % }}} … … 125 120 self.elementinterp='P1'; 126 121 127 %factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor128 self.penalty_factor=3;129 130 %stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)131 self.penalty_lock=0;132 133 %threshold to declare convergence of thermal solution (default is 0)134 self.penalty_threshold=0;135 136 122 %damage evolution parameters 137 self.stress_threshold=0; 123 self.stress_threshold=1.3e5; 124 self.kappa=2.8; 138 125 self.healing=0; 139 126 self.c1=0; … … 158 145 md = checkfield(md,'fieldname','damage.maxiter','>=0',0); 159 146 md = checkfield(md,'fieldname','damage.elementinterp','values',{'P1','P2'}); 160 md = checkfield(md,'fieldname','damage.penalty_factor','>=',0); 161 md = checkfield(md,'fieldname','damage.penalty_lock','>=',0); 162 md = checkfield(md,'fieldname','damage.penalty_threshold','>=',0); 147 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0); 148 md = checkfield(md,'fieldname','damage.kappa','>',1); 163 149 md = checkfield(md,'fieldname','damage.healing','>=',0); 164 150 md = checkfield(md,'fieldname','damage.c1','>=',0); … … 166 152 md = checkfield(md,'fieldname','damage.c3','>=',0); 167 153 md = checkfield(md,'fieldname','damage.c4','>=',0); 168 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0);169 154 md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0 1]); 170 155 md = checkfield(md,'fieldname','damage.requested_outputs','stringrow',1); … … 196 181 fielddisplay(self,'maxiter','maximum number of non linear iterations'); 197 182 fielddisplay(self,'elementinterp','interpolation scheme for finite elements {''P1'',''P2''}'); 198 fielddisplay(self,'penalty_lock','stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)'); 199 fielddisplay(self,'penalty_threshold','threshold to declare convergence of damage evolution solution (default is 0)'); 200 fielddisplay(self,'penalty_factor','scaling exponent (default is 3)'); 183 fielddisplay(self,'stress_threshold','stress threshold for damage initiation [Pa]'); 184 fielddisplay(self,'kappa','ductility parameter for stress softening and damage'); 201 185 fielddisplay(self,'c1','damage parameter 1'); 202 186 fielddisplay(self,'c2','damage parameter 2'); … … 204 188 fielddisplay(self,'c4','damage parameter 4'); 205 189 fielddisplay(self,'healing','damage healing parameter'); 206 fielddisplay(self,'stress_threshold','damage stress threshold [Pa]');207 190 fielddisplay(self,'equiv_stress','0: von Mises, 1: max principal'); 208 191 fielddisplay(self,'requested_outputs','additional outputs requested'); … … 222 205 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer'); 223 206 WriteData(fid,'enum',DamageElementinterpEnum(),'data',StringToEnum(self.elementinterp),'format','Integer'); 224 WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer'); 225 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer'); 226 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double'); 207 WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double'); 208 WriteData(fid,'object',self,'fieldname','kappa','format','Double'); 227 209 WriteData(fid,'object',self,'fieldname','c1','format','Double'); 228 210 WriteData(fid,'object',self,'fieldname','c2','format','Double'); 229 211 WriteData(fid,'object',self,'fieldname','c3','format','Double'); 230 212 WriteData(fid,'object',self,'fieldname','c4','format','Double'); 231 WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double');232 213 WriteData(fid,'object',self,'fieldname','healing','format','Double'); 233 214 WriteData(fid,'object',self,'fieldname','equiv_stress','format','Integer'); -
issm/trunk-jpl/src/m/classes/damage.py
r19048 r19381 19 19 #damage: 20 20 self.isdamage = 0. 21 self.D 22 self.law 23 self.spcdamage 24 self.max_damage 21 self.D = float('NaN') 22 self.law = float('NaN') 23 self.spcdamage = float('NaN') 24 self.max_damage = float('NaN') 25 25 26 26 #numerical 27 self.stabilization 28 self.maxiter 27 self.stabilization = float('NaN') 28 self.maxiter = float('NaN') 29 29 self.elementinterp = '' 30 self.penalty_threshold = float('NaN')31 self.penalty_lock = float('NaN')32 self.penalty_factor = float('NaN')33 30 34 31 #general parameters for evolution law: 35 32 self.stress_threshold = float('NaN') 33 self.kappa = float('NaN') 36 34 self.c1 = float('NaN') 37 35 self.c2 = float('NaN') 38 36 self.c3 = float('NaN') 39 37 self.c4 = float('NaN') 40 self.healing 38 self.healing = float('NaN') 41 39 self.equiv_stress = float('NaN') 42 40 self.requested_outputs = [] … … 61 59 s+="%s\n" % fielddisplay(self,"maxiter","maximum number of non linear iterations") 62 60 s+="%s\n" % fielddisplay(self,"elementinterp","interpolation scheme for finite elements [''P1'',''P2'']") 63 s+="%s\n" % fielddisplay(self,"penalty_lock","stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)") 64 s+="%s\n" % fielddisplay(self,"penalty_threshold","threshold to declare convergence of damage evolution solution (default is 0)") 65 s+="%s\n" % fielddisplay(self,"penalty_factor","scaling exponent (default is 3)") 61 s+="%s\n" % fielddisplay(self,"stress_threshold","stress threshold for damage initiation [Pa]") 62 s+="%s\n" % fielddisplay(self,"kappa","ductility parameter for stress softening and damage [>1]") 66 63 s+="%s\n" % fielddisplay(self,"c1","damage parameter 1 ") 67 64 s+="%s\n" % fielddisplay(self,"c2","damage parameter 2 ") 68 65 s+="%s\n" % fielddisplay(self,"c3","damage parameter 3 ") 69 66 s+="%s\n" % fielddisplay(self,"c4","damage parameter 4 ") 70 s+="%s\n" % fielddisplay(self,"stress_threshold","damage stress threshold [Pa]")71 67 s+="%s\n" % fielddisplay(self,"healing","damage healing parameter") 72 68 s+="%s\n" % fielddisplay(self,"equiv_stress","0: von Mises, 1: max principal") … … 98 94 self.elementinterp='P1' 99 95 100 #factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor101 self.penalty_factor=3102 103 #stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)104 self.penalty_lock=0105 106 #threshold to declare convergence of thermal solution (default is 0)107 self.penalty_threshold=0108 109 96 #damage evolution parameters 110 self.stress_threshold=0 97 self.stress_threshold=1.3e5 98 self.kappa=2.8 111 99 self.c1=0 112 100 self.c2=0 … … 141 129 md = checkfield(md,'fieldname','damage.maxiter','>=0',0) 142 130 md = checkfield(md,'fieldname','damage.elementinterp','values',['P1','P2']) 143 md = checkfield(md,'fieldname','damage.penalty_factor','>=0',0) 144 md = checkfield(md,'fieldname','damage.penalty_lock','>=0',0) 145 md = checkfield(md,'fieldname','damage.penalty_threshold','>=0',0) 131 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0) 132 md = checkfield(md,'fieldname','damage.kappa','>',1) 146 133 md = checkfield(md,'fieldname','damage.healing','>=',0) 147 134 md = checkfield(md,'fieldname','damage.c1','>=',0) … … 149 136 md = checkfield(md,'fieldname','damage.c3','>=',0) 150 137 md = checkfield(md,'fieldname','damage.c4','>=',0) 151 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0)152 138 md = checkfield(md,'fieldname','damage.healing','>=',0) 153 139 md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0,1]) … … 170 156 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer') 171 157 WriteData(fid,'enum',DamageElementinterpEnum(),'data',StringToEnum(self.elementinterp)[0],'format','Integer') 172 WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer') 173 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer') 174 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double') 158 WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double') 159 WriteData(fid,'object',self,'fieldname','kappa','format','Double') 175 160 WriteData(fid,'object',self,'fieldname','c1','format','Double') 176 161 WriteData(fid,'object',self,'fieldname','c2','format','Double') 177 162 WriteData(fid,'object',self,'fieldname','c3','format','Double') 178 163 WriteData(fid,'object',self,'fieldname','c4','format','Double') 179 WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double')180 164 WriteData(fid,'object',self,'fieldname','healing','format','Double') 181 165 WriteData(fid,'object',self,'fieldname','equiv_stress','format','Integer') -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r19373 r19381 202 202 def DamageHealingEnum(): return StringToEnum("DamageHealing")[0] 203 203 def DamageStressThresholdEnum(): return StringToEnum("DamageStressThreshold")[0] 204 def DamageKappaEnum(): return StringToEnum("DamageKappa")[0] 204 205 def DamageStabilizationEnum(): return StringToEnum("DamageStabilization")[0] 205 def DamagePenaltyThresholdEnum(): return StringToEnum("DamagePenaltyThreshold")[0]206 def DamagePenaltyLockEnum(): return StringToEnum("DamagePenaltyLock")[0]207 def DamagePenaltyFactorEnum(): return StringToEnum("DamagePenaltyFactor")[0]208 206 def DamageMaxiterEnum(): return StringToEnum("DamageMaxiter")[0] 209 207 def DamageSpcdamageEnum(): return StringToEnum("DamageSpcdamage")[0]
Note:
See TracChangeset
for help on using the changeset viewer.