Changeset 15877
- Timestamp:
- 08/22/13 11:44:02 (12 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 10 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r15848 r15877 373 373 #Masstransport sources {{{ 374 374 masstransport_sources = ./modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp\ 375 ./modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp\ 376 ./modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp\ 377 ./modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp\ 378 ./analyses/masstransport_core.cpp 375 ./modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp\ 376 ./modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp\ 377 ./modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp\ 378 ./modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp\ 379 ./modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp\ 380 ./modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp\ 381 ./modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp\ 382 ./modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp\ 383 ./modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp\ 384 ./modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp\ 385 ./modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp\ 386 ./analyses/masstransport_core.cpp 387 379 388 #}}} 380 389 #Thermal sources {{{ -
issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
r15771 r15877 108 108 109 109 case TransientSolutionEnum: 110 numanalyses=1 0-1;110 numanalyses=11; 111 111 analyses=xNew<int>(numanalyses); 112 analyses[0]=StressbalanceAnalysisEnum; 113 analyses[1]=StressbalanceVerticalAnalysisEnum; 114 analyses[2]=StressbalanceSIAAnalysisEnum; 115 analyses[3]=SurfaceSlopeAnalysisEnum; 116 analyses[4]=BedSlopeAnalysisEnum; 117 analyses[5]=ThermalAnalysisEnum; 118 analyses[6]=MeltingAnalysisEnum; 119 analyses[7]=EnthalpyAnalysisEnum; 120 analyses[8]=MasstransportAnalysisEnum; 112 analyses[ 0]=StressbalanceAnalysisEnum; 113 analyses[ 1]=StressbalanceVerticalAnalysisEnum; 114 analyses[ 2]=StressbalanceSIAAnalysisEnum; 115 analyses[ 3]=SurfaceSlopeAnalysisEnum; 116 analyses[ 4]=BedSlopeAnalysisEnum; 117 analyses[ 5]=ThermalAnalysisEnum; 118 analyses[ 6]=MeltingAnalysisEnum; 119 analyses[ 7]=EnthalpyAnalysisEnum; 120 analyses[ 8]=MasstransportAnalysisEnum; 121 analyses[ 9]=FreeSurfaceBaseAnalysisEnum; 122 analyses[10]=FreeSurfaceTopAnalysisEnum; 121 123 break; 122 124 -
issm/trunk-jpl/src/c/analyses/masstransport_core.cpp
r15849 r15877 13 13 14 14 /*parameters: */ 15 bool save_results;16 bool issmbgradients,ispdd,isdelta18o;17 int solution_type;15 bool save_results; 16 bool issmbgradients,ispdd,isdelta18o,isFS,isfreesurface; 17 int solution_type; 18 18 int *requested_outputs = NULL; 19 int numoutputs=0;19 int numoutputs = 0; 20 20 21 /*activate formulation:*/21 /*activate configuration*/ 22 22 femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum); 23 23 … … 27 27 femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum); 28 28 femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum); 29 femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum); 30 femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum); 29 31 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 30 32 femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum); … … 43 45 PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 44 46 } 45 if(VerboseSolution()) _printf0_(" call computational core\n"); 46 solutionsequence_linear(femmodel); 47 48 if(isFS && isfreesurface){ 49 if(VerboseSolution()) _printf0_(" call free surface computational core\n"); 50 femmodel->SetCurrentConfiguration(FreeSurfaceBaseAnalysisEnum); 51 solutionsequence_linear(femmodel); 52 femmodel->SetCurrentConfiguration(FreeSurfaceTopAnalysisEnum); 53 solutionsequence_linear(femmodel); 54 } 55 else{ 56 if(VerboseSolution()) _printf0_(" call computational core\n"); 57 solutionsequence_linear(femmodel); 58 } 47 59 48 60 if(save_results){ 49 61 if(VerboseSolution()) _printf0_(" saving results\n"); 50 62 InputToResultx(femmodel,ThicknessEnum); 63 InputToResultx(femmodel,BedEnum); 64 InputToResultx(femmodel,SurfaceEnum); 51 65 femmodel->RequestedOutputsx(requested_outputs,numoutputs); 52 66 } -
issm/trunk-jpl/src/c/analyses/transient_core.cpp
r15849 r15877 154 154 if(save_results){ 155 155 if(VerboseSolution()) _printf0_(" saving transient results\n"); 156 InputToResultx(femmodel,SurfaceEnum);157 InputToResultx(femmodel,BedEnum);158 156 InputToResultx(femmodel,SurfaceforcingsMassBalanceEnum); 159 157 InputToResultx(femmodel,MaskElementonfloatingiceEnum); 160 158 femmodel->RequestedOutputsx(requested_outputs,numoutputs); 161 162 159 if(isdelta18o){ 163 160 InputToResultx(femmodel,SurfaceforcingsMonthlytemperaturesEnum); 164 161 InputToResultx(femmodel,SurfaceforcingsPrecipitationEnum); 165 InputToResultx(femmodel,BasalFrictionEnum);166 162 } 167 163 if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){ 168 164 InputToResultx(femmodel,GLlevelsetEnum); 169 165 } 170 171 166 if(VerboseSolution()) _printf0_(" saving temporary results\n"); 172 167 OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results); -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r15872 r15877 469 469 case MasstransportAnalysisEnum: 470 470 return CreateKMatrixMasstransport(); 471 break; 472 case FreeSurfaceTopAnalysisEnum: 473 return CreateKMatrixFreeSurfaceTop(); 474 break; 475 case FreeSurfaceBaseAnalysisEnum: 476 return CreateKMatrixFreeSurfaceBase(); 471 477 break; 472 478 #ifdef _HAVE_BALANCED_ … … 518 524 this->inputs->DeleteInput(VxAverageEnum); 519 525 this->inputs->DeleteInput(VyAverageEnum); 526 527 /*clean up and return*/ 528 return Ke; 529 } 530 /*}}}*/ 531 /*FUNCTION Penta::CreateKMatrixFreeSurfaceTop {{{*/ 532 ElementMatrix* Penta::CreateKMatrixFreeSurfaceTop(void){ 533 534 if(!IsOnSurface()) return NULL; 535 536 Tria* tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1. 537 ElementMatrix* Ke=tria->CreateKMatrixFreeSurfaceTop(); 538 delete tria->material; delete tria; 539 540 /*clean up and return*/ 541 return Ke; 542 } 543 /*}}}*/ 544 /*FUNCTION Penta::CreateKMatrixFreeSurfaceBase {{{*/ 545 ElementMatrix* Penta::CreateKMatrixFreeSurfaceBase(void){ 546 547 if(!IsOnBed()) return NULL; 548 549 Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1. 550 ElementMatrix* Ke=tria->CreateKMatrixFreeSurfaceBase(); 551 delete tria->material; delete tria; 520 552 521 553 /*clean up and return*/ … … 666 698 return CreatePVectorMasstransport(); 667 699 break; 700 case FreeSurfaceTopAnalysisEnum: 701 return CreatePVectorFreeSurfaceTop(); 702 break; 703 case FreeSurfaceBaseAnalysisEnum: 704 return CreatePVectorFreeSurfaceBase(); 705 break; 668 706 #ifdef _HAVE_BALANCED_ 669 707 case BalancethicknessAnalysisEnum: … … 704 742 this->inputs->DeleteInput(VxAverageEnum); 705 743 this->inputs->DeleteInput(VyAverageEnum); 744 745 /*Clean up and return*/ 746 return pe; 747 } 748 /*}}}*/ 749 /*FUNCTION Penta::CreatePVectorFreeSurfaceTop {{{*/ 750 ElementVector* Penta::CreatePVectorFreeSurfaceTop(void){ 751 752 if(!IsOnSurface()) return NULL; 753 754 /*Call Tria function*/ 755 Tria* tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1. 756 ElementVector* pe=tria->CreatePVectorFreeSurfaceTop(); 757 delete tria->material; delete tria; 758 759 /*Clean up and return*/ 760 return pe; 761 } 762 /*}}}*/ 763 /*FUNCTION Penta::CreatePVectorFreeSurfaceBase {{{*/ 764 ElementVector* Penta::CreatePVectorFreeSurfaceBase(void){ 765 766 if(!IsOnBed()) return NULL; 767 768 /*Call Tria function*/ 769 Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1. 770 ElementVector* pe=tria->CreatePVectorFreeSurfaceBase(); 771 delete tria->material; delete tria; 706 772 707 773 /*Clean up and return*/ … … 2263 2329 InputUpdateFromSolutionMasstransport(solution); 2264 2330 break; 2331 case FreeSurfaceTopAnalysisEnum: 2332 InputUpdateFromSolutionFreeSurfaceTop(solution); 2333 break; 2334 case FreeSurfaceBaseAnalysisEnum: 2335 InputUpdateFromSolutionFreeSurfaceBase(solution); 2336 break; 2265 2337 #ifdef _HAVE_BALANCED_ 2266 2338 case BalancethicknessAnalysisEnum: … … 2355 2427 /*Stop if we have reached the surface*/ 2356 2428 if (penta->IsOnSurface()) break; 2429 2430 /* get upper Penta*/ 2431 penta=penta->GetUpperElement(); _assert_(penta->Id()!=this->id); 2432 } 2433 2434 /*Free ressources:*/ 2435 xDelete<int>(doflist); 2436 } 2437 /*}}}*/ 2438 /*FUNCTION Penta::InputUpdateFromSolutionFreeSurfaceTop{{{*/ 2439 void Penta::InputUpdateFromSolutionFreeSurfaceTop(IssmDouble* solution){ 2440 2441 const int numdof = NDOF1*NUMVERTICES; 2442 const int numdof2d = NDOF1*NUMVERTICES2D; 2443 2444 int i; 2445 int* doflist = NULL; 2446 IssmDouble newthickness[numdof]; 2447 IssmDouble newbed[numdof]; 2448 IssmDouble newsurface[numdof]; 2449 2450 /*If not on bed, return*/ 2451 if (!IsOnSurface()) return; 2452 2453 /*Get dof list: */ 2454 GetDofList(&doflist,NoneApproximationEnum,GsetEnum); 2455 2456 /*Use the dof list to index into the solution vector and extrude it */ 2457 for(i=0;i<numdof2d;i++){ 2458 newsurface[i+numdof2d]=solution[doflist[i+numdof2d]]; 2459 if(xIsNan<IssmDouble>(newsurface[i+numdof2d])) _error_("NaN found in solution vector"); 2460 newsurface[i]=newsurface[i+numdof2d]; 2461 } 2462 2463 /*Get previous bed and thickness*/ 2464 GetInputListOnVertices(&newbed[0],BedEnum); 2465 2466 for(i=0;i<numdof;i++) { 2467 newthickness[i]=newsurface[i]-newbed[i]; 2468 _assert_(newthickness[i]>0.); 2469 } 2470 2471 /*Start looping over all elements above current element and update all inputs*/ 2472 Penta* penta=this; 2473 for(;;){ 2474 /*Add input to the element: */ 2475 penta->inputs->AddInput(new PentaInput(ThicknessEnum,newthickness,P1Enum)); 2476 penta->inputs->AddInput(new PentaInput(SurfaceEnum,newsurface,P1Enum)); 2477 2478 /*Stop if we have reached the surface*/ 2479 if(penta->IsOnBed()) break; 2480 2481 /* get upper Penta*/ 2482 penta=penta->GetLowerElement(); _assert_(penta->Id()!=this->id); 2483 } 2484 2485 /*Free ressources:*/ 2486 xDelete<int>(doflist); 2487 } 2488 /*}}}*/ 2489 /*FUNCTION Penta::InputUpdateFromSolutionFreeSurfaceBase{{{*/ 2490 void Penta::InputUpdateFromSolutionFreeSurfaceBase(IssmDouble* solution){ 2491 2492 const int numdof = NDOF1*NUMVERTICES; 2493 const int numdof2d = NDOF1*NUMVERTICES2D; 2494 2495 int i; 2496 int* doflist = NULL; 2497 IssmDouble newthickness[numdof]; 2498 IssmDouble newbed[numdof]; 2499 IssmDouble newsurface[numdof]; 2500 2501 /*If not on bed, return*/ 2502 if (!IsOnBed()) return; 2503 2504 /*Get dof list: */ 2505 GetDofList(&doflist,NoneApproximationEnum,GsetEnum); 2506 2507 /*Use the dof list to index into the solution vector and extrude it */ 2508 for(i=0;i<numdof2d;i++){ 2509 newbed[i]=solution[doflist[i]]; 2510 if(xIsNan<IssmDouble>(newbed[i])) _error_("NaN found in solution vector"); 2511 newbed[i+numdof2d]=newbed[i]; 2512 } 2513 2514 /*Get previous bed and thickness*/ 2515 GetInputListOnVertices(&newsurface[0],SurfaceEnum); 2516 2517 for(i=0;i<numdof;i++) { 2518 newthickness[i]=newsurface[i]-newbed[i]; 2519 _assert_(newthickness[i]>0.); 2520 } 2521 2522 /*Start looping over all elements above current element and update all inputs*/ 2523 Penta* penta=this; 2524 for(;;){ 2525 /*Add input to the element: */ 2526 penta->inputs->AddInput(new PentaInput(ThicknessEnum,newthickness,P1Enum)); 2527 penta->inputs->AddInput(new PentaInput(BedEnum,newbed,P1Enum)); 2528 2529 /*Stop if we have reached the surface*/ 2530 if(penta->IsOnSurface()) break; 2357 2531 2358 2532 /* get upper Penta*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r15867 r15877 181 181 ElementMatrix* CreateKMatrix(void); 182 182 ElementMatrix* CreateKMatrixMasstransport(void); 183 ElementMatrix* CreateKMatrixFreeSurfaceTop(void); 184 ElementMatrix* CreateKMatrixFreeSurfaceBase(void); 183 185 ElementVector* CreatePVector(void); 184 186 ElementVector* CreatePVectorMasstransport(void); 187 ElementVector* CreatePVectorFreeSurfaceTop(void); 188 ElementVector* CreatePVectorFreeSurfaceBase(void); 185 189 ElementVector* CreatePVectorSlope(void); 186 190 void GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[6][3],int numpoints); … … 211 215 void InputExtrude(int enum_type,int object_type); 212 216 void InputUpdateFromSolutionMasstransport(IssmDouble* solutiong); 217 void InputUpdateFromSolutionFreeSurfaceTop(IssmDouble* solutiong); 218 void InputUpdateFromSolutionFreeSurfaceBase(IssmDouble* solutiong); 213 219 void InputUpdateFromSolutionOneDof(IssmDouble* solutiong,int enum_type); 214 220 void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solutiong,int enum_type); -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r15814 r15877 6487 6487 } 6488 6488 /*}}}*/ 6489 /*FUNCTION Tria::CreateKMatrixFreeSurfaceTop {{{*/ 6490 ElementMatrix* Tria::CreateKMatrixFreeSurfaceTop(void){ 6491 6492 /*Intermediaries */ 6493 int stabilization; 6494 int dim; 6495 IssmDouble Jdettria,D_scalar,dt,h; 6496 IssmDouble vel,vx,vy,dvxdx,dvydy; 6497 IssmDouble dvx[2],dvy[2]; 6498 IssmDouble xyz_list[NUMVERTICES][3]; 6499 6500 /*Fetch number of nodes for this finite element*/ 6501 int numnodes = this->NumberofNodes(); 6502 6503 /*Initialize Element matrix and vectors*/ 6504 ElementMatrix* Ke = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum); 6505 IssmDouble* basis = xNew<IssmDouble>(numnodes); 6506 IssmDouble* B = xNew<IssmDouble>(2*numnodes); 6507 IssmDouble* Bprime = xNew<IssmDouble>(2*numnodes); 6508 IssmDouble D[2][2]; 6509 6510 /*Retrieve all inputs and parameters*/ 6511 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6512 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6513 this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum); 6514 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 6515 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 6516 h=sqrt(2*this->GetArea()); 6517 6518 /* Start looping on the number of gaussian points: */ 6519 GaussTria *gauss=new GaussTria(2); 6520 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6521 6522 gauss->GaussPoint(ig); 6523 6524 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 6525 GetNodalFunctions(basis,gauss); 6526 6527 vx_input->GetInputValue(&vx,gauss); 6528 vy_input->GetInputValue(&vy,gauss); 6529 vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss); 6530 vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss); 6531 6532 D_scalar=gauss->weight*Jdettria; 6533 6534 TripleMultiply(basis,1,numnodes,1, 6535 &D_scalar,1,1,0, 6536 basis,1,numnodes,0, 6537 &Ke->values[0],1); 6538 6539 GetBMasstransport(B,&xyz_list[0][0],gauss); 6540 GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss); 6541 6542 dvxdx=dvx[0]; 6543 dvydy=dvy[1]; 6544 D_scalar=dt*gauss->weight*Jdettria; 6545 6546 D[0][0]=D_scalar*vx; 6547 D[0][1]=0.; 6548 D[1][0]=0.; 6549 D[1][1]=D_scalar*vy; 6550 TripleMultiply(B,2,numnodes,1, 6551 &D[0][0],2,2,0, 6552 Bprime,2,numnodes,0, 6553 &Ke->values[0],1); 6554 6555 if(stabilization==2){ 6556 /*Streamline upwinding*/ 6557 vel=sqrt(vx*vx+vy*vy)+1.e-8; 6558 D[0][0]=h/(2*vel)*vx*vx; 6559 D[1][0]=h/(2*vel)*vy*vx; 6560 D[0][1]=h/(2*vel)*vx*vy; 6561 D[1][1]=h/(2*vel)*vy*vy; 6562 } 6563 else if(stabilization==1){ 6564 /*SSA*/ 6565 vx_input->GetInputAverage(&vx); 6566 vy_input->GetInputAverage(&vy); 6567 D[0][0]=h/2.0*fabs(vx); 6568 D[0][1]=0.; 6569 D[1][0]=0.; 6570 D[1][1]=h/2.0*fabs(vy); 6571 } 6572 if(stabilization==1 || stabilization==2){ 6573 D[0][0]=D_scalar*D[0][0]; 6574 D[1][0]=D_scalar*D[1][0]; 6575 D[0][1]=D_scalar*D[0][1]; 6576 D[1][1]=D_scalar*D[1][1]; 6577 TripleMultiply(Bprime,2,numnodes,1, 6578 &D[0][0],2,2,0, 6579 Bprime,2,numnodes,0, 6580 &Ke->values[0],1); 6581 } 6582 } 6583 6584 /*Clean up and return*/ 6585 xDelete<IssmDouble>(basis); 6586 xDelete<IssmDouble>(B); 6587 xDelete<IssmDouble>(Bprime); 6588 delete gauss; 6589 return Ke; 6590 } 6591 /*}}}*/ 6592 /*FUNCTION Tria::CreateKMatrixFreeSurfaceBase {{{*/ 6593 ElementMatrix* Tria::CreateKMatrixFreeSurfaceBase(void){ 6594 6595 /*Intermediaries */ 6596 int stabilization; 6597 int dim; 6598 IssmDouble Jdettria,D_scalar,dt,h; 6599 IssmDouble vel,vx,vy,dvxdx,dvydy; 6600 IssmDouble dvx[2],dvy[2]; 6601 IssmDouble xyz_list[NUMVERTICES][3]; 6602 6603 /*Fetch number of nodes for this finite element*/ 6604 int numnodes = this->NumberofNodes(); 6605 6606 /*Initialize Element matrix and vectors*/ 6607 ElementMatrix* Ke = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum); 6608 IssmDouble* basis = xNew<IssmDouble>(numnodes); 6609 IssmDouble* B = xNew<IssmDouble>(2*numnodes); 6610 IssmDouble* Bprime = xNew<IssmDouble>(2*numnodes); 6611 IssmDouble D[2][2]; 6612 6613 /*Retrieve all inputs and parameters*/ 6614 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6615 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6616 this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum); 6617 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 6618 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 6619 h=sqrt(2*this->GetArea()); 6620 6621 /* Start looping on the number of gaussian points: */ 6622 GaussTria *gauss=new GaussTria(2); 6623 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6624 6625 gauss->GaussPoint(ig); 6626 6627 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 6628 GetNodalFunctions(basis,gauss); 6629 6630 vx_input->GetInputValue(&vx,gauss); 6631 vy_input->GetInputValue(&vy,gauss); 6632 vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss); 6633 vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss); 6634 6635 D_scalar=gauss->weight*Jdettria; 6636 6637 TripleMultiply(basis,1,numnodes,1, 6638 &D_scalar,1,1,0, 6639 basis,1,numnodes,0, 6640 &Ke->values[0],1); 6641 6642 GetBMasstransport(B,&xyz_list[0][0],gauss); 6643 GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss); 6644 6645 dvxdx=dvx[0]; 6646 dvydy=dvy[1]; 6647 D_scalar=dt*gauss->weight*Jdettria; 6648 6649 D[0][0]=D_scalar*vx; 6650 D[0][1]=0.; 6651 D[1][0]=0.; 6652 D[1][1]=D_scalar*vy; 6653 TripleMultiply(B,2,numnodes,1, 6654 &D[0][0],2,2,0, 6655 Bprime,2,numnodes,0, 6656 &Ke->values[0],1); 6657 6658 if(stabilization==2){ 6659 /*Streamline upwinding*/ 6660 vel=sqrt(vx*vx+vy*vy)+1.e-8; 6661 D[0][0]=h/(2*vel)*vx*vx; 6662 D[1][0]=h/(2*vel)*vy*vx; 6663 D[0][1]=h/(2*vel)*vx*vy; 6664 D[1][1]=h/(2*vel)*vy*vy; 6665 } 6666 else if(stabilization==1){ 6667 /*SSA*/ 6668 vx_input->GetInputAverage(&vx); 6669 vy_input->GetInputAverage(&vy); 6670 D[0][0]=h/2.0*fabs(vx); 6671 D[0][1]=0.; 6672 D[1][0]=0.; 6673 D[1][1]=h/2.0*fabs(vy); 6674 } 6675 if(stabilization==1 || stabilization==2){ 6676 D[0][0]=D_scalar*D[0][0]; 6677 D[1][0]=D_scalar*D[1][0]; 6678 D[0][1]=D_scalar*D[0][1]; 6679 D[1][1]=D_scalar*D[1][1]; 6680 TripleMultiply(Bprime,2,numnodes,1, 6681 &D[0][0],2,2,0, 6682 Bprime,2,numnodes,0, 6683 &Ke->values[0],1); 6684 } 6685 } 6686 6687 /*Clean up and return*/ 6688 xDelete<IssmDouble>(basis); 6689 xDelete<IssmDouble>(B); 6690 xDelete<IssmDouble>(Bprime); 6691 delete gauss; 6692 return Ke; 6693 } 6694 /*}}}*/ 6489 6695 /*FUNCTION Tria::CreatePVectorMasstransport{{{*/ 6490 6696 ElementVector* Tria::CreatePVectorMasstransport(void){ … … 6505 6711 /*Intermediaries */ 6506 6712 IssmDouble Jdettria,dt; 6507 IssmDouble surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g;6713 IssmDouble ms,mb,mb_correction,thickness; 6508 6714 IssmDouble xyz_list[NUMVERTICES][3]; 6509 6715 … … 6518 6724 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6519 6725 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6520 Input* surface_mass_balance_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);6521 Input* basal_melting_input = inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(basal_melting_input);6522 Input* basal_melting_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum);6523 Input* thickness_input = inputs->GetInput(ThicknessEnum);_assert_(thickness_input);6524 6525 /*Initialize basal_melting_correction_gto 0, do not forget!:*/6726 Input* ms_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 6727 Input* mb_input = inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 6728 Input* mb_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum); 6729 Input* thickness_input = inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 6730 6731 /*Initialize mb_correction to 0, do not forget!:*/ 6526 6732 /* Start looping on the number of gaussian points: */ 6527 6733 GaussTria* gauss=new GaussTria(2); … … 6533 6739 GetNodalFunctions(basis,gauss); 6534 6740 6535 surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);6536 basal_melting_input->GetInputValue(&basal_melting_g,gauss);6537 thickness_input->GetInputValue(&thickness _g,gauss);6538 if( basal_melting_correction_input)6539 basal_melting_correction_input->GetInputValue(&basal_melting_correction_g,gauss);6741 ms_input->GetInputValue(&ms,gauss); 6742 mb_input->GetInputValue(&mb,gauss); 6743 thickness_input->GetInputValue(&thickness,gauss); 6744 if(mb_correction_input) 6745 mb_correction_input->GetInputValue(&mb_correction,gauss); 6540 6746 else 6541 basal_melting_correction_g=0.;6542 6543 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness _g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*basis[i];6747 mb_correction=0.; 6748 6749 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness+dt*(ms-mb-mb_correction))*basis[i]; 6544 6750 } 6545 6751 … … 6555 6761 /*Intermediaries */ 6556 6762 IssmDouble Jdettria,dt; 6557 IssmDouble surface_mass_balance_g,basal_melting_g,thickness_g;6763 IssmDouble ms,mb,thickness; 6558 6764 IssmDouble xyz_list[NUMVERTICES][3]; 6559 6765 … … 6568 6774 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6569 6775 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6570 Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);6571 Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(basal_melting_input);6572 Input* thickness_input=inputs->GetInput(ThicknessEnum); 6776 Input* ms_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 6777 Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 6778 Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 6573 6779 6574 6780 /* Start looping on the number of gaussian points: */ … … 6581 6787 GetNodalFunctions(basis,gauss); 6582 6788 6583 surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss); 6584 basal_melting_input->GetInputValue(&basal_melting_g,gauss); 6585 thickness_input->GetInputValue(&thickness_g,gauss); 6586 6587 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*basis[i]; 6789 ms_input->GetInputValue(&ms,gauss); 6790 mb_input->GetInputValue(&mb,gauss); 6791 thickness_input->GetInputValue(&thickness,gauss); 6792 6793 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness+dt*(ms-mb))*basis[i]; 6794 } 6795 6796 /*Clean up and return*/ 6797 xDelete<IssmDouble>(basis); 6798 delete gauss; 6799 return pe; 6800 } 6801 /*}}}*/ 6802 /*FUNCTION Tria::CreatePVectorFreeSurfaceTop {{{*/ 6803 ElementVector* Tria::CreatePVectorFreeSurfaceTop(void){ 6804 6805 /*Intermediaries */ 6806 IssmDouble Jdettria,dt; 6807 IssmDouble ms,surface,vz; 6808 IssmDouble xyz_list[NUMVERTICES][3]; 6809 6810 /*Fetch number of nodes and dof for this finite element*/ 6811 int numnodes = this->NumberofNodes(); 6812 6813 /*Initialize Element vector and other vectors*/ 6814 ElementVector* pe = new ElementVector(nodes,numnodes,this->parameters); 6815 IssmDouble* basis = xNew<IssmDouble>(numnodes); 6816 6817 /*Retrieve all inputs and parameters*/ 6818 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6819 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6820 Input* vz_input = inputs->GetInput(VzEnum); _assert_(vz_input); 6821 Input* ms_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 6822 Input* surface_input= inputs->GetInput(ThicknessEnum); _assert_(surface_input); 6823 6824 /*Initialize mb_correction to 0, do not forget!:*/ 6825 /* Start looping on the number of gaussian points: */ 6826 GaussTria* gauss=new GaussTria(2); 6827 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6828 6829 gauss->GaussPoint(ig); 6830 6831 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 6832 GetNodalFunctions(basis,gauss); 6833 6834 ms_input->GetInputValue(&ms,gauss); 6835 surface_input->GetInputValue(&surface,gauss); 6836 6837 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(surface + dt*ms + dt*vz)*basis[i]; 6838 } 6839 6840 /*Clean up and return*/ 6841 xDelete<IssmDouble>(basis); 6842 delete gauss; 6843 return pe; 6844 } 6845 /*}}}*/ 6846 /*FUNCTION Tria::CreatePVectorFreeSurfaceBase {{{*/ 6847 ElementVector* Tria::CreatePVectorFreeSurfaceBase(void){ 6848 6849 /*Intermediaries */ 6850 IssmDouble Jdettria,dt; 6851 IssmDouble mb,mb_correction,bed,vz; 6852 IssmDouble xyz_list[NUMVERTICES][3]; 6853 6854 /*Fetch number of nodes and dof for this finite element*/ 6855 int numnodes = this->NumberofNodes(); 6856 6857 /*Initialize Element vector and other vectors*/ 6858 ElementVector* pe = new ElementVector(nodes,numnodes,this->parameters); 6859 IssmDouble* basis = xNew<IssmDouble>(numnodes); 6860 6861 /*Retrieve all inputs and parameters*/ 6862 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6863 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 6864 Input* vz_input = inputs->GetInput(VzEnum); _assert_(vz_input); 6865 Input* mb_input = inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 6866 Input* mb_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum); 6867 Input* bed_input = inputs->GetInput(BedEnum); _assert_(bed_input); 6868 6869 /*Initialize mb_correction to 0, do not forget!:*/ 6870 /* Start looping on the number of gaussian points: */ 6871 GaussTria* gauss=new GaussTria(2); 6872 for(int ig=gauss->begin();ig<gauss->end();ig++){ 6873 6874 gauss->GaussPoint(ig); 6875 6876 GetJacobianDeterminant(&Jdettria, &xyz_list[0][0],gauss); 6877 GetNodalFunctions(basis,gauss); 6878 6879 mb_input->GetInputValue(&mb,gauss); 6880 bed_input->GetInputValue(&bed,gauss); 6881 if(mb_correction_input) 6882 mb_correction_input->GetInputValue(&mb_correction,gauss); 6883 else 6884 mb_correction=0.; 6885 6886 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(bed+dt*(mb-mb_correction) + dt*vz)*basis[i]; 6588 6887 } 6589 6888 … … 6938 7237 /*Intermediaries */ 6939 7238 IssmDouble xyz_list[NUMVERTICES][3]; 6940 IssmDouble dhdt_g, basal_melting_g,surface_mass_balance_g,Jdettria;7239 IssmDouble dhdt_g,mb_g,ms_g,Jdettria; 6941 7240 6942 7241 /*Fetch number of nodes and dof for this finite element*/ … … 6949 7248 /*Retrieve all inputs and parameters*/ 6950 7249 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6951 Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);6952 Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(basal_melting_input);6953 Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum); 7250 Input* ms_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 7251 Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 7252 Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 6954 7253 6955 7254 /* Start looping on the number of gaussian points: */ … … 6959 7258 gauss->GaussPoint(ig); 6960 7259 6961 surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);6962 basal_melting_input->GetInputValue(&basal_melting_g,gauss);7260 ms_input->GetInputValue(&ms_g,gauss); 7261 mb_input->GetInputValue(&mb_g,gauss); 6963 7262 dhdt_input->GetInputValue(&dhdt_g,gauss); 6964 7263 … … 6966 7265 GetNodalFunctions(basis,gauss); 6967 7266 6968 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*( surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i];7267 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i]; 6969 7268 } 6970 7269 … … 6980 7279 /*Intermediaries */ 6981 7280 IssmDouble xyz_list[NUMVERTICES][3]; 6982 IssmDouble basal_melting_g,surface_mass_balance_g,dhdt_g,Jdettria;7281 IssmDouble mb_g,ms_g,dhdt_g,Jdettria; 6983 7282 6984 7283 /*Fetch number of nodes and dof for this finite element*/ … … 6991 7290 /*Retrieve all inputs and parameters*/ 6992 7291 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6993 Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);6994 Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(basal_melting_input);6995 Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum); 7292 Input* ms_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 7293 Input* mb_input=inputs->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 7294 Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum);_assert_(dhdt_input); 6996 7295 6997 7296 /* Start looping on the number of gaussian points: */ … … 7001 7300 gauss->GaussPoint(ig); 7002 7301 7003 surface_mass_balance_input->GetInputValue(&surface_mass_balance_g,gauss);7004 basal_melting_input->GetInputValue(&basal_melting_g,gauss);7302 ms_input->GetInputValue(&ms_g,gauss); 7303 mb_input->GetInputValue(&mb_g,gauss); 7005 7304 dhdt_input->GetInputValue(&dhdt_g,gauss); 7006 7305 … … 7008 7307 GetNodalFunctions(basis,gauss); 7009 7308 7010 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*( surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i];7309 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(ms_g-mb_g-dhdt_g)*basis[i]; 7011 7310 } 7012 7311 -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r15866 r15877 188 188 ElementMatrix* CreateKMatrixMasstransport_CG(void); 189 189 ElementMatrix* CreateKMatrixMasstransport_DG(void); 190 ElementMatrix* CreateKMatrixFreeSurfaceTop(void); 191 ElementMatrix* CreateKMatrixFreeSurfaceBase(void); 190 192 ElementMatrix* CreateMassMatrix(void); 191 193 ElementVector* CreatePVector(void); … … 196 198 ElementVector* CreatePVectorMasstransport_CG(void); 197 199 ElementVector* CreatePVectorMasstransport_DG(void); 200 ElementVector* CreatePVectorFreeSurfaceTop(void); 201 ElementVector* CreatePVectorFreeSurfaceBase(void); 198 202 ElementVector* CreatePVectorSlope(void); 199 203 IssmDouble GetArea(void); -
issm/trunk-jpl/src/c/classes/Node.cpp
r15862 r15877 93 93 /*2d solutions in 3d, we need to constrain all the nodes that are not on base*/ 94 94 if( 95 analysis_type==FreeSurfaceBaseAnalysisEnum || 95 96 analysis_type==MasstransportAnalysisEnum || 96 97 analysis_type==MeltingAnalysisEnum || … … 105 106 _assert_(iomodel->Data(MeshVertexonbedEnum)); 106 107 if(!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){ 108 this->Deactivate(); 109 } 110 } 111 } 112 if(analysis_type==FreeSurfaceTopAnalysisEnum){ 113 if(iomodel->dim==3){ 114 /*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */ 115 _assert_(iomodel->Data(MeshVertexonsurfaceEnum)); 116 if(!(reCast<bool>(iomodel->Data(MeshVertexonsurfaceEnum)[io_index]))){ 107 117 this->Deactivate(); 108 118 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
r15771 r15877 148 148 UpdateElementsMasstransport(elements,iomodel,analysis_counter,analysis_type); 149 149 break; 150 case FreeSurfaceTopAnalysisEnum: 151 CreateNodesFreeSurfaceTop(pnodes, iomodel); 152 CreateConstraintsFreeSurfaceTop(pconstraints,iomodel); 153 CreateLoadsFreeSurfaceTop(ploads,iomodel); 154 UpdateElementsFreeSurfaceTop(elements,iomodel,analysis_counter,analysis_type); 155 break; 156 case FreeSurfaceBaseAnalysisEnum: 157 CreateNodesFreeSurfaceBase(pnodes, iomodel); 158 CreateConstraintsFreeSurfaceBase(pconstraints,iomodel); 159 CreateLoadsFreeSurfaceBase(ploads,iomodel); 160 UpdateElementsFreeSurfaceBase(elements,iomodel,analysis_counter,analysis_type); 161 break; 150 162 #endif 151 163 -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r15771 r15877 57 57 parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum)); 58 58 parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum)); 59 parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum)); 59 60 parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum)); 60 61 parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum)); … … 65 66 parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum)); 66 67 parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum)); 68 parameters->AddObject(iomodel->CopyConstantObject(MasstransportIsfreesurfaceEnum)); 67 69 parameters->AddObject(iomodel->CopyConstantObject(MasstransportHydrostaticAdjustmentEnum)); 68 70 parameters->AddObject(iomodel->CopyConstantObject(MasstransportStabilizationEnum)); 69 parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));70 71 parameters->AddObject(iomodel->CopyConstantObject(MasstransportMinThicknessEnum)); 71 72 parameters->AddObject(iomodel->CopyConstantObject(MasstransportPenaltyFactorEnum)); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
r15771 r15877 103 103 numdofs=1; 104 104 break; 105 case FreeSurfaceTopAnalysisEnum: 106 numdofs=1; 107 break; 108 case FreeSurfaceBaseAnalysisEnum: 109 numdofs=1; 110 break; 105 111 case GiaAnalysisEnum: 106 112 numdofs=1; -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r15771 r15877 104 104 void CreateLoadsMasstransport(Loads** ploads, IoModel* iomodel); 105 105 void UpdateElementsMasstransport(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 106 void CreateNodesFreeSurfaceTop(Nodes** pnodes,IoModel* iomodel); 107 void CreateConstraintsFreeSurfaceTop(Constraints** pconstraints,IoModel* iomodel); 108 void CreateLoadsFreeSurfaceTop(Loads** ploads, IoModel* iomodel); 109 void UpdateElementsFreeSurfaceTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 110 void CreateNodesFreeSurfaceBase(Nodes** pnodes,IoModel* iomodel); 111 void CreateConstraintsFreeSurfaceBase(Constraints** pconstraints,IoModel* iomodel); 112 void CreateLoadsFreeSurfaceBase(Loads** ploads, IoModel* iomodel); 113 void UpdateElementsFreeSurfaceBase(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 106 114 107 115 /*balancedthickness:*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r15827 r15877 188 188 MiscellaneousNameEnum, //FIXME: only used by qmu, should not be marshalled (already in queueing script) 189 189 MasstransportHydrostaticAdjustmentEnum, 190 MasstransportIsfreesurfaceEnum, 190 191 MasstransportMinThicknessEnum, 191 192 MasstransportPenaltyFactorEnum, … … 295 296 MasstransportAnalysisEnum, 296 297 MasstransportSolutionEnum, 298 FreeSurfaceBaseAnalysisEnum, 299 FreeSurfaceTopAnalysisEnum, 297 300 SteadystateSolutionEnum, 298 301 SurfaceSlopeAnalysisEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r15771 r15877 196 196 case MiscellaneousNameEnum : return "MiscellaneousName"; 197 197 case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment"; 198 case MasstransportIsfreesurfaceEnum : return "MasstransportIsfreesurface"; 198 199 case MasstransportMinThicknessEnum : return "MasstransportMinThickness"; 199 200 case MasstransportPenaltyFactorEnum : return "MasstransportPenaltyFactor"; … … 301 302 case MasstransportAnalysisEnum : return "MasstransportAnalysis"; 302 303 case MasstransportSolutionEnum : return "MasstransportSolution"; 304 case FreeSurfaceBaseAnalysisEnum : return "FreeSurfaceBaseAnalysis"; 305 case FreeSurfaceTopAnalysisEnum : return "FreeSurfaceTopAnalysis"; 303 306 case SteadystateSolutionEnum : return "SteadystateSolution"; 304 307 case SurfaceSlopeAnalysisEnum : return "SurfaceSlopeAnalysis"; … … 587 590 case PatersonEnum : return "Paterson"; 588 591 case ArrheniusEnum : return "Arrhenius"; 592 case LliboutryDuvalEnum : return "LliboutryDuval"; 589 593 case MaximumNumberOfDefinitionsEnum : return "MaximumNumberOfDefinitions"; 590 594 default : return "unknown"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r15771 r15877 199 199 else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum; 200 200 else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum; 201 else if (strcmp(name,"MasstransportIsfreesurface")==0) return MasstransportIsfreesurfaceEnum; 201 202 else if (strcmp(name,"MasstransportMinThickness")==0) return MasstransportMinThicknessEnum; 202 203 else if (strcmp(name,"MasstransportPenaltyFactor")==0) return MasstransportPenaltyFactorEnum; … … 259 260 else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum; 260 261 else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum; 261 else if (strcmp(name,"Thickness")==0) return ThicknessEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum; 265 if (strcmp(name,"Thickness")==0) return ThicknessEnum; 266 else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum; 266 267 else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum; 267 268 else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum; … … 307 308 else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; 308 309 else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum; 310 else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 311 else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum; 309 312 else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum; 310 313 else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum; … … 380 383 else if (strcmp(name,"Profiler")==0) return ProfilerEnum; 381 384 else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum; 382 else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;383 else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;384 else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum; 388 if (strcmp(name,"NodeSId")==0) return NodeSIdEnum; 389 else if (strcmp(name,"VectorParam")==0) return VectorParamEnum; 390 else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum; 391 else if (strcmp(name,"RiftfrontType")==0) return RiftfrontTypeEnum; 389 392 else if (strcmp(name,"Segment")==0) return SegmentEnum; 390 393 else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum; … … 503 506 else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum; 504 507 else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum; 505 else if (strcmp(name,"P2")==0) return P2Enum;506 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;507 else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"P1P1")==0) return P1P1Enum; 511 if (strcmp(name,"P2")==0) return P2Enum; 512 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum; 513 else if (strcmp(name,"P1xP2")==0) return P1xP2Enum; 514 else if (strcmp(name,"P1P1")==0) return P1P1Enum; 512 515 else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum; 513 516 else if (strcmp(name,"MINI")==0) return MINIEnum; … … 599 602 else if (strcmp(name,"Paterson")==0) return PatersonEnum; 600 603 else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum; 604 else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 601 605 else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum; 602 606 else stage=6;
Note:
See TracChangeset
for help on using the changeset viewer.