Changeset 19291
- Timestamp:
- 04/21/15 10:23:49 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
r19290 r19291 9 9 void StressbalanceSIAAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/ 10 10 11 /*Intermediaries*/ 12 bool isSIA,isSSA,isL1L2,isHO,isFS,iscoupling; 13 11 14 /*Fetch parameters: */ 12 bool isSIA;13 15 iomodel->Constant(&isSIA,FlowequationIsSIAEnum); 16 iomodel->Constant(&isSSA,FlowequationIsSSAEnum); 17 iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum); 18 iomodel->Constant(&isHO,FlowequationIsHOEnum); 19 iomodel->Constant(&isFS,FlowequationIsFSEnum); 14 20 15 21 /*Now, is the flag isSIA on? otherwise, do nothing: */ 16 22 if (!isSIA) return; 17 23 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)); 39 52 count++; 40 53 } 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 } 45 64 } 46 65 }
Note:
See TracChangeset
for help on using the changeset viewer.