Changeset 17367
- Timestamp:
- 02/28/14 12:03:48 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
r17275 r17367 31 31 parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum)); 32 32 parameters->AddObject(iomodel->CopyConstantObject(DamageHealingEnum)); 33 parameters->AddObject(iomodel->CopyConstantObject(DamageEquivStressEnum)); 33 34 } 34 35 xDelete<char>(law); … … 395 396 IssmDouble c1,c2,c3,healing,stress_threshold; 396 397 IssmDouble s_xx,s_xy,s_yy; 397 IssmDouble J2s, Xis,Psi,PosPsi,NegPsi;398 IssmDouble J2s,Chi,Psi,PosPsi,NegPsi; 398 399 IssmDouble damage,sigma_xx,sigma_xy,sigma_yy; 400 int equivstress; 399 401 400 402 /*Fetch number of vertices and allocate output*/ … … 418 420 Input* damage_input = element->GetInput(DamageDbarEnum); _assert_(damage_input); 419 421 420 /*Damage evolution z mapping: */ 422 /*retrieve the desired type of equivalent stress*/ 423 element->FindParam(&equivstress,DamageEquivStressEnum); 424 425 /*Calculate damage evolution source term: */ 421 426 Gauss* gauss=element->NewGauss(); 422 427 for (int iv=0;iv<numvertices;iv++){ … … 432 437 s_yy=sigma_yy/(1.-damage); 433 438 434 J2s=1./sqrt(2.)*sqrt(s_xx*s_xx + s_yy*s_yy + s_xy*s_xy); 435 Xis=sqrt(3.0)*J2s; 436 Psi=Xis-stress_threshold; 439 if(equivstress==1){ /* von Mises */ 440 J2s=1./sqrt(2.)*sqrt(s_xx*s_xx + s_yy*s_yy + s_xy*s_xy); 441 Chi=sqrt(3.0)*J2s; 442 } 443 Psi=Chi-stress_threshold; 437 444 PosPsi=max(Psi,0.); 438 445 NegPsi=max(-Psi,0.); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r17364 r17367 179 179 DamageSpcdamageEnum, 180 180 DamageMaxDamageEnum, 181 DamageEquivStressEnum, 181 182 MaterialsRhoIceEnum, 182 183 MaterialsRhoWaterEnum, … … 671 672 OptionStructEnum, 672 673 /*}}}*/ 673 /*Rheology law (move to oMaterial) {{{*/674 /*Rheology law (move to Material) {{{*/ 674 675 PatersonEnum, 675 676 ArrheniusEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r17364 r17367 187 187 case DamageSpcdamageEnum : return "DamageSpcdamage"; 188 188 case DamageMaxDamageEnum : return "DamageMaxDamage"; 189 case DamageEquivStressEnum : return "DamageEquivStress"; 189 190 case MaterialsRhoIceEnum : return "MaterialsRhoIce"; 190 191 case MaterialsRhoWaterEnum : return "MaterialsRhoWater"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r17364 r17367 190 190 else if (strcmp(name,"DamageSpcdamage")==0) return DamageSpcdamageEnum; 191 191 else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum; 192 else if (strcmp(name,"DamageEquivStress")==0) return DamageEquivStressEnum; 192 193 else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum; 193 194 else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum; … … 259 260 else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum; 260 261 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 261 else if (strcmp(name,"Surface")==0) return SurfaceEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum; 265 if (strcmp(name,"Surface")==0) return SurfaceEnum; 266 else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum; 266 267 else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; 267 268 else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum; … … 382 383 else if (strcmp(name,"Vertices")==0) return VerticesEnum; 383 384 else if (strcmp(name,"Results")==0) return ResultsEnum; 384 else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum; 388 if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 389 else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum; 389 390 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 390 391 else if (strcmp(name,"BoolParam")==0) return BoolParamEnum; … … 505 506 else if (strcmp(name,"VyMesh")==0) return VyMeshEnum; 506 507 else if (strcmp(name,"VzMesh")==0) return VzMeshEnum; 507 else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum; 511 if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum; 512 else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum; 512 513 else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum; 513 514 else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum; … … 628 629 else if (strcmp(name,"Separate")==0) return SeparateEnum; 629 630 else if (strcmp(name,"Sset")==0) return SsetEnum; 630 else if (strcmp(name,"Verbose")==0) return VerboseEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum; 634 if (strcmp(name,"Verbose")==0) return VerboseEnum; 635 else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum; 635 636 else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum; 636 637 else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum; -
issm/trunk-jpl/src/m/classes/damage.m
r16764 r17367 26 26 c4 = NaN; 27 27 healing = NaN; 28 equiv_stress = NaN; 28 29 end 29 30 methods … … 76 77 obj.c3=0; 77 78 obj.c4=0; 79 obj.equiv_stress=0; 78 80 79 81 end % }}} … … 98 100 md = checkfield(md,'fieldname','damage.c4','>=',0); 99 101 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0); 102 md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0]); 100 103 elseif strcmpi(obj.law,'undamaged'), 101 104 if (solution==DamageEvolutionSolutionEnum), … … 128 131 fielddisplay(obj,'healing','damage healing parameter 1'); 129 132 fielddisplay(obj,'stress_threshold','damage stress threshold [Pa]'); 133 fielddisplay(obj,'equiv_stress','0: von Mises'); 130 134 end 131 135 … … 151 155 WriteData(fid,'object',obj,'fieldname','stress_threshold','format','Double'); 152 156 WriteData(fid,'object',obj,'fieldname','healing','format','Double'); 157 WriteData(fid,'object',obj,'fieldname','equiv_stress','format','Integer'); 153 158 end 154 159 -
issm/trunk-jpl/src/m/classes/damage.py
r16764 r17367 35 35 self.c4 = float('NaN') 36 36 self.healing = float('NaN') 37 self.equiv_stress = float('NaN') 37 38 38 39 if not len(args): … … 62 63 s+="%s\n" % fielddisplay(self,"c4","damage parameter 4 ") 63 64 s+="%s\n" % fielddisplay(self,"stress_threshold","damage stress threshold [Pa]") 65 s+="%s\n" % fielddisplay(self,"equiv_stresss","0: von Mises") 64 66 65 67 return s … … 95 97 self.c4=0 96 98 self.healing=0 99 self.equiv_stress=0 97 100 98 101 # }}} … … 104 107 md = checkfield(md,'fieldname','damage.spcdamage','forcing',1) 105 108 106 md = checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0,1,2]) ;109 md = checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0,1,2]) 107 110 md = checkfield(md,'fieldname','damage.maxiter','>=0',0); 108 111 md = checkfield(md,'fieldname','damage.penalty_factor','>=0',0); … … 111 114 112 115 if self.law == 'pralong': 113 md = checkfield(md,'fieldname','damage.healing','>=',0) ;116 md = checkfield(md,'fieldname','damage.healing','>=',0) 114 117 md = checkfield(md,'fieldname','damage.c1','>=',0) 115 118 md = checkfield(md,'fieldname','damage.c2','>=',0) … … 117 120 md = checkfield(md,'fieldname','damage.c4','>=',0) 118 121 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0) 122 md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0]) 119 123 elif strcmpi(self.law,'undamaged'): 120 124 if (solution==DamageEvolutionSolutionEnum): … … 142 146 WriteData(fid,'object',self,'fieldname','c4','format','Double') 143 147 WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double') 148 WriteData(fid,'object',self,'fieldname','equiv_stress','format','Integer') 144 149 # }}} -
issm/trunk-jpl/src/m/classes/model.m
r17079 r17367 1107 1107 disp(sprintf('%19s: %-22s -- %s','basalforcings' ,['[1x1 ' class(obj.basalforcings) ']'],'bed forcings')); 1108 1108 disp(sprintf('%19s: %-22s -- %s','materials' ,['[1x1 ' class(obj.materials) ']'],'material properties')); 1109 disp(sprintf('%19s: %-22s -- %s','damage' ,['[1x1 ' class(obj.damage) ']'],' damage propagation laws'));1109 disp(sprintf('%19s: %-22s -- %s','damage' ,['[1x1 ' class(obj.damage) ']'],'parameters for damage evolution solution')); 1110 1110 disp(sprintf('%19s: %-22s -- %s','friction' ,['[1x1 ' class(obj.friction) ']'],'basal friction/drag properties')); 1111 1111 disp(sprintf('%19s: %-22s -- %s','flowequation' ,['[1x1 ' class(obj.flowequation) ']'],'flow equations')); -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r17364 r17367 179 179 def DamageSpcdamageEnum(): return StringToEnum("DamageSpcdamage")[0] 180 180 def DamageMaxDamageEnum(): return StringToEnum("DamageMaxDamage")[0] 181 def DamageEquivStressEnum(): return StringToEnum("DamageEquivStress")[0] 181 182 def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0] 182 183 def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0] -
issm/trunk-jpl/src/m/mech/mechanicalproperties.m
r15567 r17367 15 15 %some checks 16 16 if length(vx)~=md.mesh.numberofvertices | length(vy)~=md.mesh.numberofvertices, 17 error(['the input velocity should be of size ' num2str(md.mesh.numberofvertices) '!'])17 %error(['the input velocity should be of size ' num2str(md.mesh.numberofvertices) '!']) 18 18 end 19 19 if ~(md.mesh.dimension==2) … … 139 139 deviatoricstress.effectivevalue=1/sqrt(2)*sqrt(stress.xx.^2+stress.yy.^2+2*stress.xy.^2); 140 140 md.results.deviatoricstress=deviatoricstress; 141 142 viscosity=struct('nu',[]); 143 viscosity.nu=nu; 144 md.results.viscosity=viscosity; -
issm/trunk-jpl/src/m/mech/steadystateiceshelftemp.m
r15832 r17367 46 46 47 47 %calculate depth-averaged temperature (in Celsius) 48 %temperature(pos)=-( (Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos) - (Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos)).*exp(Hi(pos).*wi(pos)/ki) )./( Hi(pos).*(exp(Hi(pos).*wi(pos)/ki)-1));49 temperature(pos)=-( ((Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos))./exp(Hi(pos).*wi(pos)/ki) - Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos))./( Hi(pos).*(1-exp(-Hi(pos).*wi(pos)/ki)));48 temperature(pos)=-( (Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos) - (Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos)).*exp(Hi(pos).*wi(pos)/ki) )./( Hi(pos).*(exp(Hi(pos).*wi(pos)/ki)-1)); 49 %temperature(pos)=-( ((Tb(pos)-Ts(pos))*ki./wi(pos) + Hi(pos).*Tb(pos))./exp(Hi(pos).*wi(pos)/ki) - Hi(pos).*Ts(pos) + (Tb(pos)-Ts(pos))*ki./wi(pos))./( Hi(pos).*(1-exp(-Hi(pos).*wi(pos)/ki))); 50 50 51 51 %temperature should not be less than surface temp -
issm/trunk-jpl/src/m/mech/thomasparams.m
r16416 r17367 1 function [alpha,beta,theta,ex ]=thomasparams(md,varargin)1 function [alpha,beta,theta,ex,sigxx]=thomasparams(md,varargin) 2 2 %THOMASPARAMS - compute Thomas' geometric parameters for an ice shelf 3 3 % … … 35 35 % the equivalent stress 36 36 % 37 % 'exx' is the longitudinal strain rate along a coordinate system defined 38 % by 'coordsys' 37 % 'exx' is the strain rate along a coordinate system defined by 'coordsys' 39 38 % 40 % Usage: [alpha,beta,theta,exx]=ThomasParams(md,options)39 % 'sigxx' is the deviatoric stress along a coordinate system defined by 'coordsys' 41 40 % 42 % Example: [alpha,beta,theta,exx]=ThomasParams(md,'eq','Thomas','smoothing',2,'coordsys','longitudinal') 41 % Usage: [alpha,beta,theta,exx,sigxx]=ThomasParams(md,options) 42 % 43 % Example: [alpha,beta,theta,exx,sigxx]=ThomasParams(md,'eq','Thomas','smoothing',2,'coordsys','longitudinal') 43 44 44 45 %some checks … … 82 83 end 83 84 85 % rheology 86 n=averaging(md,md.materials.rheology_n,0); 87 B=md.materials.rheology_B; 88 84 89 switch coordsys 85 90 case 'principal' … … 98 103 id=find(e1<0 & e2<0); 99 104 a(id)=-a(id); % where both strain rates are compressive, enforce negative alpha 105 sigxx=(abs(ex)./((1+a+a.^2).^((n-1)/2))).^(1./n).*B; 100 106 %mask=ismember(1:md.mesh.numberofvertices,id); 101 107 %plotmodel(md,'data',ex,'mask',mask) … … 114 120 a=ey./ex; 115 121 b=exy./ex; 116 pos=find(ex<0 & ey<0); 117 %length(pos) 118 a(pos)=-a(pos); 122 %pos=find(ex<0 & ey<0); 123 %a(pos)=-a(pos); 124 %sigxx=(abs(ex)./((1+a+a.^2+b.^2).^((n-1)/2))).^(1./n).*B; 125 sigxx=abs(ex).^(1./n-1).*ex./((1+a+a.^2+b.^2).^((n-1)./(2*n))).*B; 119 126 otherwise 120 127 error('argument passed to "coordsys" not valid'); … … 128 135 end 129 136 a(pos)=-2+1e-3; 130 131 % rheology132 n=averaging(md,md.materials.rheology_n,0);133 137 134 138 switch eq -
issm/trunk-jpl/src/m/plot/colormaps/getcolormap.m
r14513 r17367 41 41 elseif strcmpi(map,'Rignot'), 42 42 alpha=getfieldvalue(options,'alpha',1); 43 map = hsv ;43 map = hsv(128); 44 44 map = rgb2hsv(map); 45 45 map(:,2) = max(min( (0.1+map(:,1)).^(1/alpha) ,1),0);
Note:
See TracChangeset
for help on using the changeset viewer.