Ignore:
Timestamp:
11/04/11 16:41:35 (13 years ago)
Author:
Mathieu Morlighem
Message:

Working on better friction for FS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/PentaRef.cpp

    r10135 r10480  
    651651}
    652652/*}}}*/
     653/*FUNCTION PentaRef::GetLStokes2{{{1*/
     654void PentaRef::GetLStokes2(double* LStokes, GaussPenta* gauss){
     655        /*
     656         * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof.
     657         * For node i, Li can be expressed in the actual coordinate system
     658         * by:
     659         *       Li=[ h 0 0 0]
     660         *                    [ 0 h 0 0]
     661         *                    [ 0 0 h h]
     662         *                    [ 0 0 0 0]
     663         * where h is the interpolation function for node i.
     664         */
     665
     666        int i;
     667        int num_dof=4;
     668
     669        double l1l2l3[NUMNODESP1_2d];
     670
     671
     672        /*Get l1l2l3 in actual coordinate system: */
     673        l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
     674        l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
     675        l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
     676
     677        /*Build LStokes: */
     678        for (i=0;i<3;i++){
     679                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
     680                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0.;
     681                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0.;
     682                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0.;
     683
     684                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+0)=0.;
     685                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
     686                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0.;
     687                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0.;
     688
     689                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+0)=0.;
     690                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0.;
     691                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=l1l2l3[i];
     692                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0.;
     693
     694                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+0)=0.;
     695                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=0.;
     696                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=l1l2l3[i];
     697                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=0.;
     698        }
     699}
     700/*}}}*/
     701/*FUNCTION PentaRef::GetLStokes3{{{1*/
     702void PentaRef::GetLStokes3(double* LStokes, GaussPenta* gauss){
     703        /*
     704         * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof.
     705         * For node i, Li can be expressed in the actual coordinate system
     706         * by:
     707         *       Li=[ h 0 ]
     708         *                    [ 0 h ]
     709         *                    [ 0 0 ]
     710         *                    [ 0 0 ]
     711         * where h is the interpolation function for node i.
     712         */
     713
     714        int i;
     715        int num_dof=4;
     716
     717        double l1l2l3[NUMNODESP1_2d];
     718
     719
     720        /*Get l1l2l3 in actual coordinate system: */
     721        l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
     722        l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
     723        l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
     724
     725        /*Build LStokes: */
     726        for (i=0;i<3;i++){
     727                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
     728                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0.;
     729                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0.;
     730                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0.;
     731
     732                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+0)=0.;
     733                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
     734                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0.;
     735                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0.;
     736        }
     737}
     738/*}}}*/
     739/*FUNCTION PentaRef::GetLprimeStokes2{{{1*/
     740void PentaRef::GetLprimeStokes2(double* LStokes,double* xyz_list,GaussPenta* gauss){
     741        /*
     742         * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof.
     743         * For node i, Li can be expressed in the actual coordinate system
     744         * by:
     745         *       Li=[ h 0 0 0]
     746         *                    [ 0 h 0 0]
     747         *                    [ 0 0 dh\dz 0]
     748         *                    [ 0 0 0 h]
     749         * where h is the interpolation function for node i.
     750         */
     751
     752        int i;
     753        int num_dof=4;
     754
     755        double l1l2l3[NUMNODESP1_2d];
     756        double dh1dh6[3][NUMNODESP1];
     757
     758
     759        /*Get l1l2l3 in actual coordinate system: */
     760        l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
     761        l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
     762        l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
     763
     764        GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list,gauss);
     765
     766        /*Build LStokes: */
     767        for (i=0;i<3;i++){
     768                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
     769                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0.;
     770                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0.;
     771                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0.;
     772
     773                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+0)=0.;
     774                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
     775                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0.;
     776                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0.;
     777
     778                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+0)=0.;
     779                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0.;
     780                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=dh1dh6[2][i];
     781                *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0.;
     782
     783                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+0)=0.;
     784                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=0.;
     785                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=0.;
     786                *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=l1l2l3[i];
     787        }
     788}
     789/*}}}*/
    653790/*FUNCTION PentaRef::GetLprimeStokes {{{1*/
    654791void PentaRef::GetLprimeStokes(double* LprimeStokes, double* xyz_list, GaussPenta* gauss){
     
    658795         * For node i, Lpi can be expressed in the actual coordinate system
    659796         * by:
    660          *       Lpi=[ h    0    0   0]
    661          *                     [ 0    h    0   0]
    662          *                     [ h    0    0   0]
    663          *                     [ 0    h    0   0]
    664          *                     [ 0    0    h   0]
    665          *                     [ 0    0    h   0]
    666          *                     [ 0    0  dh/dz 0]
    667          *                     [ 0    0  dh/dz 0]
    668          *                     [ 0    0  dh/dz 0]
    669          *                     [dh/dz 0  dh/dx 0]
    670          *                     [ 0 dh/dz dh/dy 0]
    671          *           [ 0    0    0   h]
    672          *           [ 0    0    0   h]
    673          *           [ 0    0    0   h]
     797         *       Lpi=[ h    0    0   0]1
     798         *                     [ 0    h    0   0]2
     799         *                     [ h    0    0   0]3
     800         *                     [ 0    h    0   0]4
     801         *                     [ 0    0    h   0]5
     802         *                     [ 0    0    h   0]6
     803         *                     [ 0    0  dh/dz 0]7
     804         *                     [ 0    0  dh/dz 0]8
     805         *                     [ 0    0  dh/dz 0]9
     806         *                     [dh/dz 0  dh/dx 0]0
     807         *                     [ 0 dh/dz dh/dy 0]1
     808         *           [ 0    0    0   h]2
     809         *           [ 0    0    0   h]3
     810         *           [ 0    0    0   h]4
     811         *
     812         *       Li=[ h    0    0   0]1
     813         *                    [ 0    h    0   0]2
     814         *                    [ 0    0    h   0]3
     815         *                    [ 0    0    h   0]4
     816         *                    [ h    0    0   0]5
     817         *                    [ 0    h    0   0]6
     818         *                    [ h    0    0   0]7
     819         *                    [ 0    h    0   0]8
     820         *                    [ 0    0    h   0]9
     821         *                    [ 0    0    h   0]0
     822         *                    [ 0    0    h   0]1
     823         *                    [ h    0    0   0]2
     824         *                    [ 0    h    0   0]3
     825         *                    [ 0    0    h   0]4
    674826         * where h is the interpolation function for node i.
    675827         */
Note: See TracChangeset for help on using the changeset viewer.