Changeset 8414


Ignore:
Timestamp:
05/24/11 12:07:28 (14 years ago)
Author:
seroussi
Message:

moved PVector basevert into Penta

Location:
issm/trunk/src/c/objects/Elements
Files:
3 edited

Legend:

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

    r8413 r8414  
    28272827ElementVector* Penta::CreatePVectorDiagnosticVertBase(void){
    28282828
     2829
     2830        /*Constants*/
     2831        const int    numdof=NDOF1*NUMVERTICES;
     2832
     2833        /*Intermediaries */
     2834        int        i,j,ig;
     2835        int        approximation;
     2836        double     xyz_list[NUMVERTICES][3];
     2837        double     xyz_list_tria[NUMVERTICES2D][3];
     2838        double     Jdet2d;
     2839        double     vx,vy,vz,dbdx,dbdy,basalmeltingvalue;
     2840        double     slope[2];
     2841        double     l1l6[NUMVERTICES];
     2842        GaussPenta* gauss=NULL;
     2843
    28292844        if (!IsOnBed()) return NULL;
    28302845
    2831         /*Call Tria function*/
    2832         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
    2833         ElementVector* pe=tria->CreatePVectorDiagnosticBaseVert();
    2834         delete tria->matice; delete tria;
     2846        /*Initialize Element vector*/
     2847        ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters);
     2848
     2849        /*Retrieve all inputs and parameters*/
     2850        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
     2851        for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
     2852        inputs->GetParameterValue(&approximation,ApproximationEnum);
     2853        Input* bed_input=inputs->GetInput(BedEnum);             _assert_(bed_input);
     2854        Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input);
     2855        Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
     2856        Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
     2857        Input* vzstokes_input=NULL;
     2858        if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
     2859                vzstokes_input=inputs->GetInput(VzStokesEnum);       _assert_(vzstokes_input);
     2860        }
     2861
     2862        /* Start  looping on the number of gaussian points: */
     2863        gauss=new GaussPenta(0,1,2,2);
     2864        for(ig=gauss->begin();ig<gauss->end();ig++){
     2865
     2866                gauss->GaussPoint(ig);
     2867
     2868                basal_melting_input->GetParameterValue(&basalmeltingvalue, gauss);
     2869                bed_input->GetParameterDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
     2870                vx_input->GetParameterValue(&vx, gauss);
     2871                vy_input->GetParameterValue(&vy, gauss);
     2872                if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
     2873                        vzstokes_input->GetParameterValue(&vz, gauss);
     2874                }
     2875                else vz=0;
     2876
     2877                dbdx=slope[0];
     2878                dbdy=slope[1];
     2879
     2880                GetTriaJacobianDeterminand(&Jdet2d, &xyz_list_tria[0][0],gauss);
     2881                GetNodalFunctionsP1(&l1l6[0], gauss);
     2882
     2883                for(i=0;i<numdof;i++) pe->values[i]+=-Jdet2d*gauss->weight*(vx*dbdx+vy*dbdy-vz-basalmeltingvalue)*l1l6[i];
     2884        }
    28352885
    28362886        /*Clean up and return*/
     2887        delete gauss;
    28372888        return pe;
    28382889}
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r8410 r8414  
    17171717
    17181718                for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g)*L[i];
    1719         }
    1720 
    1721         /*Clean up and return*/
    1722         delete gauss;
    1723         return pe;
    1724 }
    1725 /*}}}*/
    1726 /*FUNCTION Tria::CreatePVectorDiagnosticBaseVert {{{1*/
    1727 ElementVector* Tria::CreatePVectorDiagnosticBaseVert(void){
    1728 
    1729         /*Constants*/
    1730         const int    numdof=NDOF1*NUMVERTICES;
    1731 
    1732         /*Intermediaries */
    1733         int        i,j,ig;
    1734         int        approximation;
    1735         double     xyz_list[NUMVERTICES][3];
    1736         double     Jdet;
    1737         double     vx,vy,vz,dbdx,dbdy,basalmeltingvalue;
    1738         double     slope[2];
    1739         double     L[NUMVERTICES];
    1740         GaussTria* gauss=NULL;
    1741 
    1742         /*Initialize Element vector*/
    1743         ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters);
    1744 
    1745         /*Retrieve all inputs and parameters*/
    1746         GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
    1747         inputs->GetParameterValue(&approximation,ApproximationEnum);
    1748         Input* bed_input=inputs->GetInput(BedEnum);             _assert_(bed_input);
    1749         Input* basal_melting_input=inputs->GetInput(BasalMeltingRateEnum); _assert_(basal_melting_input);
    1750         Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
    1751         Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
    1752         Input* vzstokes_input=NULL;
    1753         if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
    1754                 vzstokes_input=inputs->GetInput(VzStokesEnum);       _assert_(vzstokes_input);
    1755         }
    1756 
    1757         /* Start  looping on the number of gaussian points: */
    1758         gauss=new GaussTria(2);
    1759         for(ig=gauss->begin();ig<gauss->end();ig++){
    1760 
    1761                 gauss->GaussPoint(ig);
    1762 
    1763                 basal_melting_input->GetParameterValue(&basalmeltingvalue, gauss);
    1764                 bed_input->GetParameterDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
    1765                 vx_input->GetParameterValue(&vx, gauss);
    1766                 vy_input->GetParameterValue(&vy, gauss);
    1767                 if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
    1768                         vzstokes_input->GetParameterValue(&vz, gauss);
    1769                 }
    1770                 else vz=0;
    1771 
    1772                 dbdx=slope[0];
    1773                 dbdy=slope[1];
    1774 
    1775                 GetJacobianDeterminant3d(&Jdet, &xyz_list[0][0],gauss);
    1776                 GetL(&L[0], &xyz_list[0][0], gauss,NDOF1);
    1777 
    1778                 for(i=0;i<numdof;i++) pe->values[i]+=-Jdet*gauss->weight*(vx*dbdx+vy*dbdy-vz-basalmeltingvalue)*L[i];
    17791719        }
    17801720
  • issm/trunk/src/c/objects/Elements/Tria.h

    r8410 r8414  
    164164                ElementVector* CreatePVectorBalancethickness_CG(void);
    165165                ElementVector* CreatePVectorBalancevelocities(void);
    166                 ElementVector* CreatePVectorDiagnosticBaseVert(void);
    167166                ElementVector* CreatePVectorDiagnosticMacAyeal(void);
    168167                ElementVector* CreatePVectorAdjointHoriz(void);
Note: See TracChangeset for help on using the changeset viewer.