[16134] | 1 | Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp (revision 15626)
|
---|
| 4 | +++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp (revision 15627)
|
---|
| 5 | @@ -55,8 +55,9 @@
|
---|
| 6 | else if(isHO){
|
---|
| 7 | iomodel->Constant(&temp,FlowequationFeHOEnum);
|
---|
| 8 | switch(temp){
|
---|
| 9 | - case 0 : finiteelement = P1Enum; break;
|
---|
| 10 | - case 1 : finiteelement = P2Enum; break;
|
---|
| 11 | + case 0 : finiteelement = P1Enum; break;
|
---|
| 12 | + case 1 : finiteelement = P2Enum; break;
|
---|
| 13 | + case 2 : finiteelement = P2xP1Enum; break;
|
---|
| 14 | default: _error_("finite element "<<temp<<" not supported");
|
---|
| 15 | }
|
---|
| 16 | }
|
---|
| 17 | Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
|
---|
| 18 | ===================================================================
|
---|
| 19 | --- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp (revision 15626)
|
---|
| 20 | +++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp (revision 15627)
|
---|
| 21 | @@ -84,8 +84,9 @@
|
---|
| 22 | else if(isHO){
|
---|
| 23 | iomodel->Constant(&temp,FlowequationFeHOEnum);
|
---|
| 24 | switch(temp){
|
---|
| 25 | - case 0 : finiteelement = P1Enum; break;
|
---|
| 26 | - case 1 : finiteelement = P2Enum; break;
|
---|
| 27 | + case 0 : finiteelement = P1Enum; break;
|
---|
| 28 | + case 1 : finiteelement = P2Enum; break;
|
---|
| 29 | + case 2 : finiteelement = P2xP1Enum; break;
|
---|
| 30 | default: _error_("finite element "<<temp<<" not supported");
|
---|
| 31 | }
|
---|
| 32 | }
|
---|
| 33 | Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
|
---|
| 34 | ===================================================================
|
---|
| 35 | --- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp (revision 15626)
|
---|
| 36 | +++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp (revision 15627)
|
---|
| 37 | @@ -50,8 +50,9 @@
|
---|
| 38 | approximation = HOApproximationEnum;
|
---|
| 39 | iomodel->Constant(&temp,FlowequationFeHOEnum);
|
---|
| 40 | switch(temp){
|
---|
| 41 | - case 0 : finiteelement = P1Enum; break;
|
---|
| 42 | - case 1 : finiteelement = P2Enum; break;
|
---|
| 43 | + case 0 : finiteelement = P1Enum; break;
|
---|
| 44 | + case 1 : finiteelement = P2Enum; break;
|
---|
| 45 | + case 2 : finiteelement = P2xP1Enum; break;
|
---|
| 46 | default: _error_("finite element "<<temp<<" not supported");
|
---|
| 47 | }
|
---|
| 48 | }
|
---|
| 49 | Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
|
---|
| 50 | ===================================================================
|
---|
| 51 | --- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp (revision 15626)
|
---|
| 52 | +++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp (revision 15627)
|
---|
| 53 | @@ -42,6 +42,25 @@
|
---|
| 54 | }
|
---|
| 55 | break;
|
---|
| 56 |
|
---|
| 57 | + case P2xP1Enum:
|
---|
| 58 | + EdgesPartitioning(&my_edges,iomodel);
|
---|
| 59 | + for(i=0;i<iomodel->numberofvertices;i++){
|
---|
| 60 | + if(iomodel->my_vertices[i]){
|
---|
| 61 | + nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis,approximation));
|
---|
| 62 | + }
|
---|
| 63 | + }
|
---|
| 64 | + int numberofvertices2d;
|
---|
| 65 | + Node* node = NULL;
|
---|
| 66 | + iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
|
---|
| 67 | + /*Create all P2 nodes anyway*/
|
---|
| 68 | + for(i=0;i<iomodel->numberofedges;i++){
|
---|
| 69 | + if(my_edges[i]){
|
---|
| 70 | + node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,analysis,approximation);
|
---|
| 71 | + nodes->AddObject(node);
|
---|
| 72 | + }
|
---|
| 73 | + }
|
---|
| 74 | + break;
|
---|
| 75 | +
|
---|
| 76 | case P2Enum:
|
---|
| 77 | EdgesPartitioning(&my_edges,iomodel);
|
---|
| 78 | for(i=0;i<iomodel->numberofvertices;i++){
|
---|
| 79 | Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
|
---|
| 80 | ===================================================================
|
---|
| 81 | --- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp (revision 15626)
|
---|
| 82 | +++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp (revision 15627)
|
---|
| 83 | @@ -1624,9 +1624,10 @@
|
---|
| 84 | int PentaRef::NumberofNodes(void){
|
---|
| 85 |
|
---|
| 86 | switch(this->element_type){
|
---|
| 87 | - case P1Enum: return NUMNODESP1;
|
---|
| 88 | - case P2Enum: return NUMNODESP2;
|
---|
| 89 | - case MINIEnum: return NUMNODESP1b;
|
---|
| 90 | + case P1Enum: return NUMNODESP1;
|
---|
| 91 | + case P2Enum: return NUMNODESP2;
|
---|
| 92 | + case P2xP1Enum: return NUMNODESP2xP1;
|
---|
| 93 | + case MINIEnum: return NUMNODESP1b;
|
---|
| 94 | default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
|
---|
| 95 | }
|
---|
| 96 |
|
---|
| 97 | Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
|
---|
| 98 | ===================================================================
|
---|
| 99 | --- ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 15626)
|
---|
| 100 | +++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 15627)
|
---|
| 101 | @@ -3177,6 +3177,22 @@
|
---|
| 102 | penta_node_ids[4]=iomodel->nodecounter+iomodel->elements[6*index+4];
|
---|
| 103 | penta_node_ids[5]=iomodel->nodecounter+iomodel->elements[6*index+5];
|
---|
| 104 | break;
|
---|
| 105 | + case P2xP1Enum:
|
---|
| 106 | + numnodes = 12;
|
---|
| 107 | + penta_node_ids = xNew<int>(numnodes);
|
---|
| 108 | + penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
|
---|
| 109 | + penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
|
---|
| 110 | + penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
|
---|
| 111 | + penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
|
---|
| 112 | + penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
|
---|
| 113 | + penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
|
---|
| 114 | + penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+3]+1;
|
---|
| 115 | + penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+4]+1;
|
---|
| 116 | + penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+5]+1;
|
---|
| 117 | + penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+6]+1;
|
---|
| 118 | + penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+7]+1;
|
---|
| 119 | + penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[9*index+8]+1;
|
---|
| 120 | + break;
|
---|
| 121 | case P2Enum:
|
---|
| 122 | numnodes = 15;
|
---|
| 123 | penta_node_ids = xNew<int>(numnodes);
|
---|
| 124 | @@ -6974,6 +6990,7 @@
|
---|
| 125 | xDelete<IssmDouble>(D);
|
---|
| 126 | xDelete<IssmDouble>(Bprime);
|
---|
| 127 | xDelete<IssmDouble>(B);
|
---|
| 128 | + if(id==1) Ke->Echo();
|
---|
| 129 | return Ke;
|
---|
| 130 | }
|
---|
| 131 | /*}}}*/
|
---|
| 132 | Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
|
---|
| 133 | ===================================================================
|
---|
| 134 | --- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp (revision 15626)
|
---|
| 135 | +++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp (revision 15627)
|
---|
| 136 | @@ -414,6 +414,24 @@
|
---|
| 137 | default: _error_("node index should be in [0 5]");
|
---|
| 138 | }
|
---|
| 139 | break;
|
---|
| 140 | + case 12: //P2xP1 Lagrange element
|
---|
| 141 | + switch(iv){
|
---|
| 142 | + case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
|
---|
| 143 | + case 1: coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
|
---|
| 144 | + case 2: coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
|
---|
| 145 | + case 3: coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
|
---|
| 146 | + case 4: coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
|
---|
| 147 | + case 5: coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
|
---|
| 148 | +
|
---|
| 149 | + case 6: coord1=0.; coord2=.5; coord3=.5; coord4=-1.;break;
|
---|
| 150 | + case 7: coord1=.5; coord2=0.; coord3=.5; coord4=-1.;break;
|
---|
| 151 | + case 8: coord1=.5; coord2=.5; coord3=0.; coord4=-1.;break;
|
---|
| 152 | + case 9: coord1=0.; coord2=.5; coord3=.5; coord4=+1.;break;
|
---|
| 153 | + case 10: coord1=.5; coord2=0.; coord3=.5; coord4=+1.;break;
|
---|
| 154 | + case 11: coord1=.5; coord2=.5; coord3=0.; coord4=+1.;break;
|
---|
| 155 | + default: _error_("node index should be in [0 5]");
|
---|
| 156 | + }
|
---|
| 157 | + break;
|
---|
| 158 | case 15: //P2 Lagrange element
|
---|
| 159 | switch(iv){
|
---|
| 160 | case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
|
---|
| 161 | Index: ../trunk-jpl/src/m/classes/flowequation.m
|
---|
| 162 | ===================================================================
|
---|
| 163 | --- ../trunk-jpl/src/m/classes/flowequation.m (revision 15626)
|
---|
| 164 | +++ ../trunk-jpl/src/m/classes/flowequation.m (revision 15627)
|
---|
| 165 | @@ -79,7 +79,7 @@
|
---|
| 166 | md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
|
---|
| 167 | md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
|
---|
| 168 | md = checkfield(md,'flowequation.fe_SSA','numel',[1],'values',[0 1]);
|
---|
| 169 | - md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1]);
|
---|
| 170 | + md = checkfield(md,'flowequation.fe_HO','numel',[1],'values',[0 1 2]);
|
---|
| 171 | md = checkfield(md,'flowequation.fe_FS','numel',[1],'values',[0]);
|
---|
| 172 | md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
|
---|
| 173 | md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
|
---|