Changeset 3877


Ignore:
Timestamp:
05/21/10 12:12:38 (15 years ago)
Author:
Mathieu Morlighem
Message:

some fixing

Location:
issm/trunk/src/c/objects
Files:
4 edited

Legend:

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

    r3875 r3877  
    459459
    460460        return tria;
     461}
     462/*}}}*/
     463/*FUNCTION Penta::GaussFromNode {{{1*/
     464double* Penta::GaussFromNode(Node* node){
     465
     466        /*variable declaration*/
     467        int i,pos;
     468        double*  gauss=NULL;
     469
     470        /*Allocate gauss*/
     471        gauss=(double*)xmalloc(4*sizeof(double));
     472
     473        for(i=0;i<6;i++){
     474                if (node==nodes[i]){
     475                        switch(i){
     476                                case 0:
     477                                        gauss[0]=1.0; gauss[1]=0.0; gauss[2]=0.0; gauss[3]= -1.0;
     478                                        return gauss;
     479                                case 1:
     480                                        gauss[0]=0.0; gauss[1]=1.0; gauss[2]=0.0; gauss[3]= -1.0;
     481                                        return gauss;
     482                                case 2:
     483                                        gauss[0]=0.0; gauss[1]=0.0; gauss[2]=1.0; gauss[3]= -1.0;
     484                                        return gauss;
     485                                case 3:
     486                                        gauss[0]=1.0; gauss[1]=0.0; gauss[2]=0.0; gauss[3]=1.0;
     487                                        return gauss;
     488                                case 4:
     489                                        gauss[0]=0.0; gauss[1]=1.0; gauss[2]=0.0; gauss[3]=1.0;
     490                                        return gauss;
     491                                case 5:
     492                                        gauss[0]=0.0; gauss[1]=0.0; gauss[2]=1.0; gauss[3]=1.0;
     493                                        return gauss;
     494                        }
     495                }
     496        }
     497
     498        /*output error if not found*/
     499        ISSMERROR("Node not found in Penta");
    461500}
    462501/*}}}*/
  • issm/trunk/src/c/objects/Elements/Penta.h

    r3875 r3877  
    5858                void*  SpawnTria(int g0, int g1, int g2);
    5959                void  SetClone(int* minranks);
     60                double* GaussFromNode(Node* node);
    6061
    6162                /*}}}*/
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r3869 r3877  
    30273027       
    30283028                friction->GetAlpha2(&alpha2,&gauss_coord[0],VxEnum,VyEnum,VzEnum);
    3029                 inputs->GetParameterValue(&vx, &gauss_coord[0],VxAverageEnum);
    3030                 inputs->GetParameterValue(&vy, &gauss_coord[0],VyAverageEnum);
     3029                inputs->GetParameterValue(&vx, &gauss_coord[0],VxEnum);
     3030                inputs->GetParameterValue(&vy, &gauss_coord[0],VyEnum);
    30313031                basalfriction= alpha2*(pow(vx,(double)2.0)+pow(vy,(double)2.0));
    30323032               
  • issm/trunk/src/c/objects/Loads/Pengrid.cpp

    r3875 r3877  
    341341        int    reset_penalties=0;
    342342        int    stabilize_constraints;
     343        double* gauss=NULL;
    343344
    344345        /*pointers: */
     
    346347        Penta* penta=NULL;
    347348        Matpar*  matpar=NULL;
     349
     350        /*recover pointers: */
     351        node=(Node*)hnode.delivers();
     352        penta=(Penta*)helement.delivers();
     353        matpar=(Matpar*)hmatpar.delivers();
    348354       
    349355        /*check that pengrid is not a clone (penalty to be added only once)*/
     
    354360        }
    355361
    356         /*recover pointers: */
    357         node=(Node*)hnode.delivers();
    358         penta=(Penta*)helement.delivers();
    359         matpar=(Matpar*)hmatpar.delivers();
    360 
    361362        //First recover pressure and temperature values, using the element: */
    362         penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
    363         penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum);
     363        gauss=penta->GaussFromNode(node);
     364        penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
     365        penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum);
    364366
    365367        //Recover our data:
    366         inputs->GetParameterValue(&reset_penalties,ResetPenaltiesEnum);
    367368        meltingpoint=matpar->GetMeltingPoint();
    368369        beta=matpar->GetBeta();
    369370        parameters->FindParam(&stabilize_constraints,StabilizeConstraintsEnum);
    370371       
    371         if(reset_penalties)zigzag_counter=0;
    372 
    373372        //Compute pressure melting point
    374373        t_pmp=meltingpoint-beta*pressure;
     
    406405        //*Assign output pointers:*/
    407406        *punstable=unstable;
     407
     408        /*Clean up*/
     409        xfree((void**)&gauss);
    408410}
    409411/*}}}1*/
     
    476478/*FUNCTION Pengrid::PenaltyCreateKMatrixMelting {{{1*/
    477479void  Pengrid::PenaltyCreateKMatrixMelting(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){
    478 
    479480
    480481        int found=0;
     
    487488        int      numberofdofspernode;
    488489        double  meltingpoint;
     490        double* gauss=NULL;
    489491
    490492        double pressure;
     
    507509
    508510        //First recover pressure and temperature values, using the element: */
    509         penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
    510         penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum);
     511        gauss=penta->GaussFromNode(node);
     512        penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
     513        penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum);
    511514
    512515        /*recover parameters: */
     
    527530       
    528531        MatSetValues(Kgg,numdof,doflist,numdof,doflist,(const double*)Ke,ADD_VALUES);
     532
     533        /*Clean up*/
     534        xfree((void**)&gauss);
    529535}
    530536/*}}}1*/
     
    600606        double t_pmp;
    601607        double dt,penalty_offset;
     608        double* gauss=NULL;
    602609
    603610        /*pointers: */
     
    618625
    619626        //First recover pressure and temperature values, using the element: */
    620         penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
    621         penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum);
     627        gauss=penta->GaussFromNode(node);
     628        penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
     629        penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum);
    622630        inputs->GetParameterValue(&melting_offset,MeltingOffsetEnum);
    623631        parameters->FindParam(&dt,DtEnum);
     
    650658        /*Add P_terms to global vector pg: */
    651659        VecSetValues(pg,numdof,doflist,(const double*)P_terms,ADD_VALUES);
     660
     661        /*Clean up*/
     662        xfree((void**)&gauss);
    652663}
    653664/*}}}1*/
     
    668679        double t_pmp;
    669680        double penalty_offset;
     681        double* gauss=NULL;
    670682
    671683        /*pointers: */
     
    685697
    686698        //First recover pressure  and penalty_offset
    687         penta->inputs->GetParameterValue(&pressure,node,PressureEnum);
     699        gauss=penta->GaussFromNode(node);
     700        penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum);
    688701        parameters->FindParam(&penalty_offset,PenaltyOffsetEnum);
    689702
     
    698711        /*Add P_terms to global vector pg: */
    699712        VecSetValues(pg,numdof,doflist,(const double*)P_terms,ADD_VALUES);
     713
     714        /*Clean up*/
     715        xfree((void**)&gauss);
    700716}
    701717/*}}}1*/
     
    729745/*FUNCTION Pengrid::UpdateInputsFromConstant(double constant, int name) {{{1*/
    730746void  Pengrid::UpdateInputsFromConstant(double constant, int name){
    731         /*Nothing updated yet*/
     747        switch(name){
     748
     749                case MeltingOffsetEnum:
     750                        inputs->AddInput(new DoubleInput(name,constant));
     751                        return;
     752
     753        }
    732754}
    733755/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.