Changeset 17757
- Timestamp:
- 04/17/14 13:15:15 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 2 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r17700 r17757 131 131 bool dakota_analysis; 132 132 bool islevelset; 133 bool isdamage; 133 134 134 135 /*Fetch constants needed: */ … … 154 155 else 155 156 iscoupling = false; 157 158 /*is damage mechanics being used?*/ 159 if(materials_type==MaticeEnum) isdamage = false; 160 else if(materials_type==MatdamageiceEnum) isdamage = true; 161 else _error_("Material type not recognized"); 156 162 157 163 /*Get finite element type*/ … … 212 218 iomodel->FetchDataToInput(elements,LoadingforceXEnum); 213 219 iomodel->FetchDataToInput(elements,LoadingforceYEnum); 214 i omodel->FetchDataToInput(elements,DamageDEnum);220 if(isdamage)iomodel->FetchDataToInput(elements,DamageDEnum); 215 221 216 222 if(iomodel->domaintype==Domain3DEnum){ -
issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
r17619 r17757 48 48 this->element=NULL; 49 49 50 /*Other perporties*/ 51 int materialtype; 52 iomodel->Constant(&materialtype,MaterialsEnum); 53 if(materialtype==MatdamageiceEnum) this->isdamage = true; 54 else if(materialtype==MaticeEnum) this->isdamage = false; 55 else _error_("Material type not recognized"); 56 50 57 return; 51 58 … … 199 206 IssmDouble Matice::GetD(){ 200 207 208 _assert_(this->isdamage); 201 209 /*Output*/ 202 210 IssmDouble D; 203 204 211 element->inputs->GetInputAverage(&D,DamageDEnum); 205 212 return D; … … 209 216 IssmDouble Matice::GetDbar(){ 210 217 218 _assert_(this->isdamage); 211 219 /*Output*/ 212 220 IssmDouble Dbar; … … 233 241 234 242 /*Intermediary: */ 235 IssmDouble B,D ,n;243 IssmDouble B,D=0.,n; 236 244 237 245 /*Get B and n*/ 238 246 B=GetB(); _assert_(B>0.); 239 247 n=GetN(); _assert_(n>0.); 240 D=GetD(); _assert_(D>=0. && D<1.); 248 if(this->isdamage){ 249 D=GetD(); 250 _assert_(D>=0. && D<1.); 251 } 241 252 242 253 if (n==1.){ … … 283 294 284 295 /*Intermediary: */ 285 IssmDouble B,D ,n;296 IssmDouble B,D=0.,n; 286 297 287 298 /*Get B and n*/ 288 299 B=GetBbar(); _assert_(B>0.); 289 300 n=GetN(); _assert_(n>0.); 290 D=GetDbar(); _assert_(D>=0. && D<1.); 301 if(this->isdamage){ 302 D=GetDbar(); 303 _assert_(D>=0. && D<1.); 304 } 291 305 292 306 if (n==1.){ … … 334 348 /*Intermediary value A and exponent e: */ 335 349 IssmDouble A,e; 336 IssmDouble D ,n;350 IssmDouble D=0.,n; 337 351 338 352 /*Get D and n*/ 339 D=GetDbar(); 353 if(this->isdamage){ 354 D=GetDbar(); /* GetD()? */ 355 _assert_(D>=0. && D<1.); 356 } 340 357 n=GetN(); 341 358 -
issm/trunk-jpl/src/c/classes/Materials/Matice.h
r17281 r17757 24 24 private: 25 25 int mid; 26 bool isdamage; 26 27 Hook *helement; 27 28 Element *element; -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
r17692 r17757 52 52 iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum); 53 53 iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum); 54 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); 55 switch(iomodel->domaindim){ 56 case 2: 57 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 58 if(dakota_analysis) elements->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 59 break; 60 case 3: 61 if(dakota_analysis) elements->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 62 break; 63 default: 64 _error_("Mesh not supported yet"); 65 } 66 break; 67 case MatdamageiceEnum: 68 iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum); 69 iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum); 54 70 iomodel->FetchDataToInput(elements,DamageDEnum); 55 71 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r17734 r17757 19 19 20 20 int i,j,m,k; 21 int numoutputs,domaintype, smb_model;21 int numoutputs,domaintype,materialtype,smb_model; 22 22 char** requestedoutputs = NULL; 23 23 IssmDouble time; … … 149 149 iomodel->DeleteData(&requestedoutputs,numoutputs,SteadystateRequestedOutputsEnum); 150 150 151 iomodel->FetchData(&requestedoutputs,&numoutputs,DamageEvolutionRequestedOutputsEnum); 152 parameters->AddObject(new IntParam(DamageEvolutionNumRequestedOutputsEnum,numoutputs)); 153 if(numoutputs)parameters->AddObject(new StringArrayParam(DamageEvolutionRequestedOutputsEnum,requestedoutputs,numoutputs)); 154 iomodel->DeleteData(&requestedoutputs,numoutputs,DamageEvolutionRequestedOutputsEnum); 151 iomodel->Constant(&materialtype,MaterialsEnum); 152 if(materialtype==MatdamageiceEnum){ 153 iomodel->FetchData(&requestedoutputs,&numoutputs,DamageEvolutionRequestedOutputsEnum); 154 parameters->AddObject(new IntParam(DamageEvolutionNumRequestedOutputsEnum,numoutputs)); 155 if(numoutputs)parameters->AddObject(new StringArrayParam(DamageEvolutionRequestedOutputsEnum,requestedoutputs,numoutputs)); 156 iomodel->DeleteData(&requestedoutputs,numoutputs,DamageEvolutionRequestedOutputsEnum); 157 } 155 158 156 159 /*Deal with mass flux segments: {{{*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
r17737 r17757 82 82 if(solution_enum==TransientSolutionEnum && analysis_enum==HydrologyDCEfficientAnalysisEnum && ishydrology==false) continue; 83 83 if(solution_enum==TransientSolutionEnum && analysis_enum==HydrologyDCInefficientAnalysisEnum && ishydrology==false) continue; 84 if(solution_enum==TransientSolutionEnum && analysis_enum==DamageEvolutionAnalysisEnum && isdamage==false) continue; 84 85 85 86 if(VerboseMProcessor()) _printf0_(" creating datasets for analysis " << EnumToStringx(analysis_enum) << "\n"); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r17742 r17757 173 173 DamageC3Enum, 174 174 DamageC4Enum, 175 DamageElementinterpEnum, 175 176 DamageHealingEnum, 176 177 DamageStressThresholdEnum, … … 416 417 TransientParamEnum, 417 418 MaticeEnum, 419 MatdamageiceEnum, 418 420 MatparEnum, 419 421 NodeEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r17742 r17757 181 181 case DamageC3Enum : return "DamageC3"; 182 182 case DamageC4Enum : return "DamageC4"; 183 case DamageElementinterpEnum : return "DamageElementinterp"; 183 184 case DamageHealingEnum : return "DamageHealing"; 184 185 case DamageStressThresholdEnum : return "DamageStressThreshold"; … … 411 412 case TransientParamEnum : return "TransientParam"; 412 413 case MaticeEnum : return "Matice"; 414 case MatdamageiceEnum : return "Matdamageice"; 413 415 case MatparEnum : return "Matpar"; 414 416 case NodeEnum : return "Node"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r17742 r17757 184 184 else if (strcmp(name,"DamageC3")==0) return DamageC3Enum; 185 185 else if (strcmp(name,"DamageC4")==0) return DamageC4Enum; 186 else if (strcmp(name,"DamageElementinterp")==0) return DamageElementinterpEnum; 186 187 else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum; 187 188 else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum; … … 259 260 else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum; 260 261 else if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum; 261 else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum; 265 if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum; 266 else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum; 266 267 else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum; 267 268 else if (strcmp(name,"MaxIterationConvergenceFlag")==0) return MaxIterationConvergenceFlagEnum; … … 382 383 else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum; 383 384 else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum; 384 else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"FSpressure")==0) return FSpressureEnum; 388 if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum; 389 else if (strcmp(name,"FSpressure")==0) return FSpressureEnum; 389 390 else if (strcmp(name,"Constraints")==0) return ConstraintsEnum; 390 391 else if (strcmp(name,"Loads")==0) return LoadsEnum; … … 420 421 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum; 421 422 else if (strcmp(name,"Matice")==0) return MaticeEnum; 423 else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum; 422 424 else if (strcmp(name,"Matpar")==0) return MatparEnum; 423 425 else if (strcmp(name,"Node")==0) return NodeEnum; … … 504 506 else if (strcmp(name,"Vel")==0) return VelEnum; 505 507 else if (strcmp(name,"Velocity")==0) return VelocityEnum; 506 else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;507 else if (strcmp(name,"Vx")==0) return VxEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"VxPicard")==0) return VxPicardEnum; 511 if (strcmp(name,"VxAverage")==0) return VxAverageEnum; 512 else if (strcmp(name,"Vx")==0) return VxEnum; 513 else if (strcmp(name,"VxPicard")==0) return VxPicardEnum; 512 514 else if (strcmp(name,"VyAverage")==0) return VyAverageEnum; 513 515 else if (strcmp(name,"Vy")==0) return VyEnum; … … 627 629 else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum; 628 630 else if (strcmp(name,"Contact")==0) return ContactEnum; 629 else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;630 else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"GaussSeg")==0) return GaussSegEnum; 634 if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum; 635 else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum; 636 else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum; 635 637 else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum; 636 638 else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum; -
issm/trunk-jpl/src/m/classes/damage.m
r17745 r17757 14 14 %numerical 15 15 stabilization = NaN; 16 maxiter = NaN; 17 elementinterp = ''; 16 18 penalty_threshold = NaN; 17 maxiter = NaN;18 19 penalty_lock = NaN; 19 20 penalty_factor = NaN; … … 110 111 obj.maxiter=100; 111 112 113 %finite element interpolation 114 obj.elementinterp='P1'; 115 112 116 %factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor 113 117 obj.penalty_factor=3; … … 134 138 function md = checkconsistency(obj,md,solution,analyses) % {{{ 135 139 136 md = checkfield(md,'fieldname','damage.D','>=',0,'<=',obj.max_damage,'size',[md.mesh.numberofvertices 1]);137 md = checkfield(md,'fieldname','damage.max_damage','<',1,'>=',0);138 140 md = checkfield(md,'fieldname','damage.law','values',{'undamaged','pralong'}); 139 md = checkfield(md,'fieldname','damage.spcdamage','forcing',1); 140 141 md = checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0 1 2]); 142 md = checkfield(md,'fieldname','damage.maxiter','>=0',0); 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); 141 if ~strcmpi(obj.law,'undamaged'), 142 md = checkfield(md,'fieldname','damage.D','>=',0,'<=',obj.max_damage,'size',[md.mesh.numberofvertices 1]); 143 md = checkfield(md,'fieldname','damage.max_damage','<',1,'>=',0); 144 md = checkfield(md,'fieldname','damage.spcdamage','forcing',1); 145 146 md = checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0 1 2]); 147 md = checkfield(md,'fieldname','damage.maxiter','>=0',0); 148 md = checkfield(md,'fieldname','damage.elementinterp','values',{'P1','P2'}); 149 md = checkfield(md,'fieldname','damage.penalty_factor','>=0',0); 150 md = checkfield(md,'fieldname','damage.penalty_lock','>=0',0); 151 md = checkfield(md,'fieldname','damage.penalty_threshold','>=0',0); 152 end 146 153 147 154 if strcmpi(obj.law,'pralong'), … … 169 176 else 170 177 list = {'DamageD'}; 171 178 end 172 179 end % }}} 173 180 function disp(obj) % {{{ 174 181 disp(sprintf(' Damage:\n')); 175 182 176 fielddisplay(obj,'D','damage tensor (scalar)');177 183 fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}'); 178 fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint)'); 179 fielddisplay(obj,'max_damage','maximum possible damage (0<=max_damage<1)'); 180 181 fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG'); 182 fielddisplay(obj,'maxiter','maximum number of non linear iterations'); 183 fielddisplay(obj,'penalty_lock','stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)'); 184 fielddisplay(obj,'penalty_threshold','threshold to declare convergence of damage evolution solution (default is 0)'); 185 fielddisplay(obj,'penalty_factor','scaling exponent (default is 3)'); 184 if ~strcmpi(obj.law,'undamaged'), 185 fielddisplay(obj,'D','damage tensor (scalar)'); 186 fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint)'); 187 fielddisplay(obj,'max_damage','maximum possible damage (0<=max_damage<1)'); 188 189 fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG'); 190 fielddisplay(obj,'maxiter','maximum number of non linear iterations'); 191 fielddisplay(obj,'elementinterp','interpolation scheme for finite elements {''P1'',''P2''}'); 192 fielddisplay(obj,'penalty_lock','stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)'); 193 fielddisplay(obj,'penalty_threshold','threshold to declare convergence of damage evolution solution (default is 0)'); 194 fielddisplay(obj,'penalty_factor','scaling exponent (default is 3)'); 195 end 186 196 187 197 if strcmpi(obj.law,'pralong'), … … 199 209 function marshall(obj,md,fid) % {{{ 200 210 201 WriteData(fid,'object',obj,'fieldname','D','format','DoubleMat','mattype',1);202 211 WriteData(fid,'object',obj,'fieldname','law','format','String'); 203 WriteData(fid,'object',obj,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1); 204 WriteData(fid,'object',obj,'fieldname','max_damage','format','Double'); 205 206 WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer'); 207 WriteData(fid,'object',obj,'fieldname','penalty_threshold','format','Integer'); 208 WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer'); 209 WriteData(fid,'object',obj,'fieldname','penalty_lock','format','Integer'); 210 WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double'); 212 if ~strcmpi(obj.law,'undamaged'), 213 WriteData(fid,'object',obj,'fieldname','D','format','DoubleMat','mattype',1); 214 WriteData(fid,'object',obj,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1); 215 WriteData(fid,'object',obj,'fieldname','max_damage','format','Double'); 216 217 WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer'); 218 WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer'); 219 WriteData(fid,'object',obj,'fieldname','elementinterp','format','String'); 220 WriteData(fid,'object',obj,'fieldname','penalty_threshold','format','Integer'); 221 WriteData(fid,'object',obj,'fieldname','penalty_lock','format','Integer'); 222 WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double'); 223 end 211 224 212 225 if strcmpi(obj.law,'pralong'), … … 227 240 outputs = [outputs defaultoutputs(obj,md)]; %add defaults 228 241 end 229 WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum,'format','StringArray'); 242 if ~strcmpi(obj.law,'undamaged'), 243 WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum,'format','StringArray'); 244 end 230 245 231 246 end % }}} -
issm/trunk-jpl/src/m/classes/model.m
r17754 r17757 30 30 31 31 balancethickness = 0; 32 stressbalance 32 stressbalance = 0; 33 33 groundingline = 0; 34 34 hydrology = 0; 35 masstransport 35 masstransport = 0; 36 36 thermal = 0; 37 37 steadystate = 0; -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r17742 r17757 173 173 def DamageC3Enum(): return StringToEnum("DamageC3")[0] 174 174 def DamageC4Enum(): return StringToEnum("DamageC4")[0] 175 def DamageElementinterpEnum(): return StringToEnum("DamageElementinterp")[0] 175 176 def DamageHealingEnum(): return StringToEnum("DamageHealing")[0] 176 177 def DamageStressThresholdEnum(): return StringToEnum("DamageStressThreshold")[0] … … 403 404 def TransientParamEnum(): return StringToEnum("TransientParam")[0] 404 405 def MaticeEnum(): return StringToEnum("Matice")[0] 406 def MatdamageiceEnum(): return StringToEnum("Matdamageice")[0] 405 407 def MatparEnum(): return StringToEnum("Matpar")[0] 406 408 def NodeEnum(): return StringToEnum("Node")[0] -
issm/trunk-jpl/src/m/mech/mechanicalproperties.m
r17686 r17757 116 116 stress.principalvalue2=valuesstress(:,2); 117 117 stress.principalaxis2=directionsstress(:,3:4); 118 stress.effectivevalue=1/sqrt(2)*sqrt(stress.xx.^2+stress.yy.^2+2*stress.xy.^2); % effective shear stress 118 stress.effectivevalue=1/sqrt(2)*sqrt(stress.xx.^2+stress.yy.^2+2*stress.xy.^2); % effective shear stress (sqrt(J2)) 119 119 md.results.stress=stress; 120 120
Note:
See TracChangeset
for help on using the changeset viewer.