Index: ../trunk-jpl/src/c/classes/Elements/Element.h =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Element.h (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Element.h (revision 17671) @@ -85,6 +85,8 @@ void GetNodesSidList(int* sidlist); void GetNodesLidList(int* lidlist); void GetPhi(IssmDouble* phi, IssmDouble* epsilon, IssmDouble viscosity); + void GetVectorFromInputs(Vector* vector, int name_enum); + void GetVertexPidList(int* pidlist); void GetVerticesCoordinates(IssmDouble** xyz_list); void GetVerticesSidList(int* sidlist); void GetVerticesConnectivityList(int* connectivitylist); @@ -219,7 +221,6 @@ virtual Gauss* NewGaussTop(int order)=0; virtual void InputScale(int enum_type,IssmDouble scale_factor)=0; - virtual void GetVectorFromInputs(Vector* vector, int name_enum)=0; virtual IssmDouble TimeAdapt()=0; virtual void PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0; virtual void Delta18oParameterization(void)=0; Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 17671) @@ -833,32 +833,6 @@ return this->nodes[node_number]; }/*}}}*/ -/*FUNCTION Tria::GetVertexPidList {{{*/ -void Tria::GetVertexPidList(int* doflist){ - - for(int i=0;i<3;i++) doflist[i]=vertices[i]->Pid(); - -} -/*}}}*/ -/*FUNCTION Tria::GetVectorFromInputs{{{*/ -void Tria::GetVectorFromInputs(Vector* vector,int input_enum){ - - int vertexpidlist[NUMVERTICES]; - - /*Get out if this is not an element input*/ - if(!IsInput(input_enum)) return; - - /*Prepare index list*/ - this->GetVertexPidList(&vertexpidlist[0]); - - /*Get input (either in element or material)*/ - Input* input=inputs->GetInput(input_enum); - if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in element"); - - /*We found the enum. Use its values to fill into the vector, using the vertices ids: */ - input->GetVectorFromInputs(vector,&vertexpidlist[0]); -} -/*}}}*/ /*FUNCTION Tria::GetXcoord {{{*/ IssmDouble Tria::GetXcoord(Gauss* gauss){ Index: ../trunk-jpl/src/c/classes/Elements/Tria.h =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 17671) @@ -81,7 +81,6 @@ int NumberofNodesVelocity(void); int NumberofNodesPressure(void); void GetSolutionFromInputsOneDof(Vector* solution,int enum_type); - void GetVectorFromInputs(Vector* vector, int name_enum); void GetVerticesCoordinatesBase(IssmDouble** pxyz_list); void GetVerticesCoordinatesTop(IssmDouble** pxyz_list); void InputDepthAverageAtBase(int enum_type,int average_enum_type); @@ -179,8 +178,6 @@ IssmDouble GetArea(void); void GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble* xyz_zero,IssmDouble* xyz_list,int numpoints); int GetElementType(void); - - void GetVertexPidList(int* doflist); IssmDouble GetXcoord(Gauss* gauss); IssmDouble GetYcoord(Gauss* gauss); IssmDouble GetZcoord(Gauss* gauss){_error_("not implemented");}; Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 17671) @@ -824,13 +824,6 @@ return phi; } /*}}}*/ -/*FUNCTION Penta::GetVertexPidList {{{*/ -void Penta::GetVertexPidList(int* doflist){ - - for(int i=0;i<6;i++) doflist[i]=vertices[i]->Pid(); - -} -/*}}}*/ /*FUNCTION Penta::GetElementType {{{*/ int Penta::GetElementType(){ @@ -967,25 +960,6 @@ return tau_parameter; } /*}}}*/ -/*FUNCTION Penta::GetVectorFromInputs{{{*/ -void Penta::GetVectorFromInputs(Vector* vector,int input_enum){ - - int vertexpidlist[NUMVERTICES]; - - /*Get out if this is not an element input*/ - if (!IsInput(input_enum)) return; - - /*Prepare index list*/ - this->GetVertexPidList(&vertexpidlist[0]); - - /*Get input (either in element or material)*/ - Input* input=inputs->GetInput(input_enum); - if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in element"); - - /*We found the enum. Use its values to fill into the vector, using the vertices ids: */ - input->GetVectorFromInputs(vector,&vertexpidlist[0]); -} -/*}}}*/ /*FUNCTION Penta::GetXcoord {{{*/ IssmDouble Penta::GetXcoord(Gauss* gauss){ Index: ../trunk-jpl/src/c/classes/Elements/Penta.h =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Penta.h (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Penta.h (revision 17671) @@ -79,7 +79,6 @@ IssmDouble GetXcoord(Gauss* gauss); IssmDouble GetYcoord(Gauss* gauss); IssmDouble GetZcoord(Gauss* gauss); - void GetVectorFromInputs(Vector* vector,int name_enum); void GetVerticesCoordinatesBase(IssmDouble** pxyz_list); void GetVerticesCoordinatesTop(IssmDouble** pxyz_list); @@ -177,8 +176,6 @@ void NormalTop(IssmDouble* bed_normal, IssmDouble* xyz_list); ElementMatrix* CreateBasalMassMatrix(void); void GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble* xyz_zero,IssmDouble* xyz_list,int numpoints); - - void GetVertexPidList(int* doflist); int GetElementType(void); void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype); Node* GetNode(int node_number); Index: ../trunk-jpl/src/c/classes/Elements/Tetra.cpp =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Tetra.cpp (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Tetra.cpp (revision 17671) @@ -843,8 +843,9 @@ tetra_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+2]; tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+3]; break; + case TaylorHoodEnum: numnodes = 14; - tetra_node_ids = xNew(numnodes); + tetra_node_ids = xNew(numnodes); tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0]; tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1]; tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2]; Index: ../trunk-jpl/src/c/classes/Elements/Seg.h =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Seg.h (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Seg.h (revision 17671) @@ -127,7 +127,6 @@ void GetNormalFromLSF(IssmDouble *pnormal){_error_("not implemented yet");}; void GetSolutionFromInputsOneDof(Vector* solution,int enum_type){_error_("not implemented yet");}; - void GetVectorFromInputs(Vector* vector, int name_enum){_error_("not implemented yet");}; void InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");}; void InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");}; void InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");}; Index: ../trunk-jpl/src/c/classes/Elements/Tetra.h =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Tetra.h (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Tetra.h (revision 17671) @@ -132,7 +132,6 @@ void GetNormalFromLSF(IssmDouble *pnormal){_error_("not implemented yet");}; void GetSolutionFromInputsOneDof(Vector* solution,int enum_type){_error_("not implemented yet");}; - void GetVectorFromInputs(Vector* vector, int name_enum){_error_("not implemented yet");}; void InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");}; void InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");}; void InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");}; Index: ../trunk-jpl/src/c/classes/Elements/Element.cpp =================================================================== --- ../trunk-jpl/src/c/classes/Elements/Element.cpp (revision 17670) +++ ../trunk-jpl/src/c/classes/Elements/Element.cpp (revision 17671) @@ -527,6 +527,31 @@ } } /*}}}*/ +void Element::GetVectorFromInputs(Vector* vector,int input_enum){/*{{{*/ + + /*Fetch number vertices for this element and allocate arrays*/ + int numvertices = this->GetNumberOfVertices(); + int* vertexpidlist = xNew(numvertices); + IssmDouble* values = xNew(numvertices); + + /*Fill in values*/ + this->GetVertexPidList(vertexpidlist); + this->GetInputListOnNodesVelocity(values,input_enum); + vector->SetValues(numvertices,vertexpidlist,values,INS_VAL); + + /*Clean up*/ + xDelete(vertexpidlist); + xDelete(values); + +} +/*}}}*/ +void Element::GetVertexPidList(int* pidlist){/*{{{*/ + + int numvertices = this->GetNumberOfVertices(); + for(int i=0;iPid(); + +} +/*}}}*/ void Element::GetVerticesCoordinates(IssmDouble** pxyz_list){/*{{{*/ int numvertices = this->GetNumberOfVertices();