Changeset 6141


Ignore:
Timestamp:
10/04/10 11:17:37 (14 years ago)
Author:
seroussi
Message:

added some code for MacAyealStokes coupling

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

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h

    r6130 r6141  
    8383        MacAyealApproximationEnum,
    8484        MacAyealPattynApproximationEnum,
     85        MacAyealStokesApproximationEnum,
    8586        NoneApproximationEnum,
    8687        PattynApproximationEnum,
     
    250251        VzObsEnum,
    251252        VzOldEnum,
     253        VzMacAyealEnum,
    252254        VzPattynEnum,
    253255        VzStokesEnum,
  • issm/trunk/src/c/EnumDefinitions/EnumToString.cpp

    r6130 r6141  
    7373                case MacAyealApproximationEnum : return "MacAyealApproximation";
    7474                case MacAyealPattynApproximationEnum : return "MacAyealPattynApproximation";
     75                case MacAyealStokesApproximationEnum : return "MacAyealStokesApproximation";
    7576                case NoneApproximationEnum : return "NoneApproximation";
    7677                case PattynApproximationEnum : return "PattynApproximation";
     
    224225                case VzObsEnum : return "VzObs";
    225226                case VzOldEnum : return "VzOld";
     227                case VzMacAyealEnum : return "VzMacAyeal";
    226228                case VzPattynEnum : return "VzPattyn";
    227229                case VzStokesEnum : return "VzStokes";
  • issm/trunk/src/c/EnumDefinitions/StringToEnum.cpp

    r6130 r6141  
    7171        else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
    7272        else if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
     73        else if (strcmp(name,"MacAyealStokesApproximation")==0) return MacAyealStokesApproximationEnum;
    7374        else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
    7475        else if (strcmp(name,"PattynApproximation")==0) return PattynApproximationEnum;
     
    222223        else if (strcmp(name,"VzObs")==0) return VzObsEnum;
    223224        else if (strcmp(name,"VzOld")==0) return VzOldEnum;
     225        else if (strcmp(name,"VzMacAyeal")==0) return VzMacAyealEnum;
    224226        else if (strcmp(name,"VzPattyn")==0) return VzPattynEnum;
    225227        else if (strcmp(name,"VzStokes")==0) return VzStokesEnum;
  • issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp

    r5995 r6141  
    122122                                        }
    123123                                        else ISSMERROR("if vertices_type is PattynStokes, you shoud have gridonpattyn or gridonstokes");
     124                        }
     125                        /*Also add spcs of coupling: zero at the border pattyn/stokes for the appropriate dofs*/
     126                        else if ((int)iomodel->vertices_type[i]==MacAyealStokesApproximationEnum){
     127                                /*If grion,pattyn spc stokes dofs: 3 4 & 5*/
     128                                        if ((int)iomodel->gridonpattyn[i]){
     129                                                constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     130                                                count++;
     131                                                constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     132                                                count++;
     133                                                constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     134                                                count++;
     135                                                if ((int)iomodel->spcvelocity[6*i+0]){
     136                                                        constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,*(iomodel->spcvelocity+6*i+3)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     137                                                        count++;
     138                                                }
     139                                                if ((int)iomodel->spcvelocity[6*i+1]){
     140                                                        constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,*(iomodel->spcvelocity+6*i+4)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     141                                                        count++;
     142                                                }
     143
     144                                        }
     145                                        else if ((int)iomodel->gridonstokes[i]){ //spc pattyn grids: 1 & 2
     146                                                constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     147                                                count++;
     148                                                constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     149                                                count++;
     150                                                if ((int)iomodel->spcvelocity[6*i+0]){
     151                                                        constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,*(iomodel->spcvelocity+6*i+3)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     152                                                        count++;
     153                                                }
     154                                                if ((int)iomodel->spcvelocity[6*i+1]){
     155                                                        constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,*(iomodel->spcvelocity+6*i+4)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     156                                                        count++;
     157                                                }
     158                                                if ((int)iomodel->spcvelocity[6*i+2]){
     159                                                        constraints->AddObject(new Spc(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,*(iomodel->spcvelocity+6*i+5)/iomodel->yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     160                                                        count++;
     161                                                }
     162                                        }
     163                                        else ISSMERROR("if vertices_type is MacAyealStokes, you shoud have gridonpattyn or gridonstokes");
    124164                        }
    125165                        /*Now add the regular spcs*/
  • issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp

    r5715 r6141  
    8888                        count++;
    8989                }
    90 
     90                else if ((int)*(iomodel->elements_type+element)==(MacAyealStokesApproximationEnum)){
     91                        loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,MacAyeal3dIceFrontEnum,DiagnosticHorizAnalysisEnum));
     92                        count++;
     93                        loads->AddObject(new Icefront(iomodel->loadcounter+count+1,i,iomodel,StokesIceFrontEnum,DiagnosticHorizAnalysisEnum));
     94                        count++;
     95                }
    9196        }
    9297
     
    102107        IoModelFetchData(&iomodel->gridonstokes,NULL,NULL,iomodel_handle,"gridonstokes");
    103108        IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
     109        IoModelFetchData(&iomodel->spcvelocity,NULL,NULL,iomodel_handle,"spcvelocity");
     110        IoModelFetchData(&iomodel->vertices_type,NULL,NULL,iomodel_handle,"vertices_type");
    104111        CreateSingleNodeToElementConnectivity(iomodel);
    105112       
     
    108115                if(iomodel->my_vertices[i]==1 && iomodel->singlenodetoelementconnectivity[i]!=0){
    109116
    110                         if ((iomodel->gridonbed[i]) && (iomodel->gridonicesheet[i]) && (iomodel->gridonstokes[i])){
     117                        //if ((iomodel->gridonbed[i]) && (iomodel->gridonicesheet[i]) && ((int)iomodel->vertices_type[i]==StokesApproximationEnum || (int)iomodel->vertices_type[i]==PattynStokesApproximationEnum)){
     118                        if ((iomodel->gridonbed[i]) && (iomodel->gridonstokes[i])){
     119                        //if ((iomodel->gridonbed[i]) && (iomodel->gridonicesheet[i]) && (iomodel->gridonstokes[i])){
    111120                               
    112121                                loads->AddObject(new Pengrid(iomodel->loadcounter+count+1,i,iomodel,DiagnosticHorizAnalysisEnum));
     
    120129        xfree((void**)&iomodel->gridonicesheet);
    121130        xfree((void**)&iomodel->elements);
     131        xfree((void**)&iomodel->spcvelocity);
     132        xfree((void**)&iomodel->vertices_type);
    122133        xfree((void**)&iomodel->singlenodetoelementconnectivity);
    123134
  • issm/trunk/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp

    r5596 r6141  
    5151                        doftype[5]=StokesApproximationEnum;
    5252                }
     53                else if (vertices_type[0]==MacAyealStokesApproximationEnum){
     54                        numdofs=6;
     55                        doftype=(int*)xmalloc(numdofs*sizeof(int));
     56                        doftype[0]=MacAyealApproximationEnum;
     57                        doftype[1]=MacAyealApproximationEnum;
     58                        doftype[2]=StokesApproximationEnum;
     59                        doftype[3]=StokesApproximationEnum;
     60                        doftype[4]=StokesApproximationEnum;
     61                        doftype[5]=StokesApproximationEnum;
     62                }
    5363                else ISSMERROR("Approximationtype %i (%s) not implemented yet for DiagnosticHoriz",(int)*vertices_type,EnumToString((int)*vertices_type));
    5464        }
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r6130 r6141  
    18631863                                }
    18641864                        }
     1865                        if(*(iomodel->elements_type+index)==MacAyealStokesApproximationEnum){
     1866                                /*Create VzMacAyeal and VzStokes Enums*/
     1867                                if(iomodel->vz && iomodel->gridonstokes){
     1868                                        for(i=0;i<6;i++) nodeinputs[i]=iomodel->vz[penta_vertex_ids[i]-1]/iomodel->yts*iomodel->gridonstokes[penta_vertex_ids[i]-1];
     1869                                        this->inputs->AddInput(new PentaVertexInput(VzStokesEnum,nodeinputs));
     1870                                        for(i=0;i<6;i++) nodeinputs[i]=iomodel->vz[penta_vertex_ids[i]-1]/iomodel->yts*(1-iomodel->gridonstokes[penta_vertex_ids[i]-1]);
     1871                                        this->inputs->AddInput(new PentaVertexInput(VzMacAyealEnum,nodeinputs));
     1872                                }
     1873                                else{
     1874                                        for(i=0;i<6;i++)nodeinputs[i]=0;
     1875                                        this->inputs->AddInput(new PentaVertexInput(VzStokesEnum,nodeinputs));
     1876                                        this->inputs->AddInput(new PentaVertexInput(VzMacAyealEnum,nodeinputs));
     1877                                }
     1878                        }
    18651879                        break;
    18661880
  • issm/trunk/src/c/objects/Node.cpp

    r6032 r6141  
    9898                        }
    9999                        if (iomodel->vertices_type[io_index]==MacAyealPattynApproximationEnum && iomodel->gridonmacayeal[io_index]){
     100                                if(!iomodel->gridonbed[io_index]){
     101                                        for(k=1;k<=gsize;k++) this->FreezeDof(k);
     102                                }
     103                        }
     104                        if (iomodel->vertices_type[io_index]==MacAyealStokesApproximationEnum && iomodel->gridonmacayeal[io_index]){
    100105                                if(!iomodel->gridonbed[io_index]){
    101106                                        for(k=1;k<=gsize;k++) this->FreezeDof(k);
Note: See TracChangeset for help on using the changeset viewer.