Changeset 21886


Ignore:
Timestamp:
07/27/17 13:06:55 (8 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixed GetSolutionFromInputs for higher order elements

Location:
issm/trunk-jpl/src/c/classes/Elements
Files:
8 edited

Legend:

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

    r21826 r21886  
    11911191         *    = 4 * mu * eps_eff ^2*/
    11921192        *phi=4.*epsilon_eff*epsilon_eff*viscosity;
     1193}
     1194/*}}}*/
     1195void       Element::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){/*{{{*/
     1196
     1197        int        *doflist = NULL;
     1198        IssmDouble  value;
     1199
     1200        /*Fetch number of nodes for this finite element*/
     1201        int numnodes = this->GetNumberOfNodes();
     1202
     1203        /*Fetch dof list and allocate solution vector*/
     1204        GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
     1205        IssmDouble* values = xNew<IssmDouble>(numnodes);
     1206
     1207        /*Get inputs*/
     1208        Input* enum_input=inputs->GetInput(enum_type); _assert_(enum_input);
     1209
     1210        /*Ok, we have the values, fill in the array: */
     1211        Gauss* gauss=this->NewGauss();
     1212        for(int i=0;i<numnodes;i++){
     1213                gauss->GaussNode(this->element_type,i);
     1214
     1215                enum_input->GetInputValue(&value,gauss);
     1216                values[i]=value;
     1217        }
     1218
     1219        solution->SetValues(numnodes,doflist,values,INS_VAL);
     1220
     1221        /*Free ressources:*/
     1222        xDelete<int>(doflist);
     1223        xDelete<IssmDouble>(values);
     1224        delete gauss;
    11931225}
    11941226/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r21872 r21886  
    101101                void               GetNodesSidList(int* sidlist);
    102102                void               GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
     103                void               GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum);
    103104                void               GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum, int type);
    104105                void                 GetVertexPidList(int* pidlist);
     
    215216                virtual int        GetNumberOfNodes(int enum_type)=0;
    216217                virtual int        GetNumberOfVertices(void)=0;
    217                 virtual void       GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int solutionenum)=0;
    218218                virtual void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid)=0;
    219219                virtual void       GetVerticesCoordinatesBase(IssmDouble** xyz_list)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r21876 r21886  
    10951095int        Penta::GetNumberOfVertices(void){/*{{{*/
    10961096        return NUMVERTICES;
    1097 }
    1098 /*}}}*/
    1099 void       Penta::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){/*{{{*/
    1100 
    1101         const int    numdof=NDOF1*NUMVERTICES;
    1102 
    1103         int          i;
    1104         int*         doflist=NULL;
    1105         IssmDouble   values[numdof];
    1106         IssmDouble   enum_value;
    1107         GaussPenta   *gauss=NULL;
    1108 
    1109         /*Get dof list: */
    1110         GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
    1111         Input* enum_input=inputs->GetInput(enum_type); _assert_(enum_input);
    1112 
    1113         gauss=new GaussPenta();
    1114         for(i=0;i<NUMVERTICES;i++){
    1115                 /*Recover temperature*/
    1116                 gauss->GaussVertex(i);
    1117                 enum_input->GetInputValue(&enum_value,gauss);
    1118                 values[i]=enum_value;
    1119         }
    1120 
    1121         /*Add value to global vector*/
    1122         solution->SetValues(numdof,doflist,values,INS_VAL);
    1123 
    1124         /*Free ressources:*/
    1125         delete gauss;
    1126         xDelete<int>(doflist);
    11271097}
    11281098/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r21872 r21886  
    8484                int            GetNumberOfVertices(void);
    8585                Penta*         GetLowerPenta(void);
    86                 void           GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
    8786                Penta*         GetUpperPenta(void);
    8887                void           GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r21872 r21886  
    7272                int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
    7373                int         GetNumberOfVertices(void);
    74                 void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
    7574                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
    7675                void        GetVerticesCoordinates(IssmDouble** pxyz_list);
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r21872 r21886  
    7878                int         GetNumberOfNodes(int enum_type){_error_("not implemented yet");};
    7979                int         GetNumberOfVertices(void);
    80                 void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
    8180                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid){_error_("not implemented yet");};
    8281                void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r21876 r21886  
    14371437int        Tria::GetNumberOfVertices(void){/*{{{*/
    14381438        return NUMVERTICES;
    1439 }
    1440 /*}}}*/
    1441 void       Tria::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){/*{{{*/
    1442 
    1443         int        *doflist = NULL;
    1444         IssmDouble  value;
    1445 
    1446         /*Fetch number of nodes for this finite element*/
    1447         int numnodes = this->NumberofNodes(this->element_type);
    1448 
    1449         /*Fetch dof list and allocate solution vector*/
    1450         GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
    1451         IssmDouble* values = xNew<IssmDouble>(numnodes);
    1452 
    1453         /*Get inputs*/
    1454         Input* enum_input=inputs->GetInput(enum_type); _assert_(enum_input);
    1455 
    1456         /*Ok, we have the values, fill in the array: */
    1457         GaussTria* gauss=new GaussTria();
    1458         for(int i=0;i<numnodes;i++){
    1459                 gauss->GaussNode(this->element_type,i);
    1460 
    1461                 enum_input->GetInputValue(&value,gauss);
    1462                 values[i]=value;
    1463         }
    1464 
    1465         solution->SetValues(numnodes,doflist,values,INS_VAL);
    1466 
    1467         /*Free ressources:*/
    1468         xDelete<int>(doflist);
    1469         xDelete<IssmDouble>(values);
    1470         delete gauss;
    14711439}
    14721440/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r21872 r21886  
    8383                int         GetNumberOfNodes(int enum_type);
    8484                int         GetNumberOfVertices(void);
    85                 void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
    8685                void        GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data,bool onsid);
    8786                void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
Note: See TracChangeset for help on using the changeset viewer.