Changeset 16866


Ignore:
Timestamp:
11/21/13 15:45:51 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added FS vertical

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

Legend:

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

    r16862 r16866  
    22282228                element->NodalFunctionsVelocity(vbasis,gauss);
    22292229                surface_input->GetInputValue(&surface,gauss);
    2230                 z=element->GetZcoord(gauss);
     2230                if(dim==3) z=element->GetZcoord(gauss);
     2231                else       z=element->GetYcoord(gauss);
    22312232                pressure = rho_water*gravity*min(0.,z);//0 if the gaussian point is above water level
    22322233
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r16864 r16866  
    120120                virtual void   GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
    121121                virtual IssmDouble GetZcoord(Gauss* gauss)=0;
     122                virtual IssmDouble GetYcoord(Gauss* gauss)=0;
    122123                virtual void   GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0;
    123124
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r16864 r16866  
    102102                void   GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
    103103                IssmDouble GetZcoord(Gauss* gauss);
     104                IssmDouble GetYcoord(Gauss* gauss){_error_("Not implemented");};
    104105                void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
    105106                void   GetVerticesCoordinates(IssmDouble** pxyz_list);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r16864 r16866  
    151151                void        GetInputValue(IssmDouble* pvalue,int enum_type){_error_("not implemented yet");};
    152152                void        GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
     153                IssmDouble  GetYcoord(Gauss* gauss){_error_("Not implemented");};
    153154                IssmDouble  GetZcoord(Gauss* gauss){_error_("not implemented yet");};
    154155                Gauss*      NewGauss(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16864 r16866  
    11901190
    11911191}/*}}}*/
     1192/*FUNCTION Tria::GetVerticesCoordinatesBase(IssmDouble** pxyz_list){{{*/
     1193void Tria::GetVerticesCoordinatesBase(IssmDouble** pxyz_list){
     1194
     1195        int        indices[2];
     1196        IssmDouble xyz_list[NUMVERTICES][3];
     1197
     1198        /*Element XYZ list*/
     1199        ::GetVerticesCoordinates(&xyz_list[0][0],this->vertices,NUMVERTICES);
     1200
     1201        /*Allocate Output*/
     1202        IssmDouble* xyz_list_edge = xNew<IssmDouble>(2*3);
     1203        this->EdgeOnBedIndices(&indices[0],&indices[1]);
     1204        for(int i=0;i<2;i++) for(int j=0;j<2;j++) xyz_list_edge[i*3+j]=xyz_list[indices[i]][j];
     1205
     1206        /*Assign output pointer*/
     1207        *pxyz_list = xyz_list_edge;
     1208
     1209}/*}}}*/
    11921210/*FUNCTION Tria::NormalSection{{{*/
    11931211void Tria::NormalSection(IssmDouble* normal,IssmDouble* xyz_list){
     
    15771595        /*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
    15781596        input->GetVectorFromInputs(vector,&vertexpidlist[0]);
     1597}
     1598/*}}}*/
     1599/*FUNCTION Tria::GetYcoord {{{*/
     1600IssmDouble Tria::GetYcoord(Gauss* gauss){
     1601
     1602        IssmDouble y;
     1603        IssmDouble xyz_list[NUMVERTICES][3];
     1604        IssmDouble y_list[NUMVERTICES];
     1605
     1606        ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     1607        for(int i=0;i<NUMVERTICES;i++) y_list[i]=xyz_list[i][1];
     1608        int backup = this->element_type;
     1609        this->element_type = P1Enum;
     1610        TriaRef::GetInputValue(&y,y_list,gauss);
     1611        this->element_type = backup;
     1612
     1613        return y;
    15791614}
    15801615/*}}}*/
     
    20442079}
    20452080/*}}}*/
     2081/*FUNCTION Tria::JacobianDeterminantBase{{{*/
     2082void Tria::JacobianDeterminantBase(IssmDouble* pJdet,IssmDouble* xyz_list_base,Gauss* gauss){
     2083
     2084        _assert_(gauss->Enum()==GaussTriaEnum);
     2085        this->GetSegmentJacobianDeterminant(pJdet,xyz_list_base,(GaussTria*)gauss);
     2086
     2087}
     2088/*}}}*/
    20462089/*FUNCTION Tria::JacobianDeterminantSurface{{{*/
    20472090void Tria::JacobianDeterminantSurface(IssmDouble* pJdet,IssmDouble* xyz_list,Gauss* gauss){
     
    22632306        GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,4);
    22642307        return new GaussTria(area_coordinates,order_vert);
     2308}
     2309/*}}}*/
     2310/*FUNCTION Tria::NewGaussBase(int order){{{*/
     2311Gauss* Tria::NewGaussBase(int order){
     2312
     2313        int indices[2];
     2314        this->EdgeOnBedIndices(&indices[0],&indices[1]);
     2315        return new GaussTria(indices[0],indices[1],order);
    22652316}
    22662317/*}}}*/
     
    23602411        if(found)*pvalue=value;
    23612412        return found;
     2413}
     2414/*}}}*/
     2415/*FUNCTION Tria::NormalBase {{{*/
     2416void Tria::NormalBase(IssmDouble* bed_normal,IssmDouble* xyz_list){
     2417
     2418        /*Build unit outward pointing vector*/
     2419        IssmDouble vector[2];
     2420        IssmDouble norm;
     2421
     2422        vector[0]=xyz_list[1*3+0] - xyz_list[0*3+0];
     2423        vector[1]=xyz_list[1*3+1] - xyz_list[0*3+1];
     2424
     2425        norm=sqrt(vector[0]*vector[0] + vector[1]*vector[1]);
     2426
     2427        bed_normal[0]= + vector[1]/norm;
     2428        bed_normal[1]= - vector[0]/norm;
    23622429}
    23632430/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r16864 r16866  
    117117                void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
    118118                void        GetVerticesCoordinates(IssmDouble** pxyz_list);
    119                 void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list){_error_("not implemented yet");};
     119                void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
    120120                void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list){_error_("not implemented yet");};
    121121                void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
     
    266266                void           GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating);
    267267                IssmDouble     GetGroundedPortion(IssmDouble* xyz_list);
     268                IssmDouble     GetYcoord(Gauss* gauss);
    268269                IssmDouble     GetZcoord(Gauss* gauss){_error_("not implemented");};
    269270                void           NormalSection(IssmDouble* normal,IssmDouble* xyz_list);
    270271                void           NormalTop(IssmDouble* normal,IssmDouble* xyz_list){_error_("not implemented yet");};
    271                 void           NormalBase(IssmDouble* normal,IssmDouble* xyz_list){_error_("not implemented yet");};
     272                void           NormalBase(IssmDouble* normal,IssmDouble* xyz_list);
    272273                IssmDouble     GetMaterialParameter(int enum_in);
    273274                Input*         GetInput(int inputenum);
     
    291292                void           JacobianDeterminantLine(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
    292293                void           JacobianDeterminantSurface(IssmDouble*  pJdet, IssmDouble* xyz_list,Gauss* gauss);
    293                 void           JacobianDeterminantBase(IssmDouble* pJdet,IssmDouble* xyz_list_base,Gauss* gauss){_error_("not implemented yet");};
     294                void           JacobianDeterminantBase(IssmDouble* pJdet,IssmDouble* xyz_list_base,Gauss* gauss);
    294295                void           JacobianDeterminantTop(IssmDouble* pJdet,IssmDouble* xyz_list_base,Gauss* gauss){_error_("not implemented yet");};
    295296                IssmDouble     MinEdgeLength(IssmDouble* xyz_list){_error_("not implemented yet");};
     
    298299      Gauss*         NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order);
    299300      Gauss*         NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert);
    300                 Gauss*         NewGaussBase(int order){_error_("not implemented yet");};
     301                Gauss*         NewGaussBase(int order);
    301302                Gauss*         NewGaussLine(int vertex1,int vertex2,int order){_error_("not implemented yet");};
    302303                Gauss*         NewGaussTop(int order){_error_("not implemented yet");};
Note: See TracChangeset for help on using the changeset viewer.