Changeset 5510


Ignore:
Timestamp:
08/23/10 11:01:55 (15 years ago)
Author:
seroussi
Message:

added penalties for Stokes

Location:
issm/trunk/src/c
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp

    r5433 r5510  
    1717        int segment_width;
    1818        int element;
     19        int penpair_ids[2];
    1920       
    2021        /*DataSet*/
     
    8182        for (i=0;i<iomodel->numberofvertices;i++){
    8283               
    83                 if((iomodel->my_vertices[i]==1)){
     84                if(iomodel->my_vertices[i]==1 && iomodel->singlenodetoelementconnectivity[i]!=0){
    8485
    8586                        if ((iomodel->gridonbed[i]) && (iomodel->gridonicesheet[i]) && (iomodel->gridonstokes[i])){
     
    9798        xfree((void**)&iomodel->singlenodetoelementconnectivity);
    9899
     100        /*Create Penpair for penalties: */
     101        IoModelFetchData(&iomodel->penalties,&iomodel->numpenalties,NULL,iomodel_handle,"penalties");
     102       
     103        for(i=0;i<iomodel->numpenalties;i++){
     104
     105                if(iomodel->my_vertices[(int)iomodel->penalties[2*i+0]-1]){
     106
     107                        /*In debugging mode, check that the second node is in the same cpu*/
     108                        ISSMASSERT(iomodel->my_vertices[(int)iomodel->penalties[2*i+1]-1]);
     109
     110                        /*Get node ids*/
     111                        penpair_ids[0]=iomodel->nodecounter+(int)iomodel->penalties[2*i+0];
     112                        penpair_ids[1]=iomodel->nodecounter+(int)iomodel->penalties[2*i+1];
     113
     114                        /*Create Load*/
     115                        loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],DiagnosticStokesAnalysisEnum));
     116                        count++;
     117                }
     118        }
     119
     120        /*free ressources: */
     121        xfree((void**)&iomodel->penalties);
     122
    99123        cleanup_and_return:
    100124
  • TabularUnified issm/trunk/src/c/objects/Elements/Penta.cpp

    r5433 r5510  
    21582158                        }
    21592159                        if(!iomodel->pressure){
    2160                                 for(i=0;i<6;i++)nodeinputs[i]=i;
     2160                                for(i=0;i<6;i++)nodeinputs[i]=0;
    21612161                                if(iomodel->qmu_analysis){
    21622162                                        this->inputs->AddInput(new PentaVertexInput(PressureEnum,nodeinputs));
  • TabularUnified issm/trunk/src/c/objects/Loads/Pengrid.cpp

    r5431 r5510  
    4444        ISSMASSERT(iomodel->singlenodetoelementconnectivity);
    4545        ISSMASSERT(index>=0 && index<iomodel->numberofvertices);
     46        ISSMASSERT(id);
    4647
    4748        /*id: */
     
    5253        pengrid_node_id=iomodel->nodecounter+index+1;
    5354        pengrid_element_id=iomodel->singlenodetoelementconnectivity[index];
     55        ISSMASSERT(pengrid_element_id);
    5456        pengrid_matpar_id=iomodel->numberofelements+1; //refers to the constant material parameters object
    5557
  • TabularUnified issm/trunk/src/c/objects/Loads/Penpair.cpp

    r5152 r5510  
    209209                PenaltyCreateKMatrixDiagnosticHoriz(Kgg,kmax);
    210210        }
     211        else if (analysis_type==DiagnosticStokesAnalysisEnum){
     212                PenaltyCreateKMatrixDiagnosticStokes(Kgg,kmax);
     213        }
    211214        else{
    212215                ISSMERROR("analysis %i (%s) not supported yet",analysis_type,EnumToString(analysis_type));
     
    288291}
    289292/*}}}1*/
     293/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticStokes {{{1*/
     294void  Penpair::PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,double kmax){
     295       
     296        const int numgrids=2;
     297        const int NDOF3=4;
     298        const int numdof=numgrids*NDOF3;
     299        int*      doflist=NULL;
     300        int       numberofdofspernode;
     301
     302        double Ke[8][8]={0.0};
     303        double penalty_offset;
     304
     305        /*pointers: */
     306        Node** nodes=NULL;
     307
     308        /*Get dof list: */
     309        GetDofList(&doflist);
     310
     311        /*recover pointers: */
     312        nodes=(Node**)hnodes->deliverp();
     313
     314        /*recover parameters: */
     315        parameters->FindParam(&penalty_offset,PenaltyOffsetEnum);
     316
     317        //Create elementary matrix: add penalty to
     318        Ke[0][0]=kmax*pow((double)10.0,penalty_offset);
     319        Ke[0][4]=-kmax*pow((double)10.0,penalty_offset);
     320        Ke[4][0]=-kmax*pow((double)10.0,penalty_offset);
     321        Ke[4][4]=kmax*pow((double)10.0,penalty_offset);
     322
     323        Ke[1][1]=kmax*pow((double)10.0,penalty_offset);
     324        Ke[1][5]=-kmax*pow((double)10.0,penalty_offset);
     325        Ke[5][1]=-kmax*pow((double)10.0,penalty_offset);
     326        Ke[5][5]=kmax*pow((double)10.0,penalty_offset);
     327       
     328        Ke[2][2]=kmax*pow((double)10.0,penalty_offset);
     329        Ke[2][6]=-kmax*pow((double)10.0,penalty_offset);
     330        Ke[6][2]=-kmax*pow((double)10.0,penalty_offset);
     331        Ke[6][6]=kmax*pow((double)10.0,penalty_offset);
     332
     333        Ke[3][3]=kmax*pow((double)10.0,penalty_offset);
     334        Ke[3][7]=-kmax*pow((double)10.0,penalty_offset);
     335        Ke[7][3]=-kmax*pow((double)10.0,penalty_offset);
     336        Ke[7][7]=kmax*pow((double)10.0,penalty_offset);
     337
     338        /*Add Ke to global matrix Kgg: */
     339        MatSetValues(Kgg,numdof,doflist,numdof,doflist,(const double*)Ke,ADD_VALUES);
     340       
     341        /*Free ressources:*/
     342        xfree((void**)&doflist);
     343
     344}
     345/*}}}1*/
    290346/*FUNCTION Penpair::GetDofList {{{1*/
    291347void  Penpair::GetDofList(int** pdoflist){
  • TabularUnified issm/trunk/src/c/objects/Loads/Penpair.h

    r5311 r5510  
    6565                        /*Penpair management: {{{1*/
    6666                void  PenaltyCreateKMatrixDiagnosticHoriz(Mat Kgg,double kmax);
     67                void  PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,double kmax);
    6768                void  GetDofList(int** pdoflist);
    6869                /*}}}*/
Note: See TracChangeset for help on using the changeset viewer.