Changeset 17369
- Timestamp:
- 02/28/14 14:31:38 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
r17367 r17369 11 11 void DamageEvolutionAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 12 12 13 /*Intermediaries*/ 14 int numoutputs; 15 char** requestedoutputs = NULL; 16 13 17 /*retrieve some parameters: */ 14 18 parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum)); 15 19 parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum)); 16 17 20 parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyThresholdEnum)); 18 21 parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyLockEnum)); … … 20 23 parameters->AddObject(iomodel->CopyConstantObject(DamageMaxiterEnum)); 21 24 parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum)); 25 26 /*Requested outputs*/ 27 iomodel->FetchData(&requestedoutputs,&numoutputs,DamageEvolutionRequestedOutputsEnum); 28 parameters->AddObject(new IntParam(DamageEvolutionNumRequestedOutputsEnum,numoutputs)); 29 if(numoutputs)parameters->AddObject(new StringArrayParam(DamageEvolutionRequestedOutputsEnum,requestedoutputs,numoutputs)); 30 iomodel->DeleteData(&requestedoutputs,numoutputs,DamageEvolutionRequestedOutputsEnum); 22 31 23 32 /*Retrieve law dependent parameters: */ -
issm/trunk-jpl/src/c/cores/damage_core.cpp
r16518 r17369 14 14 /*intermediary*/ 15 15 bool save_results; 16 bool dakota_analysis = false;16 bool dakota_analysis = false; 17 17 int solution_type; 18 int numoutputs = 0; 19 char **requested_outputs = NULL; 18 20 19 21 if(VerboseSolution()) _printf0_(" computing damage\n"); … … 23 25 femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum); 24 26 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 27 femmodel->parameters->FindParam(&numoutputs,DamageEvolutionNumRequestedOutputsEnum); 28 if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,DamageEvolutionRequestedOutputsEnum); 25 29 26 30 if(dakota_analysis && solution_type!=TransientSolutionEnum){ … … 34 38 if(save_results){ 35 39 if(VerboseSolution()) _printf0_(" saving results\n"); 36 int outputs = DamageDEnum; 37 femmodel->RequestedOutputsx(&femmodel->results,&outputs,1); 40 femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs); 41 } 42 43 /*Free resources:*/ 44 if(numoutputs){ 45 for(int i=0;i<numoutputs;i++){ 46 xDelete<char>(requested_outputs[i]); 47 } 48 xDelete<char*>(requested_outputs); 38 49 } 39 50 } -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r17367 r17369 180 180 DamageMaxDamageEnum, 181 181 DamageEquivStressEnum, 182 DamageEvolutionNumRequestedOutputsEnum, 183 DamageEvolutionRequestedOutputsEnum, 182 184 MaterialsRhoIceEnum, 183 185 MaterialsRhoWaterEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r17367 r17369 188 188 case DamageMaxDamageEnum : return "DamageMaxDamage"; 189 189 case DamageEquivStressEnum : return "DamageEquivStress"; 190 case DamageEvolutionNumRequestedOutputsEnum : return "DamageEvolutionNumRequestedOutputs"; 191 case DamageEvolutionRequestedOutputsEnum : return "DamageEvolutionRequestedOutputs"; 190 192 case MaterialsRhoIceEnum : return "MaterialsRhoIce"; 191 193 case MaterialsRhoWaterEnum : return "MaterialsRhoWater"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r17367 r17369 191 191 else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum; 192 192 else if (strcmp(name,"DamageEquivStress")==0) return DamageEquivStressEnum; 193 else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum; 194 else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum; 193 195 else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum; 194 196 else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum; … … 258 260 else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum; 259 261 else if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum; 260 else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum;261 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"Surface")==0) return SurfaceEnum; 265 if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum; 266 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 267 else if (strcmp(name,"Surface")==0) return SurfaceEnum; 266 268 else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum; 267 269 else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; … … 381 383 else if (strcmp(name,"Contours")==0) return ContoursEnum; 382 384 else if (strcmp(name,"Parameters")==0) return ParametersEnum; 383 else if (strcmp(name,"Vertices")==0) return VerticesEnum;384 else if (strcmp(name,"Results")==0) return ResultsEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 388 if (strcmp(name,"Vertices")==0) return VerticesEnum; 389 else if (strcmp(name,"Results")==0) return ResultsEnum; 390 else if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 389 391 else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum; 390 392 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum; … … 504 506 else if (strcmp(name,"VzFS")==0) return VzFSEnum; 505 507 else if (strcmp(name,"VxMesh")==0) return VxMeshEnum; 506 else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;507 else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum; 511 if (strcmp(name,"VyMesh")==0) return VyMeshEnum; 512 else if (strcmp(name,"VzMesh")==0) return VzMeshEnum; 513 else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum; 512 514 else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum; 513 515 else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum; … … 627 629 else if (strcmp(name,"Regular")==0) return RegularEnum; 628 630 else if (strcmp(name,"Scaled")==0) return ScaledEnum; 629 else if (strcmp(name,"Separate")==0) return SeparateEnum;630 else if (strcmp(name,"Sset")==0) return SsetEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Verbose")==0) return VerboseEnum; 634 if (strcmp(name,"Separate")==0) return SeparateEnum; 635 else if (strcmp(name,"Sset")==0) return SsetEnum; 636 else if (strcmp(name,"Verbose")==0) return VerboseEnum; 635 637 else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum; 636 638 else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum; -
issm/trunk-jpl/src/m/classes/damage.m
r17367 r17369 27 27 healing = NaN; 28 28 equiv_stress = NaN; 29 requested_outputs = {}; 29 30 end 30 31 methods … … 79 80 obj.equiv_stress=0; 80 81 82 %output default: 83 obj.requested_outputs={'default'}; 84 81 85 end % }}} 82 86 function md = checkconsistency(obj,md,solution,analyses) % {{{ … … 101 105 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0); 102 106 md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0]); 107 md = checkfield(md,'fieldname','damage.requested_outputs','stringrow',1); 103 108 elseif strcmpi(obj.law,'undamaged'), 104 109 if (solution==DamageEvolutionSolutionEnum), … … 107 112 else 108 113 error('invalid damage evolution law'); 114 end 115 116 end % }}} 117 function list=defaultoutputs(self,md) % {{{ 118 119 if strcmp(meshtype(md.mesh),'3D'), 120 list = {'DamageD',}; 121 elseif strcmp(meshtype(md.mesh),'2Dhorizontal'), 122 list = {'DamageD'}; 123 elseif strcmp(meshtype(md.mesh),'2Dvertical'), 124 list = {'DamageD'}; 125 else 126 error('mesh type not supported yet'); 109 127 end 110 128 … … 132 150 fielddisplay(obj,'stress_threshold','damage stress threshold [Pa]'); 133 151 fielddisplay(obj,'equiv_stress','0: von Mises'); 152 fielddisplay(obj,'requested_outputs','additional outputs requested'); 134 153 end 135 154 … … 156 175 WriteData(fid,'object',obj,'fieldname','healing','format','Double'); 157 176 WriteData(fid,'object',obj,'fieldname','equiv_stress','format','Integer'); 177 178 %process requested outputs 179 outputs = obj.requested_outputs; 180 pos = find(ismember(outputs,'default')); 181 if ~isempty(pos), 182 outputs(pos) = []; %remove 'default' from outputs 183 outputs = [outputs defaultoutputs(obj,md)]; %add defaults 184 end 185 WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum,'format','StringArray'); 158 186 end 159 187 -
issm/trunk-jpl/src/m/classes/damage.py
r17367 r17369 10 10 11 11 Usage: 12 damage=damage() ;12 damage=damage() 13 13 """ 14 14 … … 36 36 self.healing = float('NaN') 37 37 self.equiv_stress = float('NaN') 38 self.requested_outputs = [] 38 39 39 40 if not len(args): … … 64 65 s+="%s\n" % fielddisplay(self,"stress_threshold","damage stress threshold [Pa]") 65 66 s+="%s\n" % fielddisplay(self,"equiv_stresss","0: von Mises") 67 s+="%s\n" % fielddisplay(self,'requested_outputs','additional outputs requested') 66 68 67 69 return s … … 99 101 self.equiv_stress=0 100 102 103 #output default: 104 self.requested_outputs=['default'] 105 106 return self 101 107 # }}} 108 def defaultoutputs(self,md): # {{{ 109 110 if strcmp(md.mesh.meshtype(),'3D'): 111 list = ['DamageD'] 112 elif strcmp(md.mesh.meshtype(),'2Dhorizontal'): 113 list = ['DamageD'] 114 elif strcmp(md.mesh.meshtype(),'2Dvertical'): 115 list = ['DamageD'] 116 else: 117 raise TypeError('mesh type not supported yet') 118 return list 119 120 #}}} 102 121 def checkconsistency(self,md,solution,analyses): # {{{ 103 122 … … 108 127 109 128 md = checkfield(md,'fieldname','damage.stabilization','numel',[1],'values',[0,1,2]) 110 md = checkfield(md,'fieldname','damage.maxiter','>=0',0) ;111 md = checkfield(md,'fieldname','damage.penalty_factor','>=0',0) ;112 md = checkfield(md,'fieldname','damage.penalty_lock','>=0',0) ;113 md = checkfield(md,'fieldname','damage.penalty_threshold','>=0',0) ;129 md = checkfield(md,'fieldname','damage.maxiter','>=0',0) 130 md = checkfield(md,'fieldname','damage.penalty_factor','>=0',0) 131 md = checkfield(md,'fieldname','damage.penalty_lock','>=0',0) 132 md = checkfield(md,'fieldname','damage.penalty_threshold','>=0',0) 114 133 115 134 if self.law == 'pralong': … … 121 140 md = checkfield(md,'fieldname','damage.stress_threshold','>=',0) 122 141 md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0]) 142 md = checkfield(md,'fieldname','damage.requested_outputs','stringrow',1) 123 143 elif strcmpi(self.law,'undamaged'): 124 144 if (solution==DamageEvolutionSolutionEnum): 125 raise RuntimeError('Invalid evolution law (md.damage.law) for a damage solution') ;145 raise RuntimeError('Invalid evolution law (md.damage.law) for a damage solution') 126 146 127 147 return md … … 131 151 WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1) 132 152 WriteData(fid,'object',self,'fieldname','law','format','String') 133 WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1) ;134 WriteData(fid,'object',self,'fieldname','max_damage','format','Double') ;153 WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1) 154 WriteData(fid,'object',self,'fieldname','max_damage','format','Double') 135 155 136 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer') ;137 WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer') ;138 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer') ;139 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer') ;140 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double') ;156 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer') 157 WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer') 158 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer') 159 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer') 160 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double') 141 161 142 162 if self.law=='pralong': … … 147 167 WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double') 148 168 WriteData(fid,'object',self,'fieldname','equiv_stress','format','Integer') 169 170 #process requested outputs 171 outputs = self.requested_outputs 172 indices = [i for i, x in enumerate(outputs) if x == 'default'] 173 if len(indices) > 0: 174 outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:] 175 outputs =outputscopy 176 WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum(),'format','StringArray') 149 177 # }}} -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r17367 r17369 180 180 def DamageMaxDamageEnum(): return StringToEnum("DamageMaxDamage")[0] 181 181 def DamageEquivStressEnum(): return StringToEnum("DamageEquivStress")[0] 182 def DamageEvolutionNumRequestedOutputsEnum(): return StringToEnum("DamageEvolutionNumRequestedOutputs")[0] 183 def DamageEvolutionRequestedOutputsEnum(): return StringToEnum("DamageEvolutionRequestedOutputs")[0] 182 184 def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0] 183 185 def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
Note:
See TracChangeset
for help on using the changeset viewer.