source: issm/oecreview/Archive/15392-16133/ISSM-15474-15475.diff@ 16134

Last change on this file since 16134 was 16134, checked in by Mathieu Morlighem, 12 years ago

Added Archive/15392-16133

File size: 4.7 KB
  • ../trunk-jpl/src/c/classes/Elements/Penta.cpp

     
    69176917        GaussPenta *gauss=NULL;
    69186918
    69196919        /*Stabilization*/
    6920         bool       stabilization = false;
     6920        bool       stabilization = true;
    69216921        IssmDouble dbasis[3][6];
    69226922        IssmDouble dmu[3];
    69236923        IssmDouble mu;
     
    69436943        rigidity=material->GetB();
    69446944        diameter=MinEdgeLength(xyz_list);
    69456945
     6946        if(stabilization){
     6947                gauss=new GaussPenta();
     6948                for(int iv=0;iv<6;iv++){
     6949                        gauss->GaussVertex(iv);
     6950                        GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
     6951                        for(i=0;i<6;i++){
     6952                                for(j=0;j<3;j++){
     6953                                        dnodalbasis[i][iv][j] = dbasis[j][i];
     6954                                }
     6955                        }
     6956                }
     6957                delete gauss;
     6958        }
     6959
    69466960        /* Start  looping on the number of gaussian points: */
    69476961        gauss=new GaussPenta(3,2);
    69486962        for(int ig=gauss->begin();ig<gauss->end();ig++){
     
    69716985                if(stabilization){
    69726986                        GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
    69736987                        dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
    6974                         mu = viscosity;
    6975                         for(i=0;i<6;i++){
    6976                                 for(p=0;p<6;p++){
    6977                                         for(j=0;j<3;j++){
    6978                                                 dnodalbasis[i][p][j] = dbasis[j][i];
    6979                                         }
    6980                                 }
    6981                         }
     6988                        mu = 2.*viscosity;
    69826989                        for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
    69836990                                SU[p][i][j]=0.;
    69846991                                SW[p][i][j]=0.;
     
    70177024                        }
    70187025
    70197026                }
    7020 
    7021 
    7022                 //viscosity = 1000*rigidity;
    7023                 //D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2)/(8.*2.*viscosity)*stokesreconditioning;
    7024                 //if(id==24){
    7025                 //printf("tau %g\n",1./3.*pow(diameter,2)/(8.*2.*viscosity));
    7026                 //}
    7027                 //GetBConduct(&B_stab[0][0],&xyz_list[0][0],gauss);
    7028 
    7029                 //D_stab[0][0]=D_scalar_stab; D_stab[0][1]=0;             D_stab[0][2]=0;
    7030                 //D_stab[1][0]=0;             D_stab[1][1]=D_scalar_stab; D_stab[1][2]=0;
    7031                 //D_stab[2][0]=0;             D_stab[2][1]=0;             D_stab[2][2]=D_scalar_stab;
    7032 
    7033                 //TripleMultiply(&B_stab[0][0],3,6,1,
    7034                 //                      &D_stab[0][0],3,3,0,
    7035                 //                      &B_stab[0][0],3,6,0,
    7036                 //                      &Ke_temp_stab[0][0],0);
    7037 
    7038                 //for(i=0;i<NUMVERTICES;i++) for(j=0;j<NUMVERTICES;j++) Ke->values[numdof*(i*4+3)+j*4+3]+=Ke_temp_stab[i][j];
    7039 
    70407027        }
    70417028
    7042 //      if(id==24){
    7043 //              _error_("");
    7044 //      }
    7045 
    7046         //Ke->Echo();
    7047         //_error_("stop");
    70487029        /*Transform Coordinate System*/
    70497030        TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
    70507031        if(id==24){
     
    79437924        /*Find minimal length*/
    79447925        diameter=MinEdgeLength(xyz_list);
    79457926
     7927        if(stabilization){
     7928                gauss=new GaussPenta();
     7929                for(int iv=0;iv<6;iv++){
     7930                        gauss->GaussVertex(iv);
     7931                        GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
     7932                        for(i=0;i<6;i++){
     7933                                for(j=0;j<3;j++){
     7934                                        dnodalbasis[i][iv][j] = dbasis[j][i];
     7935                                }
     7936                        }
     7937                }
     7938                delete gauss;
     7939        }
     7940
    79467941        /* Start  looping on the number of gaussian points: */
    7947         gauss=new GaussPenta(2,3);
     7942        gauss=new GaussPenta(3,2);
    79487943        for(int ig=gauss->begin();ig<gauss->end();ig++){
    79497944
    79507945                gauss->GaussPoint(ig);
     
    79697964                if(stabilization){
    79707965                        GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
    79717966                        dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
    7972                         mu = viscosity;
    7973                         for(i=0;i<6;i++){
    7974                                 for(p=0;p<6;p++){
    7975                                         for(j=0;j<3;j++){
    7976                                                 dnodalbasis[i][p][j] = dbasis[j][i];
    7977                                         }
    7978                                 }
    7979                         }
    7980                         //dNodalBasisdx(1:n,p,:) = dBasisdx(1:n,:)
     7967                        mu = 2.*viscosity;
    79817968                        for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
    79827969                                SW[p][i][j]=0.;
    79837970                        }
     
    79887975                                                SW[p][i][i] += -dmu[j]*dbasis[j][p];
    79897976                                                SW[p][j][i] += -dmu[j]*dbasis[i][p];
    79907977                                                for(ii=0;ii<6;ii++){
    7991                                                         //SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
    7992                                                         //SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
    7993                                                         SW[p][i][i] += -mu*dnodalbasis[p][ii][j];
    7994                                                         SW[p][j][i] += -mu*dnodalbasis[p][ii][i];
     7978                                                        SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
     7979                                                        SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
    79957980                                                }
    79967981                                        }
    79977982                                }
     
    80067991                        }
    80077992
    80087993                }
    8009                 ///*Add stabilization*/
    8010                 //D_scalar_stab=-gauss->weight*Jdet*1./3.*pow(diameter,2)/(8.*2.*viscosity)*stokesreconditioning;
    8011                 //GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],&xyz_list[0][0],gauss);
    8012 
    8013                 //for(i=0;i<NUMVERTICES;i++){
    8014                 //      Pe_gaussian[i*NDOF4+3]+=-rho_ice*gravity*D_scalar_stab*dh1dh6[2][i];
    8015                 //      Pe_gaussian[i*NDOF4+3]+=forcex*D_scalar_stab*dh1dh6[0][i];
    8016                 //      Pe_gaussian[i*NDOF4+3]+=forcey*D_scalar_stab*dh1dh6[1][i];
    8017                 //      Pe_gaussian[i*NDOF4+3]+=forcez*D_scalar_stab*dh1dh6[2][i];
    8018                 //}
    80197994        }
    80207995
    80217996        /*Transform coordinate system*/
    80227997        TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
    80237998
    8024         if(id==24){
    8025                 printarray(pe->values,24,1);
    8026                 _error_("STOP");
    8027         }
    8028 
    80297999        /*Clean up and return*/
    80308000        delete gauss;
    80318001        return pe;
Note: See TracBrowser for help on using the repository browser.