Changeset 18613


Ignore:
Timestamp:
10/10/14 13:04:07 (10 years ago)
Author:
srebuffi
Message:

NEW: added stress intensity factor calculation

Location:
issm/trunk-jpl/src
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/Makefile.am

    r18593 r18613  
    213213                                        ./shared/Elements/elements.h\
    214214                                        ./shared/Elements/Cuffey.cpp\
     215                                        ./shared/Elements/StressIntensityIntegralWeight.cpp\
    215216                                        ./shared/Elements/Paterson.cpp\
    216217                                        ./shared/Elements/Arrhenius.cpp\
  • issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r18521 r18613  
    6565        /*parameters: */
    6666        bool save_results;
     67        int  stabilization=1;
    6768        femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
     69        //femmodel->parameters->FindParam(&stabilization,LevelsetStabilizationEnum);
    6870
    6971        /*activate formulation: */
     
    7173
    7274        if(VerboseSolution()) _printf0_("call computational core:\n");
    73         solutionsequence_linear(femmodel);
     75        if(stabilization==4){
     76                solutionsequence_fct(femmodel);
     77        }
     78        else{
     79                solutionsequence_linear(femmodel);
     80        }
    7481
    7582        if(save_results){
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r18602 r18613  
    11051105                                name==SedimentHeadOldEnum ||
    11061106                                name==EplHeadOldEnum ||
     1107                                name==StressIntensityFactorEnum ||
    11071108                                name==HydrologydcEplThicknessOldEnum ||
    11081109                                name==HydrologydcEplInitialThicknessEnum ||
     
    12031204                                input=this->inputs->GetInput(output_enum);
    12041205                                break;
     1206                        case StressIntensityFactorEnum:
     1207                                this->StressIntensityFactor();
     1208                                input=this->inputs->GetInput(output_enum);
     1209                                break;
    12051210                        default:
    12061211                                _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r18602 r18613  
    219219                virtual void   ComputeStressTensor(void)=0;
    220220                virtual void   ComputeDeviatoricStressTensor(void)=0;
     221                virtual void    StressIntensityFactor(void)=0;
    221222
    222223                virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r18521 r18613  
    345345        /*Clean up and return*/
    346346        delete gauss;
     347}
     348/*}}}*/
     349void       Penta::StressIntensityFactor(){/*{{{*/
     350
     351        /* Check if we are on the base */
     352        if(!IsOnBase()) return;
     353
     354        IssmDouble  ki[6]={0.};
     355        IssmDouble  const_grav=9.81;
     356        IssmDouble  rho_ice=900;
     357        IssmDouble  rho_water=1000;
     358        IssmDouble  Jdet[3];
     359        IssmDouble  pressure,vx,vy,vel,deviaxx,deviaxy,deviayy,water_depth,prof,stress_xx,thickness;
     360
     361        Penta* penta=this;
     362        for(;;){
     363       
     364                IssmDouble  xyz_list[NUMVERTICES][3];
     365                /* Get node coordinates and dof list: */
     366                ::GetVerticesCoordinates(&xyz_list[0][0],penta->vertices,NUMVERTICES);
     367
     368                ///*Compute the Jacobian for the vertical integration*/
     369                Jdet[0]=(xyz_list[3][2]-xyz_list[0][2])*0.5;
     370                Jdet[1]=(xyz_list[4][2]-xyz_list[1][2])*0.5;
     371                Jdet[2]=(xyz_list[5][2]-xyz_list[2][2])*0.5;
     372       
     373                /*Retrieve all inputs we will need*/
     374                Input* vx_input=inputs->GetInput(VxEnum);                                  _assert_(vx_input);
     375                Input* vy_input=inputs->GetInput(VyEnum);                                  _assert_(vy_input);
     376                Input* vel_input=inputs->GetInput(VelEnum);                                _assert_(vel_input);
     377                Input* pressure_input=inputs->GetInput(PressureEnum);                      _assert_(pressure_input);
     378                Input* deviaxx_input=inputs->GetInput(DeviatoricStressxxEnum);             _assert_(deviaxx_input);
     379                Input* deviaxy_input=inputs->GetInput(DeviatoricStressxyEnum);             _assert_(deviaxy_input);
     380                Input* deviayy_input=inputs->GetInput(DeviatoricStressyyEnum);             _assert_(deviayy_input);
     381                Input* surface_input=inputs->GetInput(SurfaceEnum);                                                             _assert_(surface_input);
     382                Input* thickness_input=inputs->GetInput(ThicknessEnum);                                                 _assert_(thickness_input);
     383               
     384                /* Start looping on the number of 2D vertices: */
     385                for(int ig=0;ig<3;ig++){
     386                        GaussPenta* gauss=new GaussPenta(ig,3+ig,11);
     387                        for (int iv=gauss->begin();iv<gauss->end();iv++){
     388                                gauss->GaussPoint(iv);
     389
     390                                /* Get the value we need*/
     391                                pressure_input->GetInputValue(&pressure,gauss);
     392                                vx_input->GetInputValue(&vx,gauss);
     393                                vy_input->GetInputValue(&vy,gauss);
     394                                vel_input->GetInputValue(&vel,gauss);
     395                                deviaxx_input->GetInputValue(&deviaxx,gauss);
     396                                deviaxy_input->GetInputValue(&deviaxy,gauss);
     397                                deviayy_input->GetInputValue(&deviayy,gauss);
     398                                surface_input->GetInputValue(&water_depth,gauss);
     399                                thickness_input->GetInputValue(&thickness,gauss);
     400                                prof=water_depth-penta->GetZcoord(&xyz_list[0][0],gauss);
     401
     402                                /*stress_xx= Deviatoric stress along the ice flow direction plus cryostatic pressure */
     403                                stress_xx=(vx*vx*(deviaxx)+vy*vy*(deviayy)+2*vy*vx*deviaxy)/(vel*vel+1.e-6);
     404
     405                                if(prof<water_depth&prof<thickness){
     406                                        /* Compute the local stress intensity factor*/
     407                                        ki[ig]+=Jdet[ig]*gauss->weight*stress_xx*StressIntensityIntegralWeight(prof,min(water_depth,thickness),thickness);
     408                                }
     409                        }
     410                        delete gauss;
     411                }
     412                       
     413                /*Stop if we have reached the surface/base*/
     414                if(penta->IsOnSurface()) break;
     415               
     416                /*get upper Penta*/
     417                penta=penta->GetUpperPenta();
     418                _assert_(penta->Id()!=this->id);
     419        }
     420
     421        /*Add input*/
     422        this->inputs->AddInput(new PentaInput(StressIntensityFactorEnum,&ki[0],P1Enum));
     423        this->InputExtrude(StressIntensityFactorEnum,-1);
    347424}
    348425/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r18450 r18613  
    5757                void   ComputeStressTensor();
    5858                void   ComputeDeviatoricStressTensor();
     59                void   StressIntensityFactor();
    5960                void   Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
    6061                void   ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r18450 r18613  
    5757                void        ComputeStressTensor(){_error_("not implemented yet");};
    5858                void        ComputeDeviatoricStressTensor(){_error_("not implemented yet");};
     59                void        StressIntensityFactor(void){_error_("not implemented yet");};
    5960                void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
    6061                void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r18450 r18613  
    5757                void        ComputeStressTensor(){_error_("not implemented yet");};
    5858                void        ComputeDeviatoricStressTensor(){_error_("not implemented yet");};
     59                void        StressIntensityFactor(void){_error_("not implemented yet");};
    5960                void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
    6061                void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r18450 r18613  
    5656                void        ComputeDeviatoricStressTensor();
    5757                void        ComputeSurfaceNormalVelocity();
     58                void        StressIntensityFactor(void){_error_("not implemented yet");};
    5859                void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
    5960                void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r18603 r18613  
    16361636}
    16371637/*}}}*/
     1638void FemModel::StressIntensityFactorx(){/*{{{*/
     1639
     1640        /*Initialize input as 0*/
     1641        InputUpdateFromConstantx(this,0.,StressIntensityFactorEnum);
     1642
     1643        /*Update input for basal element only*/
     1644        for(int i=0;i<elements->Size();i++){
     1645                Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
     1646                element->StressIntensityFactor();
     1647        }
     1648}
     1649        /*}}}*/
    16381650#ifdef  _HAVE_DAKOTA_
    16391651void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r18565 r18613  
    8181                void ElementResponsex(IssmDouble* presponse,int response_enum);
    8282                void BalancethicknessMisfitx(IssmDouble* pV);
     83                void StressIntensityFactorx();
    8384                #ifdef  _HAVE_DAKOTA_
    8485                void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
  • issm/trunk-jpl/src/c/shared/Elements/elements.h

    r17457 r18613  
    2222                                          IssmDouble* monthlytemperaturesout, IssmDouble* monthlyprecout);
    2323IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction, IssmDouble dt=0.);
     24IssmDouble StressIntensityIntegralWeight(IssmDouble depth, IssmDouble water_depth, IssmDouble thickness);
    2425
    2526/*Print arrays*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r18604 r18613  
    204204        DamageEnum,
    205205        NewDamageEnum,
     206        StressIntensityFactorEnum,
    206207        MaterialsRhoIceEnum,
    207208        MaterialsRhoSeawaterEnum,
     
    400401        MeshdeformationAnalysisEnum,
    401402        LevelsetAnalysisEnum,
     403        LevelsetStabilizationEnum,
    402404        ExtrapolationAnalysisEnum,
    403405        LsfReinitializationAnalysisEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r18604 r18613  
    212212                case DamageEnum : return "Damage";
    213213                case NewDamageEnum : return "NewDamage";
     214                case StressIntensityFactorEnum : return "StressIntensityFactor";
    214215                case MaterialsRhoIceEnum : return "MaterialsRhoIce";
    215216                case MaterialsRhoSeawaterEnum : return "MaterialsRhoSeawater";
     
    403404                case MeshdeformationAnalysisEnum : return "MeshdeformationAnalysis";
    404405                case LevelsetAnalysisEnum : return "LevelsetAnalysis";
     406                case LevelsetStabilizationEnum : return "LevelsetStabilization";
    405407                case ExtrapolationAnalysisEnum : return "ExtrapolationAnalysis";
    406408                case LsfReinitializationAnalysisEnum : return "LsfReinitializationAnalysis";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r18604 r18613  
    215215              else if (strcmp(name,"Damage")==0) return DamageEnum;
    216216              else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
     217              else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
    217218              else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
    218219              else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum;
     
    259260              else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
    260261              else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
    261               else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
     265              if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
     266              else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
    266267              else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
    267268              else if (strcmp(name,"QmuMassFluxSegmentsPresent")==0) return QmuMassFluxSegmentsPresentEnum;
     
    382383              else if (strcmp(name,"FlaimAnalysis")==0) return FlaimAnalysisEnum;
    383384              else if (strcmp(name,"FlaimSolution")==0) return FlaimSolutionEnum;
    384               else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
     388              if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
     389              else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
    389390              else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
    390391              else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
     
    412413              else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
    413414              else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
     415              else if (strcmp(name,"LevelsetStabilization")==0) return LevelsetStabilizationEnum;
    414416              else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
    415417              else if (strcmp(name,"LsfReinitializationAnalysis")==0) return LsfReinitializationAnalysisEnum;
     
    504506              else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
    505507              else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
    506               else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
    507               else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
     511              if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
     512              else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
     513              else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
    512514              else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
    513515              else if (strcmp(name,"Converged")==0) return ConvergedEnum;
     
    627629              else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
    628630              else if (strcmp(name,"Step")==0) return StepEnum;
    629               else if (strcmp(name,"Time")==0) return TimeEnum;
    630               else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
     634              if (strcmp(name,"Time")==0) return TimeEnum;
     635              else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
     636              else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
    635637              else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
    636638              else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
     
    750752              else if (strcmp(name,"BasalforcingsOceanSsh")==0) return BasalforcingsOceanSshEnum;
    751753              else if (strcmp(name,"BasalforcingsOceanVx")==0) return BasalforcingsOceanVxEnum;
    752               else if (strcmp(name,"BasalforcingsOceanVy")==0) return BasalforcingsOceanVyEnum;
    753               else if (strcmp(name,"SurfaceforcingsRhoAir")==0) return SurfaceforcingsRhoAirEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"SurfaceforcingsAirCoef")==0) return SurfaceforcingsAirCoefEnum;
     757              if (strcmp(name,"BasalforcingsOceanVy")==0) return BasalforcingsOceanVyEnum;
     758              else if (strcmp(name,"SurfaceforcingsRhoAir")==0) return SurfaceforcingsRhoAirEnum;
     759              else if (strcmp(name,"SurfaceforcingsAirCoef")==0) return SurfaceforcingsAirCoefEnum;
    758760              else if (strcmp(name,"SurfaceforcingsAirLinDragCoef")==0) return SurfaceforcingsAirLinDragCoefEnum;
    759761              else if (strcmp(name,"SurfaceforcingsAirQuadDragCoef")==0) return SurfaceforcingsAirQuadDragCoefEnum;
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r18604 r18613  
    204204def DamageEnum(): return StringToEnum("Damage")[0]
    205205def NewDamageEnum(): return StringToEnum("NewDamage")[0]
     206def StressIntensityFactorEnum(): return StringToEnum("StressIntensityFactor")[0]
    206207def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
    207208def MaterialsRhoSeawaterEnum(): return StringToEnum("MaterialsRhoSeawater")[0]
     
    395396def MeshdeformationAnalysisEnum(): return StringToEnum("MeshdeformationAnalysis")[0]
    396397def LevelsetAnalysisEnum(): return StringToEnum("LevelsetAnalysis")[0]
     398def LevelsetStabilizationEnum(): return StringToEnum("LevelsetStabilization")[0]
    397399def ExtrapolationAnalysisEnum(): return StringToEnum("ExtrapolationAnalysis")[0]
    398400def LsfReinitializationAnalysisEnum(): return StringToEnum("LsfReinitializationAnalysis")[0]
Note: See TracChangeset for help on using the changeset viewer.