Changeset 17369


Ignore:
Timestamp:
02/28/14 14:31:38 (11 years ago)
Author:
cborstad
Message:

CHG: enable requested outputs for damage evolution solution

Location:
issm/trunk-jpl/src
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp

    r17367 r17369  
    1111void DamageEvolutionAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
    1212
     13        /*Intermediaries*/
     14        int         numoutputs;
     15        char**      requestedoutputs = NULL;
     16
    1317        /*retrieve some parameters: */
    1418        parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
    1519        parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
    16 
    1720        parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyThresholdEnum));
    1821        parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyLockEnum));
     
    2023        parameters->AddObject(iomodel->CopyConstantObject(DamageMaxiterEnum));
    2124        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);
    2231
    2332        /*Retrieve law dependent parameters: */
  • issm/trunk-jpl/src/c/cores/damage_core.cpp

    r16518 r17369  
    1414        /*intermediary*/
    1515        bool   save_results;
    16         bool   dakota_analysis  = false;
     16        bool   dakota_analysis     = false;
    1717        int    solution_type;
     18        int    numoutputs          = 0;
     19        char   **requested_outputs = NULL;
    1820
    1921        if(VerboseSolution()) _printf0_("   computing damage\n");
     
    2325        femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
    2426        femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
     27        femmodel->parameters->FindParam(&numoutputs,DamageEvolutionNumRequestedOutputsEnum);
     28        if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,DamageEvolutionRequestedOutputsEnum);
    2529
    2630        if(dakota_analysis && solution_type!=TransientSolutionEnum){
     
    3438        if(save_results){
    3539                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);
    3849        }
    3950}
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17367 r17369  
    180180        DamageMaxDamageEnum,
    181181        DamageEquivStressEnum,
     182        DamageEvolutionNumRequestedOutputsEnum,
     183        DamageEvolutionRequestedOutputsEnum,
    182184        MaterialsRhoIceEnum,
    183185        MaterialsRhoWaterEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17367 r17369  
    188188                case DamageMaxDamageEnum : return "DamageMaxDamage";
    189189                case DamageEquivStressEnum : return "DamageEquivStress";
     190                case DamageEvolutionNumRequestedOutputsEnum : return "DamageEvolutionNumRequestedOutputs";
     191                case DamageEvolutionRequestedOutputsEnum : return "DamageEvolutionRequestedOutputs";
    190192                case MaterialsRhoIceEnum : return "MaterialsRhoIce";
    191193                case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17367 r17369  
    191191              else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum;
    192192              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;
    193195              else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
    194196              else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum;
     
    258260              else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum;
    259261              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;
    262262         else stage=3;
    263263   }
    264264   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;
    266268              else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
    267269              else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
     
    381383              else if (strcmp(name,"Contours")==0) return ContoursEnum;
    382384              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;
    385385         else stage=4;
    386386   }
    387387   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;
    389391              else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum;
    390392              else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
     
    504506              else if (strcmp(name,"VzFS")==0) return VzFSEnum;
    505507              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;
    508508         else stage=5;
    509509   }
    510510   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;
    512514              else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
    513515              else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
     
    627629              else if (strcmp(name,"Regular")==0) return RegularEnum;
    628630              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;
    631631         else stage=6;
    632632   }
    633633   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;
    635637              else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
    636638              else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
  • issm/trunk-jpl/src/m/classes/damage.m

    r17367 r17369  
    2727                healing             = NaN;
    2828                equiv_stress              = NaN;
     29                requested_outputs   = {};
    2930        end
    3031        methods
     
    7980                        obj.equiv_stress=0;
    8081
     82                         %output default:
     83                         obj.requested_outputs={'default'};
     84
    8185                end % }}}
    8286                function md = checkconsistency(obj,md,solution,analyses) % {{{
     
    101105                                md = checkfield(md,'fieldname','damage.stress_threshold','>=',0);
    102106                                md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0]);
     107                                md = checkfield(md,'fieldname','damage.requested_outputs','stringrow',1);
    103108                        elseif strcmpi(obj.law,'undamaged'),
    104109                                if (solution==DamageEvolutionSolutionEnum),
     
    107112                        else
    108113                                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');
    109127                        end
    110128
     
    132150                                fielddisplay(obj,'stress_threshold','damage stress threshold [Pa]');
    133151                                fielddisplay(obj,'equiv_stress','0: von Mises');
     152                                fielddisplay(obj,'requested_outputs','additional outputs requested');
    134153                        end
    135154
     
    156175                                WriteData(fid,'object',obj,'fieldname','healing','format','Double');
    157176                                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');
    158186                        end
    159187
  • issm/trunk-jpl/src/m/classes/damage.py

    r17367 r17369  
    1010
    1111           Usage:
    12               damage=damage();
     12              damage=damage()
    1313        """
    1414
     
    3636                self.healing                            = float('NaN')
    3737                self.equiv_stress       = float('NaN')
     38                self.requested_outputs  = []
    3839
    3940                if not len(args):
     
    6465                        s+="%s\n" % fielddisplay(self,"stress_threshold","damage stress threshold [Pa]")
    6566                        s+="%s\n" % fielddisplay(self,"equiv_stresss","0: von Mises")
     67                        s+="%s\n" % fielddisplay(self,'requested_outputs','additional outputs requested')
    6668
    6769                return s
     
    99101                self.equiv_stress=0
    100102
     103                #output default:
     104                self.requested_outputs=['default']
     105
     106                return self
    101107        # }}}
     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        #}}}
    102121        def checkconsistency(self,md,solution,analyses):    # {{{
    103122
     
    108127                       
    109128                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)
    114133
    115134                if self.law == 'pralong':
     
    121140                        md = checkfield(md,'fieldname','damage.stress_threshold','>=',0)
    122141                        md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0])
     142                        md = checkfield(md,'fieldname','damage.requested_outputs','stringrow',1)
    123143                elif strcmpi(self.law,'undamaged'):
    124144                        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')
    126146
    127147                return md
     
    131151                WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1)
    132152                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')
    135155
    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')
    141161
    142162                if self.law=='pralong':
     
    147167                        WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double')
    148168                        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')
    149177        # }}}
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17367 r17369  
    180180def DamageMaxDamageEnum(): return StringToEnum("DamageMaxDamage")[0]
    181181def DamageEquivStressEnum(): return StringToEnum("DamageEquivStress")[0]
     182def DamageEvolutionNumRequestedOutputsEnum(): return StringToEnum("DamageEvolutionNumRequestedOutputs")[0]
     183def DamageEvolutionRequestedOutputsEnum(): return StringToEnum("DamageEvolutionRequestedOutputs")[0]
    182184def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
    183185def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
Note: See TracChangeset for help on using the changeset viewer.