Changeset 17852


Ignore:
Timestamp:
04/25/14 15:54:36 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: preparing thermal with tets

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

Legend:

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

    r17773 r17852  
    103103}
    104104/*}}}*/
     105/*FUNCTION Tetra::ElementSizes (THIS ONE){{{*/
     106void Tetra::ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz){
     107
     108        IssmDouble xyz_list[NUMVERTICES][3];
     109        IssmDouble xmin,ymin,zmin;
     110        IssmDouble xmax,ymax,zmax;
     111
     112        /*Get xyz list: */
     113        ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     114        xmin=xyz_list[0][0]; xmax=xyz_list[0][0];
     115        ymin=xyz_list[0][1]; ymax=xyz_list[0][1];
     116        zmin=xyz_list[0][2]; zmax=xyz_list[0][2];
     117
     118        for(int i=1;i<NUMVERTICES;i++){
     119                if(xyz_list[i][0]<xmin) xmin=xyz_list[i][0];
     120                if(xyz_list[i][0]>xmax) xmax=xyz_list[i][0];
     121                if(xyz_list[i][1]<ymin) ymin=xyz_list[i][1];
     122                if(xyz_list[i][1]>ymax) ymax=xyz_list[i][1];
     123                if(xyz_list[i][2]<zmin) zmin=xyz_list[i][2];
     124                if(xyz_list[i][2]>zmax) zmax=xyz_list[i][2];
     125        }
     126
     127        *hx=xmax-xmin;
     128        *hy=ymax-ymin;
     129        *hz=zmax-zmin;
     130}
     131/*}}}*/
    105132/*FUNCTION Tetra::FaceOnBaseIndices{{{*/
    106133void Tetra::FaceOnBaseIndices(int* pindex1,int* pindex2,int* pindex3){
     
    171198        /*return TetraRef field*/
    172199        return this->element_type;
     200}
     201/*}}}*/
     202/*FUNCTION Tetra::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype) (THIS ONE??){{{*/
     203void Tetra::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){
     204
     205        Input* input=inputs->GetInput(enumtype);
     206        if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
     207
     208        GaussTetra* gauss=new GaussTetra();
     209        gauss->GaussVertex(this->GetNodeIndex(node));
     210
     211        input->GetInputValue(pvalue,gauss);
     212        delete gauss;
     213}
     214/*}}}*/
     215/*FUNCTION Tetra::GetNodeIndex (THIS ONE){{{*/
     216int Tetra::GetNodeIndex(Node* node){
     217
     218        _assert_(nodes);
     219        int numnodes = this->NumberofNodes();
     220
     221        for(int i=0;i<numnodes;i++){
     222                if(node==nodes[i]) return i;
     223        }
     224        _error_("Node provided not found among element nodes");
     225
    173226}
    174227/*}}}*/
     
    917970}
    918971/*}}}*/
     972/*FUNCTION Tetra::ViscousHeating (THIS ONE){{{*/
     973void Tetra::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){
     974
     975        /*Intermediaries*/
     976        IssmDouble phi;
     977        IssmDouble viscosity;
     978        IssmDouble epsilon[6];
     979
     980        _assert_(gauss->Enum()==GaussTetraEnum);
     981        this->StrainRateFS(&epsilon[0],xyz_list,(GaussTetra*)gauss,vx_input,vy_input,vz_input);
     982        this->ViscosityFS(&viscosity,3,xyz_list,(GaussTetra*)gauss,vx_input,vy_input,vz_input);
     983        GetPhi(&phi,&epsilon[0],viscosity);
     984
     985        /*Assign output pointer*/
     986        *pphi = phi;
     987}
     988/*}}}*/
    919989/*FUNCTION Tetra::PressureInterpolation{{{*/
    920990int Tetra::PressureInterpolation(void){
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r17831 r17852  
    6262                void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
    6363                void        Delta18oParameterization(void){_error_("not implemented yet");};
    64                 void        ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz){_error_("not implemented yet");};
     64                void        ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
    6565                void        FaceOnFrontIndices(int* pindex1,int* pindex2,int* pindex3);
    6666                void        FaceOnBaseIndices(int* pindex1,int* pindex2,int* pindex3);
     
    7272                Element*    GetSurfaceElement(void){_error_("not implemented yet");};
    7373                Element*    GetBasalElement(void){_error_("not implemented yet");};
    74                 int         GetNodeIndex(Node* node){_error_("not implemented yet");};
     74                int         GetNodeIndex(Node* node);
    7575                int         GetNumberOfNodes(void);
    7676                int         GetNumberOfVertices(void);
     
    112112                void        GetGroundedPart(int* point1,IssmDouble* fraction1, IssmDouble* fraction2,bool* mainlyfloating){_error_("not implemented yet");};
    113113                IssmDouble  GetGroundedPortion(IssmDouble* xyz_list){_error_("not implemented yet");};
    114                 void        GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
     114                void        GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
    115115                Node*       GetNode(int node_number){_error_("Not implemented");};
    116116                IssmDouble  GetXcoord(Gauss* gauss);
     
    128128                int         VertexConnectivity(int vertexindex){_error_("not implemented yet");};
    129129                void        VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
    130                 void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};
     130                void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
    131131                bool        IsZeroLevelset(int levelset_enum){_error_("not implemented");};
    132132                bool               IsIcefront(void);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp

    r17700 r17852  
    2929        connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
    3030
    31         /*Get element width (3 or 6)*/
    32         switch(iomodel->domaintype){
    33                 case Domain2DhorizontalEnum: elementswidth=3; break;
    34                 case Domain2DverticalEnum  : elementswidth=3; break;
    35                 case Domain3DEnum          : elementswidth=6; break;
     31        /*Get element width*/
     32        switch(iomodel->meshelementtype){
     33                case TriaEnum: elementswidth=3; break;
     34                case PentaEnum: elementswidth=6; break;
     35                case TetraEnum: elementswidth=4; break;
    3636                default:  _error_("mesh type "<<EnumToStringx(iomodel->domaintype)<<" not supported yet");
    3737        }
Note: See TracChangeset for help on using the changeset viewer.