Changeset 15439
- Timestamp:
- 07/05/13 13:23:01 (12 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r15438 r15439 947 947 /*FUNCTION Penta::GetConnectivityList {{{*/ 948 948 void Penta::GetConnectivityList(int* connectivity){ 949 for(int i=0;i<NUMVERTICES;i++) connectivity[i]= nodes[i]->GetConnectivity();949 for(int i=0;i<NUMVERTICES;i++) connectivity[i]=vertices[i]->Connectivity(); 950 950 } 951 951 /*}}}*/ … … 6308 6308 6309 6309 /*Find connectivity for the two nodes*/ 6310 connectivity[0]= nodes[i]->GetConnectivity();6311 connectivity[1]= nodes[i+3]->GetConnectivity();6310 connectivity[0]=vertices[i]->Connectivity(); 6311 connectivity[1]=vertices[i+3]->Connectivity(); 6312 6312 one0=1/(IssmDouble)connectivity[0]; 6313 6313 one1=1/(IssmDouble)connectivity[1]; … … 7574 7574 } 7575 7575 7576 connectivity[0]= nodes[node0]->GetConnectivity();7577 connectivity[1]= nodes[node1]->GetConnectivity();7576 connectivity[0]=vertices[node0]->Connectivity(); 7577 connectivity[1]=vertices[node1]->Connectivity(); 7578 7578 7579 7579 /*Loop on the Gauss points: */ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r15433 r15439 690 690 void Tria::GetDofList(int** pdoflist, int approximation_enum,int setenum){ 691 691 692 int i,j; 692 /*Fetch number of nodes and dof for this finite element*/ 693 int numnodes = this->NumberofNodes(); 694 695 /*First, figure out size of doflist and create it: */ 696 int numberofdofs=0; 697 for(int i=0;i<numnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum); 698 699 /*Allocate output*/ 700 int* doflist=xNew<int>(numberofdofs); 701 702 /*Populate: */ 693 703 int count=0; 694 int numberofdofs=0; 695 int* doflist=NULL; 696 697 /*First, figure out size of doflist and create it: */ 698 for(i=0;i<3;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum); 699 doflist=xNew<int>(numberofdofs); 700 701 /*Populate: */ 702 count=0; 703 for(i=0;i<3;i++){ 704 for(int i=0;i<numnodes;i++){ 704 705 nodes[i]->GetDofList(doflist+count,approximation_enum,setenum); 705 706 count+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum); … … 906 907 case P1DGEnum: 907 908 return 3; 909 case P2Enum: 910 return 6; 908 911 default: 909 912 _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet"); … … 1044 1047 /*FUNCTION Tria::GetConnectivityList {{{*/ 1045 1048 void Tria::GetConnectivityList(int* connectivity){ 1046 for(int i=0;i<NUMVERTICES;i++) connectivity[i]= nodes[i]->GetConnectivity();1049 for(int i=0;i<NUMVERTICES;i++) connectivity[i]=vertices[i]->Connectivity(); 1047 1050 } 1048 1051 /*}}}*/ … … 2182 2185 2183 2186 /*Intermediaries*/ 2184 int i ,j; 2185 int tria_node_ids[3]; 2187 int i,j; 2186 2188 int tria_vertex_ids[3]; 2187 2189 int tria_type; … … 2189 2191 IssmDouble yts; 2190 2192 int progstabilization,balancestabilization; 2193 int fe_ssa; 2191 2194 bool dakota_analysis; 2195 int numnodes; 2196 int* tria_node_ids = NULL; 2192 2197 2193 2198 /*Checks if debuging*/ … … 2200 2205 iomodel->Constant(&progstabilization,PrognosticStabilizationEnum); 2201 2206 iomodel->Constant(&balancestabilization,BalancethicknessStabilizationEnum); 2207 iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum); 2202 2208 iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum); 2203 2209 2204 2210 /*Recover element type*/ 2205 2211 if ((analysis_type==PrognosticAnalysisEnum && progstabilization==3) || (analysis_type==BalancethicknessAnalysisEnum && balancestabilization==3)){ 2206 /*P1 Discontinuous Galerkin*/2207 2212 tria_type=P1DGEnum; 2208 2213 } 2214 else if(analysis_type==DiagnosticHorizAnalysisEnum && fe_ssa==1){ 2215 tria_type=P2Enum; 2216 } 2209 2217 else{ 2210 /*P1 Continuous Galerkin*/2211 2218 tria_type=P1Enum; 2212 2219 } … … 2219 2226 2220 2227 /*Recover nodes ids needed to initialize the node hook.*/ 2221 if (tria_type==P1DGEnum){ 2222 /*Discontinuous Galerkin*/ 2223 tria_node_ids[0]=iomodel->nodecounter+3*index+1; 2224 tria_node_ids[1]=iomodel->nodecounter+3*index+2; 2225 tria_node_ids[2]=iomodel->nodecounter+3*index+3; 2226 } 2227 else{ 2228 /*Continuous Galerkin*/ 2229 for(i=0;i<3;i++){ 2230 tria_node_ids[i]=iomodel->nodecounter+reCast<int,IssmDouble>(*(iomodel->elements+3*index+i)); //ids for vertices are in the elements array from Matlab 2231 } 2228 switch(tria_type){ 2229 case P1Enum: 2230 numnodes = 3; 2231 tria_node_ids = xNew<int>(numnodes); 2232 tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0]; 2233 tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1]; 2234 tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2]; 2235 break; 2236 case P1DGEnum: 2237 numnodes = 3; 2238 tria_node_ids = xNew<int>(numnodes); 2239 tria_node_ids[0]=iomodel->nodecounter+3*index+1; 2240 tria_node_ids[1]=iomodel->nodecounter+3*index+2; 2241 tria_node_ids[2]=iomodel->nodecounter+3*index+3; 2242 break; 2243 case P2Enum: 2244 numnodes = 6; 2245 tria_node_ids = xNew<int>(numnodes); 2246 tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0]; 2247 tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1]; 2248 tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2]; 2249 tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]; 2250 tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]; 2251 tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]; 2252 break; 2253 default: 2254 _error_("Finite element "<<EnumToStringx(tria_type)<<" not supported yet"); 2232 2255 } 2233 2256 2234 2257 /*hooks: */ 2235 this->SetHookNodes(tria_node_ids,3,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type 2258 this->SetHookNodes(tria_node_ids,numnodes,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type 2259 xDelete<int>(tria_node_ids); 2236 2260 2237 2261 /*Fill with IoModel*/ … … 2905 2929 /*Create Element matrix*/ 2906 2930 for(i=0;i<NUMVERTICES;i++){ 2907 connectivity= nodes[i]->GetConnectivity();2931 connectivity=vertices[i]->Connectivity(); 2908 2932 Ke->values[(2*i)*numdof +(2*i) ]=1/(IssmDouble)connectivity; 2909 2933 Ke->values[(2*i+1)*numdof+(2*i+1)]=1/(IssmDouble)connectivity; … … 3050 3074 gauss->GaussVertex(i); 3051 3075 3052 connectivity= nodes[i]->GetConnectivity();3076 connectivity=vertices[i]->Connectivity(); 3053 3077 3054 3078 thickness_input->GetInputValue(&thickness,gauss); … … 5902 5926 gauss->GaussVertex(iv); 5903 5927 5904 connectivity = IssmDouble( nodes[iv]->GetConnectivity());5928 connectivity = IssmDouble(vertices[iv]->Connectivity()); 5905 5929 residual_input->GetInputValue(&residual,gauss); 5906 5930 pe->values[iv]+=residual/connectivity; -
issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp
r15326 r15439 43 43 void TriaRef::SetElementType(int type,int type_counter){ 44 44 45 _assert_(type==P1Enum || type==P1DGEnum );45 _assert_(type==P1Enum || type==P1DGEnum || type==P2Enum); 46 46 47 47 /*initialize element type*/ -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r15429 r15439 288 288 /*configure elements, loads and nodes, for this new analysis: */ 289 289 this->elements->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters); 290 this->nodes->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters);291 290 this->loads->SetCurrentConfiguration(elements, loads, nodes,vertices, materials,parameters); 292 291 -
issm/trunk-jpl/src/c/classes/Hook.cpp
r15104 r15439 63 63 /*FUNCTION Hook::Echo{{{*/ 64 64 void Hook::Echo(void){ 65 65 _assert_(this); 66 66 int i; 67 67 if (num){ … … 69 69 _printf_(" num=" << this->num << "\n"); 70 70 _printf_(" ids: "); 71 for 71 for(i=0;i<this->num;i++) _printf_(this->ids[i] << " "); 72 72 _printf_("\n"); 73 73 _printf_(" offsets: "); -
issm/trunk-jpl/src/c/classes/Node.cpp
r15423 r15439 20 20 this->approximation=0; 21 21 this->inputs=NULL; 22 this->hvertex=NULL;23 22 } 24 23 /*}}}*/ … … 42 41 DistributeNumDofs(&this->indexing,analysis_type,iomodel->Data(FlowequationVertexEquationEnum)+io_index); //number of dofs per node 43 42 gsize=this->indexing.gsize; 44 45 /*Hooks*/46 this->hvertex=new Hook(&vertex_id,1); //node id is the same as the vertex id, continuous galerkin!47 43 48 44 if (analysis_type==DiagnosticHorizAnalysisEnum) … … 136 132 Node::~Node(){ 137 133 delete inputs; 138 delete hvertex;139 134 return; 140 135 } … … 150 145 _printf_(" analysis_type: " << EnumToStringx(analysis_type) << "\n"); 151 146 indexing.Echo(); 152 _printf_(" hvertex: not displayed\n");153 147 _printf_(" inputs: " << inputs << "\n"); 154 148 … … 163 157 _printf_(" analysis_type: " << EnumToStringx(analysis_type) << "\n"); 164 158 indexing.DeepEcho(); 165 _printf_("Vertex:\n");166 hvertex->DeepEcho();167 159 _printf_(" inputs\n"); 168 160 … … 181 173 182 174 /*Node management:*/ 183 /*FUNCTION Node::Configure {{{*/184 void Node::Configure(DataSet* nodesin,Vertices* verticesin){185 186 /*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective187 * datasets, using internal ids and off_sets hidden in hooks: */188 hvertex->configure(verticesin);189 190 }/*}}}*/191 /*FUNCTION Node::SetCurrentConfiguration {{{*/192 void Node::SetCurrentConfiguration(DataSet* nodesin,Vertices* verticesin){193 194 }/*}}}*/195 175 /*FUNCTION Node::GetDof {{{*/ 196 176 int Node::GetDof(int dofindex,int setenum){ … … 515 495 516 496 return approximation; 517 }518 /*}}}*/519 /*FUNCTION Node::GetConnectivity {{{*/520 int Node::GetConnectivity(){521 522 Vertex* vertex=NULL;523 vertex=(Vertex*)hvertex->delivers();524 return vertex->connectivity;525 497 } 526 498 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Node.h
r15230 r15439 34 34 35 35 DofIndexing indexing; 36 Hook *hvertex;37 36 Inputs *inputs; //properties of this node 38 37 int analysis_type; … … 66 65 /*}}}*/ 67 66 /*Node numerical routines {{{*/ 68 void Configure(DataSet* nodes,Vertices* vertices);69 67 void CreateNodalConstraints(Vector<IssmDouble>* ys); 70 68 void SetCurrentConfiguration(DataSet* nodes,Vertices* vertices); … … 83 81 int GetDof(int dofindex,int setenum); 84 82 void CreateVecSets(Vector<IssmDouble>* pv_g,Vector<IssmDouble>* pv_f,Vector<IssmDouble>* pv_s); 85 int GetConnectivity();86 83 void GetDofList(int* poutdoflist,int approximation_enum,int setenum); 87 84 void GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum); -
issm/trunk-jpl/src/c/classes/Nodes.cpp
r15012 r15439 32 32 33 33 /*Numerics*/ 34 /*FUNCTION Nodes::Configure{{{*/35 void Nodes::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){36 37 vector<Object*>::iterator object;38 Node* node=NULL;39 40 for ( object=objects.begin() ; object < objects.end(); object++ ){41 42 node=dynamic_cast<Node*>(*object);43 node->Configure(nodes,vertices);44 45 }46 47 }48 /*}}}*/49 34 /*FUNCTION Nodes::DistributeDofs{{{*/ 50 35 void Nodes::DistributeDofs(int analysis_type,int setenum){ … … 340 325 } 341 326 /*}}}*/ 342 /*FUNCTION Nodes::SetCurrentConfiguration{{{*/343 void Nodes::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){344 345 vector<Object*>::iterator object;346 Node* node=NULL;347 348 for (object=objects.begin() ; object < objects.end(); object++ ){349 350 node=dynamic_cast<Node*>(*object);351 node->SetCurrentConfiguration(nodes,vertices);352 353 }354 }355 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Nodes.h
r15067 r15439 25 25 26 26 /*numerics*/ 27 void Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);28 27 void DistributeDofs(int analysis_type,int SETENUM); 29 28 void FlagClones(int analysis_type); … … 34 33 int NumberOfNodes(void); 35 34 void Ranks(int* ranks,int analysis_type); 36 void SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);37 35 38 36 }; -
issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
r15104 r15439 35 35 } 36 36 } 37 if(VerboseMProcessor()) _printf0_(" Configuring nodes...\n");38 for (i=0;i<nodes->Size();i++){39 node=(Node*)nodes->GetObjectByOffset(i);40 if(node->InAnalysis(configuration_type)){41 node->Configure(nodes,vertices);42 }43 }44 45 37 if(VerboseMProcessor()) _printf0_(" Configuring materials...\n"); 46 38 for (i=0;i<materials->Size();i++){ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementToEdgeConnectivity.cpp
r15435 r15439 27 27 int* element_edge_connectivity = xNew<int>(iomodel->numberofelements*3); /*edge1 edge2 edge3*/ 28 28 29 30 29 /*Go through all edges and create connectivity table*/ 31 30 for(int i=0;i<iomodel->numberofedges;i++){ 32 31 33 32 /*Get the two vertices of current edge*/ 34 v1 = iomodel->edges[i*4+0] ; _assert_(v1>=0 && v1<iomodel->numberofvertices);35 v2 = iomodel->edges[i*4+1] ; _assert_(v2>=0 && v2<iomodel->numberofvertices);36 e1 = iomodel->edges[i*4+2] ; _assert_(e1>=0 && e1<iomodel->numberofelements);37 e2 = iomodel->edges[i*4+3] ; _assert_(e2>=0&& e2<iomodel->numberofelements);33 v1 = iomodel->edges[i*4+0]-1; _assert_(v1>=0 && v1<iomodel->numberofvertices); 34 v2 = iomodel->edges[i*4+1]-1; _assert_(v2>=0 && v2<iomodel->numberofvertices); 35 e1 = iomodel->edges[i*4+2]-1; _assert_(e1>=0 && e1<iomodel->numberofelements); 36 e2 = iomodel->edges[i*4+3]-1; _assert_(e2>=-2 && e2<iomodel->numberofelements); 38 37 39 38 /*Process element by element*/ 40 39 for(int j=0;j<3;j++){ 41 v3 = iomodel->elements[e1*3+j] ;40 v3 = iomodel->elements[e1*3+j]-1; 42 41 if(v1!=v3 && v2!=v3){ 43 42 element_edge_connectivity[e1*3+j]=i; … … 45 44 } 46 45 } 47 for(int j=0;j<3;j++){ 48 v3 = iomodel->elements[e2*3+j]; 49 if(v1!=v3 && v2!=v3){ 50 element_edge_connectivity[e2*3+j]=i; 51 break; 46 if(e2>-1){ 47 for(int j=0;j<3;j++){ 48 v3 = iomodel->elements[e2*3+j]-1; 49 if(v1!=v3 && v2!=v3){ 50 element_edge_connectivity[e2*3+j]=i; 51 break; 52 } 52 53 } 53 54 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
r15435 r15439 14 14 bool continuous_galerkin=true; 15 15 bool isstokes,isl1l2,ismacayealpattyn; 16 int finiteelementssa; 16 17 17 18 /*Fetch parameters: */ … … 19 20 iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum); 20 21 iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum); 22 iomodel->Constant(&finiteelementssa,FlowequationFeSsaEnum); 21 23 22 24 /*Recover pointer: */ … … 48 50 } 49 51 50 if(f alse){52 if(finiteelementssa==1){ 51 53 52 54 /*Quadratic element*/ 53 55 CreateEdges(iomodel); 56 CreateElementToEdgeConnectivity(iomodel); 54 57 int element1,element2; 55 58 bool my_edge; … … 69 72 /*Add node on edge*/ 70 73 if(my_edge){ 71 nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i, iomodel->numberofvertices+i+1,i,iomodel,DiagnosticHorizAnalysisEnum));74 nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,0,iomodel,DiagnosticHorizAnalysisEnum)); 72 75 } 73 76 }
Note:
See TracChangeset
for help on using the changeset viewer.