- Timestamp:
- 12/22/21 10:39:44 (3 years ago)
- Location:
- issm/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk ¶
- Property svn:mergeinfo changed
/issm/trunk-jpl merged: 25837-25866,25868-25993,25995-26330,26332-26733,26736-26739,26741
- Property svn:mergeinfo changed
-
issm/trunk/src ¶
- Property svn:mergeinfo changed
-
issm/trunk/src/c ¶
- Property svn:ignore
-
TabularUnified
old new 20 20 issm 21 21 kriging 22 issm_slc 22 23 issm_slr 23 24 issm_ocean
-
- Property svn:ignore
-
TabularUnified issm/trunk/src/c/analyses/StressbalanceVerticalAnalysis.cpp ¶
r25836 r26744 5 5 #include "../modules/modules.h" 6 6 #include "../solutionsequences/solutionsequences.h" 7 8 //#define INWOOVZ 1 //For Inwoo Park 0: incompressible assumption(IA), 1: internal deformation(ID), 2: IA+ID 7 9 8 10 /*Model processing*/ … … 105 107 iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum); 106 108 iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum); 107 iomodel->FetchDataToInput(inputs,elements,"md. solidearth.initialsealevel",SealevelEnum,0);109 iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0); 108 110 iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 109 111 if(iomodel->domaintype!=Domain2DhorizontalEnum){ … … 112 114 } 113 115 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 114 //iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 115 116 #ifdef INWOOVZ 117 iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 118 #endif 116 119 117 120 /*Add basal forcings to compute melt rate*/ 121 bool isstochastic; 118 122 int basalforcing_model; 119 123 iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model"); 124 iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing"); 120 125 switch(basalforcing_model){ 121 126 case FloatingMeltRateEnum: 122 127 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 128 if(isstochastic){ 129 iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum); 130 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum); 131 } 123 132 break; 124 133 case LinearFloatingMeltRateEnum: … … 153 162 void StressbalanceVerticalAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 154 163 155 /* Nospecific parameters*/164 /* specific parameters*/ 156 165 157 166 }/*}}}*/ … … 163 172 femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum); 164 173 solutionsequence_linear(femmodel); 174 }/*}}}*/ 175 void StressbalanceVerticalAnalysis::PreCore(FemModel* femmodel){/*{{{*/ 176 _error_("not implemented"); 165 177 }/*}}}*/ 166 178 ElementVector* StressbalanceVerticalAnalysis::CreateDVector(Element* element){/*{{{*/ … … 576 588 } 577 589 590 #ifdef INWOOVZ 591 IssmDouble* thickness = xNew<IssmDouble>(numnodes); 592 IssmDouble* base = xNew<IssmDouble>(numnodes); 593 IssmDouble* smb = xNew<IssmDouble>(numnodes); 594 595 IssmDouble rheology_n=element->material->GetN(); 596 IssmDouble isvelbc = 10./(365.25*24*3600); /*10 m/yr*/ 597 /*Set analytical vertical velocity field at slow flow region.*/ 598 if(INWOOVZ == 1){ 599 element->GetInputListOnNodes(&thickness[0],ThicknessEnum,0.); 600 element->GetInputListOnNodes(&base[0],BaseEnum,0.); 601 element->GetInputListOnNodes(&smb[0],SmbMassBalanceEnum,0.); 602 for(i=0;i<numnodes;i++){ 603 IssmDouble eta = (base[i]+thickness[i]-xyz_list[i*3+2])/thickness[i]; 604 vz[i] = -(pow(eta,rheology_n+2.0)-1-(rheology_n+2.0)*(eta-1.))/(rheology_n+1.)*smb[i]; 605 } 606 } 607 else if(INWOOVZ== 2) { 608 element->GetInputListOnNodes(&thickness[0],ThicknessEnum,0.); 609 element->GetInputListOnNodes(&base[0],BaseEnum,0.); 610 element->GetInputListOnNodes(&smb[0],SmbMassBalanceEnum,0.); 611 for(i=0;i<numnodes;i++){ 612 if ( vx[i]*vx[i]+vy[i]*vy[i] < isvelbc*isvelbc ){ 613 IssmDouble eta = (base[i]+thickness[i]-xyz_list[i*3+2])/thickness[i]; 614 vz[i] = -(pow(eta,rheology_n+2.0)-1-(rheology_n+2.0)*(eta-1.))/(rheology_n+1.)*smb[i]; 615 } 616 } 617 } 618 else if(INWOOVZ==0){ 619 /*nothing to add*/ 620 } 621 else{ 622 _error_("not supported yet"); 623 } 624 625 /*Cleanup*/ 626 xDelete<IssmDouble>(smb); 627 xDelete<IssmDouble>(base); 628 xDelete<IssmDouble>(thickness); 629 #endif 630 578 631 /*Now Compute vel*/ 579 632 for(i=0;i<numnodes;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
Note:
See TracChangeset
for help on using the changeset viewer.