Changeset 19291


Ignore:
Timestamp:
04/21/15 10:23:49 (10 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixed spc transient in SIA (if no coupling)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp

    r19290 r19291  
    99void StressbalanceSIAAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
    1010
     11        /*Intermediaries*/
     12        bool       isSIA,isSSA,isL1L2,isHO,isFS,iscoupling;
     13
    1114        /*Fetch parameters: */
    12         bool isSIA;
    1315        iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
     16        iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
     17        iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
     18        iomodel->Constant(&isHO,FlowequationIsHOEnum);
     19        iomodel->Constant(&isFS,FlowequationIsFSEnum);
    1420
    1521        /*Now, is the flag isSIA on? otherwise, do nothing: */
    1622        if (!isSIA) return;
    1723
    18         /*Fetch data: */
    19         iomodel->FetchData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
    20 
    21         /*Initialize conunter*/
    22         int count=0;
    23 
    24         /*vx and vy are spc'd if we are not on nodeonSIA: */
    25         for(int i=0;i<iomodel->numberofvertices;i++){
    26                 /*keep only this partition's nodes:*/
    27                 if((iomodel->my_vertices[i])){
    28                         if (reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
    29 
    30                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceSIAAnalysisEnum));
    31                                 count++;
    32 
    33                                 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceSIAAnalysisEnum));
    34                                 count++;
    35                         }
    36                         else{
    37                                 if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvxEnum)[i])){
    38                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,iomodel->Data(StressbalanceSpcvxEnum)[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     24        /*Do we have coupling*/
     25        if((isSIA?1.:0.) + (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
     26         iscoupling = true;
     27        else
     28         iscoupling = false;
     29
     30        /*If no coupling, call Regular IoModelToConstraintsx, else, OLD stuff, keep for now*/
     31        if(!iscoupling){
     32                IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceSIAAnalysisEnum,P1Enum,0);
     33                IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceSIAAnalysisEnum,P1Enum,1);
     34        }
     35        else{
     36                /*Fetch data: */
     37                iomodel->FetchData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
     38
     39                /*Initialize conunter*/
     40                int count=0;
     41
     42                /*vx and vy are spc'd if we are not on nodeonSIA: */
     43                for(int i=0;i<iomodel->numberofvertices;i++){
     44                        /*keep only this partition's nodes:*/
     45                        if((iomodel->my_vertices[i])){
     46                                if (reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
     47
     48                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceSIAAnalysisEnum));
     49                                        count++;
     50
     51                                        constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceSIAAnalysisEnum));
    3952                                        count++;
    4053                                }
    41 
    42                                 if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvyEnum)[i])){
    43                                         constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(StressbalanceSpcvyEnum)[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
    44                                         count++;
     54                                else{
     55                                        if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvxEnum)[i])){
     56                                                constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,iomodel->Data(StressbalanceSpcvxEnum)[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
     57                                                count++;
     58                                        }
     59
     60                                        if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvyEnum)[i])){
     61                                                constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(StressbalanceSpcvyEnum)[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
     62                                                count++;
     63                                        }
    4564                                }
    4665                        }
Note: See TracChangeset for help on using the changeset viewer.