Changeset 17797


Ignore:
Timestamp:
04/21/14 20:25:06 (11 years ago)
Author:
seroussi
Message:

NEW: added sigma_nn in outputs

Location:
issm/trunk-jpl/src/c
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r17684 r17797  
    827827                                input=this->inputs->GetInput(output_enum);
    828828                                break;
     829                        case SigmaNNEnum:
     830                                this->ComputeSigmaNN();
     831                                input=this->inputs->GetInput(output_enum);
     832                                break;
    829833                        default:
    830834                                _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r17680 r17797  
    200200                virtual IssmDouble SurfaceArea(void)=0;
    201201                virtual void   InputDepthAverageAtBase(int enum_type,int average_enum_type)=0;
     202                virtual void   ComputeSigmaNN(void)=0;
    202203                virtual void   ComputeBasalStress(Vector<IssmDouble>* sigma_b)=0;
    203204                virtual void   ComputeStrainRate(Vector<IssmDouble>* eps)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r17680 r17797  
    5656                void   ComputeBasalStress(Vector<IssmDouble>* sigma_b);
    5757                void   ComputeStrainRate(Vector<IssmDouble>* eps);
     58                void   ComputeSigmaNN(){_error_("not implemented yet");};
    5859                void   ComputeStressTensor();
    5960                void   ComputeDeviatoricStressTensor();
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r17680 r17797  
    5454                IssmDouble  CharacteristicLength(void);
    5555                void        ComputeBasalStress(Vector<IssmDouble>* sigma_b){_error_("not implemented yet");};
     56                void        ComputeSigmaNN(){_error_("not implemented yet");};
    5657                void        ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};
    5758                void        ComputeStressTensor(){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r17729 r17797  
    5454                IssmDouble  CharacteristicLength(void){_error_("not implemented yet");};
    5555                void        ComputeBasalStress(Vector<IssmDouble>* sigma_b){_error_("not implemented yet");};
     56                void        ComputeSigmaNN(){_error_("not implemented yet");};
    5657                void        ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};
    5758                void        ComputeStressTensor(){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r17761 r17797  
    145145void  Tria::ComputeBasalStress(Vector<IssmDouble>* eps){
    146146        _error_("Not Implemented yet");
     147}
     148/*}}}*/
     149/*FUNCTION Tria::ComputeSigmaNN {{{*/
     150void  Tria::ComputeSigmaNN(){
     151
     152        if(~IsOnBase()){
     153                IssmDouble sigma_nn=0;
     154                this->inputs->AddInput(new TriaInput(SigmaNNEnum,&sigma_nn,P0Enum));
     155                return;
     156        }
     157        else{
     158                IssmDouble* xyz_list=NULL;
     159                IssmDouble  pressure,viscosity,sigma_nn;
     160                IssmDouble  sigma_xx,sigma_xy,sigma_yy;
     161                IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
     162                IssmDouble  base_normal[2];
     163                int domaintype,dim=2;
     164
     165                /* Get node coordinates and dof list: */
     166                GetVerticesCoordinates(&xyz_list);
     167
     168                /*Retrieve all inputs we will be needing: */
     169                this->FindParam(&domaintype,DomainTypeEnum);
     170                if(domaintype==Domain2DhorizontalEnum) _error_("stress tensor calculation not supported for mesh of type " <<EnumToStringx(domaintype)<<", extrude mesh or call ComputeDeviatoricStressTensor");
     171                Input* pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);
     172                Input* vx_input=inputs->GetInput(VxEnum);             _assert_(vx_input);
     173                Input* vy_input=inputs->GetInput(VyEnum);             _assert_(vy_input);
     174
     175                /* Start looping on the number of vertices: */
     176                Gauss* gauss=NewGaussBase(1);
     177                gauss->GaussPoint(0);
     178
     179                /*Compute strain rate viscosity and pressure: */
     180                this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
     181                this->ViscosityFS(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,NULL);
     182                pressure_input->GetInputValue(&pressure,gauss);
     183
     184                /*Compute Stress*/
     185                sigma_xx=2*viscosity*epsilon[0]-pressure; // sigma = nu eps - pressure
     186                sigma_yy=2*viscosity*epsilon[1]-pressure;
     187                sigma_xy=2*viscosity*epsilon[2];
     188
     189                /*Get normal vector to the bed */
     190                NormalBase(&base_normal[0],xyz_list);
     191
     192                /*Compute sigma_nn*/
     193                sigma_nn=sigma_xx*base_normal[0]*base_normal[0] + sigma_xy*base_normal[0]*base_normal[1] + sigma_yy*base_normal[1]*base_normal[1];
     194
     195                /*Add Stress tensor components into inputs*/
     196                this->inputs->AddInput(new TriaInput(SigmaNNEnum,&sigma_nn,P0Enum));
     197
     198                /*Clean up and return*/
     199                xDelete<IssmDouble>(xyz_list);
     200                delete gauss;
     201        }
    147202}
    148203/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r17680 r17797  
    5252                IssmDouble  CharacteristicLength(void);
    5353                void        ComputeBasalStress(Vector<IssmDouble>* sigma_b);
     54                void        ComputeSigmaNN();
    5455                void        ComputeStrainRate(Vector<IssmDouble>* eps);
    5556                void        ComputeStressTensor();
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17763 r17797  
    539539        HydrologyWaterVxEnum,
    540540        HydrologyWaterVyEnum,
     541        SigmaNNEnum,
    541542        StressTensorEnum,
    542543        StressTensorxxEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17763 r17797  
    528528                case HydrologyWaterVxEnum : return "HydrologyWaterVx";
    529529                case HydrologyWaterVyEnum : return "HydrologyWaterVy";
     530                case SigmaNNEnum : return "SigmaNN";
    530531                case StressTensorEnum : return "StressTensor";
    531532                case StressTensorxxEnum : return "StressTensorxx";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17763 r17797  
    540540              else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
    541541              else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
     542              else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum;
    542543              else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
    543544              else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
     
    628629              else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
    629630              else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
    630               else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"Contact")==0) return ContactEnum;
     634              if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
     635              else if (strcmp(name,"Contact")==0) return ContactEnum;
    635636              else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
    636637              else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum;
Note: See TracChangeset for help on using the changeset viewer.