source: issm/oecreview/Archive/21724-22754/ISSM-22074-22075.diff@ 22755

Last change on this file since 22755 was 22755, checked in by Mathieu Morlighem, 7 years ago

CHG: added 21724-22754

File size: 12.8 KB
RevLine 
[22755]1Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
2===================================================================
3--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 22074)
4+++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h (revision 22075)
5@@ -1066,6 +1066,7 @@
6 P2xP1Enum,
7 P1xP2Enum,
8 P1xP3Enum,
9+ P1xP4Enum,
10 P2xP4Enum,
11 P1P1Enum,
12 P1P1GLSEnum,
13Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
14===================================================================
15--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 22074)
16+++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp (revision 22075)
17@@ -1021,6 +1021,7 @@
18 case P2xP1Enum : return "P2xP1";
19 case P1xP2Enum : return "P1xP2";
20 case P1xP3Enum : return "P1xP3";
21+ case P1xP4Enum : return "P1xP4";
22 case P2xP4Enum : return "P2xP4";
23 case P1P1Enum : return "P1P1";
24 case P1P1GLSEnum : return "P1P1GLS";
25Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
26===================================================================
27--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 22074)
28+++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp (revision 22075)
29@@ -1045,6 +1045,7 @@
30 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
31 else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
32 else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
33+ else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
34 else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
35 else if (strcmp(name,"P1P1")==0) return P1P1Enum;
36 else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
37Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
38===================================================================
39--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp (revision 22074)
40+++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp (revision 22075)
41@@ -21,6 +21,7 @@
42 #define NUMNODESP1b 7
43 #define NUMNODESP1xP2 9
44 #define NUMNODESP1xP3 12
45+#define NUMNODESP1xP4 15
46 #define NUMNODESP2xP1 12
47 #define NUMNODESP2 18
48 #define NUMNODESP2b 19
49@@ -81,6 +82,13 @@
50 indices[1] = 1;
51 indices[2] = 2;
52 break;
53+ case P1xP4Enum:
54+ numindices = 3;
55+ indices = xNew<int>(numindices);
56+ indices[0] = 0;
57+ indices[1] = 1;
58+ indices[2] = 2;
59+ break;
60 case P2Enum:
61 numindices = 6;
62 indices = xNew<int>(numindices);
63@@ -422,7 +430,7 @@
64 basis[ 3]=(9.)/(16.)*gauss->coord1*(zeta-1./3.)*(zeta+1./3.)*(zeta+1.);
65 basis[ 4]=(9.)/(16.)*gauss->coord2*(zeta-1./3.)*(zeta+1./3.)*(zeta+1.);
66 basis[ 5]=(9.)/(16.)*gauss->coord3*(zeta-1./3.)*(zeta+1./3.)*(zeta+1.);
67- /*quarter-sides of quads*/
68+ /*third-sides of quads*/
69 basis[ 6]=(27.)/(16.)*gauss->coord1*(zeta-1)*(zeta-1./3.)*(zeta+1.);
70 basis[ 7]=(27.)/(16.)*gauss->coord2*(zeta-1)*(zeta-1./3.)*(zeta+1.);
71 basis[ 8]=(27.)/(16.)*gauss->coord3*(zeta-1)*(zeta-1./3.)*(zeta+1.);
72@@ -430,6 +438,26 @@
73 basis[10]=-(27.)/(16.)*gauss->coord2*(zeta-1)*(zeta+1./3.)*(zeta+1.);
74 basis[11]=-(27.)/(16.)*gauss->coord3*(zeta-1)*(zeta+1./3.)*(zeta+1.);
75 return;
76+ case P1xP4Enum :
77+ /*Corner nodes*/
78+ basis[ 0]=gauss->coord1*(2./3.)*(zeta-1.)*(zeta-0.5 )*(zeta)*(zeta+0.5);
79+ basis[ 1]=gauss->coord2*(2./3.)*(zeta-1.)*(zeta-0.5 )*(zeta)*(zeta+0.5);
80+ basis[ 2]=gauss->coord3*(2./3.)*(zeta-1.)*(zeta-0.5 )*(zeta)*(zeta+0.5);
81+ basis[ 3]=gauss->coord1*(2./3.)*(zeta-0.5)*(zeta)*(zeta+0.5)*(zeta +1.);
82+ basis[ 4]=gauss->coord2*(2./3.)*(zeta-0.5)*(zeta)*(zeta+0.5)*(zeta +1.);
83+ basis[ 5]=gauss->coord3*(2./3.)*(zeta-0.5)*(zeta)*(zeta+0.5)*(zeta +1.);
84+ /*mid-sides of quads (center of vertical edges)*/
85+ basis[ 6]=gauss->coord1*4.*(zeta-1.)*(zeta-0.5)*(zeta+0.5)*(zeta+1.);
86+ basis[ 7]=gauss->coord2*4.*(zeta-1.)*(zeta-0.5)*(zeta+0.5)*(zeta+1.);
87+ basis[ 8]=gauss->coord3*4.*(zeta-1.)*(zeta-0.5)*(zeta+0.5)*(zeta+1.);
88+ /*quarter-sides of quads (-0.5 and +0.5 of vertical edges)*/
89+ basis[ 9]=gauss->coord1*(-8./3.)*(zeta-1.0)*(zeta-0.5)*zeta*(zeta+1.);
90+ basis[10]=gauss->coord2*(-8./3.)*(zeta-1.0)*(zeta-0.5)*zeta*(zeta+1.);
91+ basis[11]=gauss->coord3*(-8./3.)*(zeta-1.0)*(zeta-0.5)*zeta*(zeta+1.);
92+ basis[12]=gauss->coord1*(-8./3.)*(zeta-1.0)*zeta*(zeta+0.5)*(zeta+1.);
93+ basis[13]=gauss->coord2*(-8./3.)*(zeta-1.0)*zeta*(zeta+0.5)*(zeta+1.);
94+ basis[14]=gauss->coord3*(-8./3.)*(zeta-1.0)*zeta*(zeta+0.5)*(zeta+1.);
95+ return;
96 default:
97 _error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
98 }
99@@ -963,6 +991,71 @@
100 dbasis[NUMNODESP1xP3*1+11] = -((9.*SQRT3)/16.) *(zeta-1.)*(zeta+1./3.)*(zeta+1);
101 dbasis[NUMNODESP1xP3*2+11] = -gauss->coord3 *(27./16.)*( 2.* zeta *( zeta + (1./3.)) + ( zeta - 1. )*( zeta + 1. ));
102 return;
103+ case P1xP4Enum :
104+ /*Nodal function 1*/
105+ dbasis[NUMNODESP1xP4*0+0 ] = -0.5*(2./3.) *(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5);
106+ dbasis[NUMNODESP1xP4*1+0 ] = -SQRT3/6.*(2./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5);
107+ dbasis[NUMNODESP1xP4*2+0 ] = gauss->coord1 * 2./3.*( (2.*zeta-1)*(zeta -0.5)*(zeta +0.5) + 2.* zeta *zeta *(zeta -1.));
108+ /*Nodal function 2*/
109+ dbasis[NUMNODESP1xP4*0+1 ] = +0.5*(2./3.) *(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5);
110+ dbasis[NUMNODESP1xP4*1+1 ] = -SQRT3/6.*(2./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta+0.5);
111+ dbasis[NUMNODESP1xP4*2+1 ] = gauss->coord2* 2./3.* ((2.*zeta-1.)*(zeta -0.5)*(zeta +0.5) + 2. * zeta *zeta*(zeta -1.));
112+ /*Nodal function 3*/
113+ dbasis[NUMNODESP1xP4*0+2 ] = 0. ;
114+ dbasis[NUMNODESP1xP4*1+2 ] = SQRT3/3.*(2./3.)*(zeta -1.)*(zeta-0.5)*(zeta)*(zeta+0.5);
115+ dbasis[NUMNODESP1xP4*2+2 ] = gauss->coord3* 2./3.*( (2.*zeta-1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta -1.));
116+ /*Nodal function 4*/
117+ dbasis[NUMNODESP1xP4*0+3 ] = -0.5 *(2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. );
118+ dbasis[NUMNODESP1xP4*1+3 ] = -SQRT3/6.*(2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. );
119+ dbasis[NUMNODESP1xP4*2+3 ] = gauss->coord1* 2./3.*( (2.*zeta+1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta +1.));
120+ /*Nodal function 5*/
121+ dbasis[NUMNODESP1xP4*0+4 ] = +0.5 * (2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. );
122+ dbasis[NUMNODESP1xP4*1+4 ] = -SQRT3/6.*(2./3.)*(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. );
123+ dbasis[NUMNODESP1xP4*2+4 ] = gauss->coord2 * 2./3.*( (2.*zeta+1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta +1.));
124+ /*Nodal function 6*/
125+ dbasis[NUMNODESP1xP4*0+5 ] = 0. ;
126+ dbasis[NUMNODESP1xP4*1+5 ] = SQRT3/3.*(2./3.) *(zeta - 0.5)*(zeta)*(zeta+0.5)*(zeta +1. );
127+ dbasis[NUMNODESP1xP4*2+5 ] = gauss->coord3 * 2./3.*( (2.*zeta+1.)*(zeta -0.5)*(zeta +0.5) + 2.*zeta *zeta*(zeta +1));
128+ /*Nodal function 7*/
129+ dbasis[NUMNODESP1xP4*0+6 ] = -0.5 * 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ;
130+ dbasis[NUMNODESP1xP4*1+6 ] = -SQRT3/6.* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1.) ;
131+ dbasis[NUMNODESP1xP4*2+6 ] = gauss->coord1* 4.*( 4.*zeta *zeta*zeta - (5./2.)*zeta );
132+ /*Nodal function 8*/
133+ dbasis[NUMNODESP1xP4*0+7 ] = +0.5* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ;
134+ dbasis[NUMNODESP1xP4*1+7 ] = -SQRT3/6.* 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ;
135+ dbasis[NUMNODESP1xP4*2+7 ] = gauss->coord2* 4.*( 4.*zeta *zeta*zeta - (5./2.)*zeta );
136+
137+ /*Nodal function 9*/
138+ dbasis[NUMNODESP1xP4*0+8 ] = 0. ;
139+ dbasis[NUMNODESP1xP4*1+8 ] = SQRT3/3. * 4.*(zeta - 1.)*(zeta - 0.5)*(zeta+0.5)*(zeta +1. ) ;
140+ dbasis[NUMNODESP1xP4*2+8 ] = gauss->coord3* 4.*( 4.*zeta *zeta*zeta - (5./2.)*zeta );
141+
142+ /*Nodal function 10*/
143+ dbasis[NUMNODESP1xP4*0+9 ] = -0.5* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ;
144+ dbasis[NUMNODESP1xP4*1+9 ] = -SQRT3/3.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ;
145+ dbasis[NUMNODESP1xP4*2+9 ] = gauss->coord1* (-8./3.)*((2.*zeta -1.)*(zeta-0.5)*(zeta +1.) +zeta*(zeta -1.)*( 2.*zeta + 0.5));
146+ /*Nodal function 11*/
147+ dbasis[NUMNODESP1xP4*0+10] = +0.5* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ;
148+ dbasis[NUMNODESP1xP4*1+10] = -SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ;
149+ dbasis[NUMNODESP1xP4*2+10] = gauss->coord2* (-8./3.)*((2.*zeta -1.)*(zeta-0.5)*(zeta +1.) +zeta *(zeta -1.)*( 2.*zeta + 0.5));
150+ /*Nodal function 12*/
151+ dbasis[NUMNODESP1xP4*0+11] = 0. ;
152+ dbasis[NUMNODESP1xP4*1+11] = SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta - 0.5)*(zeta)*(zeta +1. ) ;
153+ dbasis[NUMNODESP1xP4*2+11] = gauss->coord3* (-8./3.)*((2.*zeta-1.)*(zeta-0.5)*(zeta +1.) +zeta *(zeta -1.)*( 2.*zeta + 0.5));
154+ /*Nodal function 13*/
155+ dbasis[NUMNODESP1xP4*0+12] = -0.5* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ;
156+ dbasis[NUMNODESP1xP4*1+12] = -SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ;
157+ dbasis[NUMNODESP1xP4*2+12] = gauss->coord1* (-8./3.)*((2.*zeta -1. ) *(zeta+0.5)* (zeta +1.) + zeta* (zeta -1.)*( 2.*zeta + 3./2.));
158+ /*Nodal function 14*/
159+ dbasis[NUMNODESP1xP4*0+13] = +0.5* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ;
160+ dbasis[NUMNODESP1xP4*1+13] = -SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta)*(zeta+0.5)*(zeta +1. ) ;
161+ dbasis[NUMNODESP1xP4*2+13] = gauss->coord2* (-8./3.)*((2.*zeta -1. )*(zeta+0.5)*(zeta +1.) + zeta*(zeta -1.)*( 2.*zeta + 3./2.));
162+ /*Nodal function 15*/
163+ dbasis[NUMNODESP1xP4*0+14] = 0 ;
164+ dbasis[NUMNODESP1xP4*1+14] = SQRT3/6.* (-8./3.)*(zeta - 1.)*(zeta + 0.5)*(zeta)*(zeta +1. ) ;
165+ dbasis[NUMNODESP1xP4*2+14] = gauss->coord3* (-8./3.)*((2. *zeta -1. )*(zeta+0.5)*(zeta +1.) + zeta*(zeta -1.)*( 2.*zeta + 3./2.));
166+
167+ return;
168 default:
169 _error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet");
170 }
171@@ -1074,6 +1167,13 @@
172 indices[1*2 + 0] = 1; indices[1*2 + 1] = 7;
173 indices[2*2 + 0] = 2; indices[2*2 + 1] = 8;
174 break;
175+ case P1xP4Enum:
176+ numseg = 3;
177+ indices = xNew<int>(numseg*2);
178+ indices[0*2 + 0] = 0; indices[0*2 + 1] = 6;
179+ indices[1*2 + 0] = 1; indices[1*2 + 1] = 7;
180+ indices[2*2 + 0] = 2; indices[2*2 + 1] = 8;
181+ break;
182 case P2Enum:
183 numseg = 6;
184 indices = xNew<int>(numseg*2);
185@@ -1129,6 +1229,7 @@
186 case P1xP2Enum: return NUMNODESP1xP2;
187 case P2xP4Enum: return NUMNODESP2xP4;
188 case P1xP3Enum: return NUMNODESP1xP3;
189+ case P1xP4Enum: return NUMNODESP1xP4;
190 case P1P1Enum: return NUMNODESP1*2;
191 case P1P1GLSEnum: return NUMNODESP1*2;
192 case MINIcondensedEnum: return NUMNODESP1b+NUMNODESP1;
193@@ -1195,6 +1296,7 @@
194 break;
195 case P1xP2Enum:
196 case P1xP3Enum:
197+ case P1xP4Enum:
198 numindices = 3;
199 indices = xNew<int>(numindices);
200 indices[0] = 3;
201Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
202===================================================================
203--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp (revision 22074)
204+++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp (revision 22075)
205@@ -600,6 +600,29 @@
206 default: _error_("node index should be in [0 11]");
207 }
208 break;
209+ case P1xP4Enum:
210+ switch(iv){
211+ case 0 : coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
212+ case 1 : coord1=0.; coord2=1.; coord3=0.; coord4=-1.; break;
213+ case 2 : coord1=0.; coord2=0.; coord3=1.; coord4=-1.; break;
214+ case 3 : coord1=1.; coord2=0.; coord3=0.; coord4=+1.; break;
215+ case 4 : coord1=0.; coord2=1.; coord3=0.; coord4=+1.; break;
216+ case 5 : coord1=0.; coord2=0.; coord3=1.; coord4=+1.; break;
217+
218+ case 6 : coord1=1.; coord2=0.; coord3=0.; coord4=0.; break;
219+ case 7 : coord1=0.; coord2=1.; coord3=0.; coord4=0.; break;
220+ case 8 : coord1=0.; coord2=0.; coord3=1.; coord4=0.; break;
221+
222+ case 9 : coord1=1.; coord2=0.; coord3=0.; coord4=-0.5; break;
223+ case 10: coord1=0.; coord2=1.; coord3=0.; coord4=-0.5; break;
224+ case 11: coord1=0.; coord2=0.; coord3=1.; coord4=-0.5; break;
225+
226+ case 12: coord1=1.; coord2=0.; coord3=0.; coord4=+0.5; break;
227+ case 13: coord1=0.; coord2=1.; coord3=0.; coord4=+0.5; break;
228+ case 14: coord1=0.; coord2=0.; coord3=1.; coord4=+0.5; break;
229+ default: _error_("node index should be in [0 14]");
230+ }
231+ break;
232 case P2xP1Enum:
233 switch(iv){
234 case 0: coord1=1.; coord2=0.; coord3=0.; coord4=-1.; break;
235Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
236===================================================================
237--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp (revision 22074)
238+++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp (revision 22075)
239@@ -253,6 +253,18 @@
240 for(int i=2;i<9;i+=3) this->values[i]=this->values[11];
241 }
242 break;
243+ case P1xP4Enum:
244+ if(start==-1){
245+ for(int i=0+3;i<15;i+=3) this->values[i]=this->values[0];
246+ for(int i=1+3;i<15;i+=3) this->values[i]=this->values[1];
247+ for(int i=2+3;i<15;i+=3) this->values[i]=this->values[2];
248+ }
249+ else{
250+ for(int i=0;i<12;i+=3) this->values[i]=this->values[12];
251+ for(int i=1;i<12;i+=3) this->values[i]=this->values[13];
252+ for(int i=2;i<12;i+=3) this->values[i]=this->values[14];
253+ }
254+ break;
255 default:
256 _error_("not supported yet for type "<<EnumToStringx(this->interpolation_type));
257 }
Note: See TracBrowser for help on using the repository browser.