Changeset 15624
- Timestamp:
- 07/25/13 15:07:35 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
r15621 r15624 6 6 #include "../../../classes/classes.h" 7 7 #include "../../../shared/shared.h" 8 #include "../../IoModelToConstraintsx/IoModelToConstraintsx.h" 8 9 #include "../ModelProcessorx.h" 9 10 … … 12 13 /*Intermediary*/ 13 14 int i,j; 14 int count ;15 int count,temp,finiteelement; 15 16 IssmDouble g; 16 17 IssmDouble rho_ice; 17 18 IssmDouble FSreconditioning; 18 bool isSSA,isL1L2,isHO,isFS; 19 int fe_ssa,fe_ho; 19 bool isSSA,isL1L2,isHO,isFS,iscoupling; 20 20 bool spcpresent = false; 21 21 int Mx,Nx; … … 50 50 iomodel->Constant(&isHO,FlowequationIsHOEnum); 51 51 iomodel->Constant(&isFS,FlowequationIsFSEnum); 52 iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);53 iomodel->Constant(&fe_ho,FlowequationFeHOEnum);54 52 55 53 /*Recover pointer: */ … … 58 56 /*Now, is the flag macayaealHO on? otherwise, do nothing: */ 59 57 if(!isSSA & !isHO & !isFS & !isL1L2){ 58 *pconstraints=constraints; 59 return; 60 } 61 62 /*Do we have coupling*/ 63 if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.) 64 iscoupling = true; 65 else 66 iscoupling = false; 67 68 /*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/ 69 if(!iscoupling && !isFS){ 70 71 /*Get finite element type*/ 72 if(isSSA){ 73 iomodel->Constant(&temp,FlowequationFeSSAEnum); 74 switch(temp){ 75 case 0 : finiteelement = P1Enum; break; 76 case 1 : finiteelement = P2Enum; break; 77 default: _error_("finite element "<<temp<<" not supported"); 78 } 79 } 80 else if(isL1L2){ 81 finiteelement = P1Enum; 82 } 83 else if(isHO){ 84 iomodel->Constant(&temp,FlowequationFeHOEnum); 85 switch(temp){ 86 case 0 : finiteelement = P1Enum; break; 87 case 1 : finiteelement = P2Enum; break; 88 default: _error_("finite element "<<temp<<" not supported"); 89 } 90 } 91 else if(isFS){ 92 finiteelement = P1Enum; 93 } 94 IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvxEnum,DiagnosticHorizAnalysisEnum,finiteelement,1); 95 IoModelToConstraintsx(constraints,iomodel,DiagnosticSpcvyEnum,DiagnosticHorizAnalysisEnum,finiteelement,2); 96 60 97 *pconstraints=constraints; 61 98 return; … … 99 136 100 137 /*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/ 101 if 138 if(reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){ 102 139 /*If grionSSA, spc HO dofs: 3 & 4*/ 103 140 if (reCast<int,IssmDouble>(nodeonHO[i])){ … … 309 346 } 310 347 } 311 }312 313 /*SPC Quadratic elements*/314 if((isSSA && fe_ssa==1) || (isHO && fe_ho==1)){315 316 int v1,v2;317 bool *my_edges = NULL;318 319 if(Mx!=iomodel->numberofvertices) _error_("transient spc not supported yet");320 EdgesPartitioning(&my_edges,iomodel);321 322 for(i=0;i<iomodel->numberofedges;i++){323 324 if(my_edges[i]){325 326 v1 = iomodel->edges[2*i+0]-1;327 v2 = iomodel->edges[2*i+1]-1;328 329 if(!xIsNan<IssmDouble>(spcvx[v1]) && !xIsNan<IssmDouble>(spcvx[v2])){330 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,331 1,(spcvx[v1]+spcvx[v2])/(2.),DiagnosticHorizAnalysisEnum));332 count++;333 }334 if(!xIsNan<IssmDouble>(spcvy[v1]) && !xIsNan<IssmDouble>(spcvy[v2])){335 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,336 2,(spcvy[v1]+spcvy[v2])/(2.),DiagnosticHorizAnalysisEnum));337 count++;338 }339 if (reCast<int,IssmDouble>(vertices_type[v1])==FSApproximationEnum || (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){340 if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){341 constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,342 3,(spcvz[v1]+spcvz[v2])/(2.),DiagnosticHorizAnalysisEnum));343 count++;344 }345 }346 }347 }348 349 /*Clean up*/350 xDelete<bool>(my_edges);351 348 } 352 349
Note:
See TracChangeset
for help on using the changeset viewer.