Changeset 20723
- Timestamp:
- 06/10/16 11:15:57 (9 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r20719 r20723 113 113 if(save_results){ 114 114 if(VerboseSolution()) _printf0_(" saving results\n"); 115 int outputs[ 2] = {MaskIceLevelsetEnum, CalvingCalvingrateEnum};116 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0], 2);115 int outputs[1] = {MaskIceLevelsetEnum}; 116 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1); 117 117 } 118 118 }/*}}}*/ … … 198 198 case DefaultCalvingEnum: 199 199 case CalvingDevEnum: 200 case CalvingMinthicknessEnum:201 200 lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 202 201 if(dim==2) lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); … … 221 220 meltingrate_input = basalelement->GetInput(CalvinglevermannMeltingrateEnum); _assert_(meltingrate_input); 222 221 break; 222 case CalvingMinthicknessEnum: 223 lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 224 if(dim==2) lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 225 meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input); 226 break; 223 227 default: 224 228 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); … … 253 257 case DefaultCalvingEnum: 254 258 case CalvingDevEnum: 255 case CalvingMinthicknessEnum:256 259 lsf_slopex_input->GetInputValue(&dlsf[0],gauss); 257 260 if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss); … … 281 284 norm_calving=sqrt(norm_calving)+1.e-14; 282 285 for(i=0;i<dim;i++) m[i]=meltingrate*c[i]/norm_calving; 286 break; 287 288 case CalvingMinthicknessEnum: 289 lsf_slopex_input->GetInputValue(&dlsf[0],gauss); 290 if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss); 291 meltingrate_input->GetInputValue(&meltingrate,gauss); 292 293 norm_dlsf=0.; 294 for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2); 295 norm_dlsf=sqrt(norm_dlsf); 296 297 if(norm_dlsf>1.e-10) 298 for(i=0;i<dim;i++){ 299 c[i]=0.; 300 m[i]=meltingrate*dlsf[i]/norm_dlsf; 301 } 302 else 303 for(i=0;i<dim;i++){ 304 c[i]=0.; 305 m[i]=0.; 306 } 283 307 break; 284 308 … … 621 645 }/*}}}*/ 622 646 void LevelsetAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/ 647 648 /*Intermediaries*/ 649 int calvinglaw; 650 IssmDouble min_thickness,thickness; 651 femmodel->parameters->FindParam(&calvinglaw,CalvingLawEnum); 652 653 if(calvinglaw==CalvingMinthicknessEnum){ 654 655 /*Get minimum thickness threshold*/ 656 femmodel->parameters->FindParam(&min_thickness,CalvingMinthicknessEnum); 657 658 /*Loop over all elements of this partition*/ 659 for(int i=0;i<femmodel->elements->Size();i++){ 660 Element* element = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 661 662 int numnodes = element->GetNumberOfNodes(); 663 Gauss* gauss = element->NewGauss(); 664 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input); 665 666 /*Potentially constrain nodes of this element*/ 667 for(int in=0;in<numnodes;in++){ 668 gauss->GaussNode(element->GetElementType(),in); 669 Node* node=element->GetNode(in); 670 H_input->GetInputValue(&thickness,gauss); 671 if(thickness<min_thickness){ 672 node->ApplyConstraint(0,+1.); 673 } 674 else { 675 /* no ice, set no spc */ 676 node->DofInFSet(0); 677 } 678 } 679 delete gauss; 680 } 681 } 623 682 /*Default, do nothing*/ 624 683 return; -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r20719 r20723 2069 2069 switch(calvinglaw){ 2070 2070 case DefaultCalvingEnum: 2071 case CalvingMinthicknessEnum: 2071 2072 //do nothing 2072 2073 break; … … 2076 2077 case CalvingDevEnum: 2077 2078 this->CalvingRateDev(); 2078 break;2079 case CalvingMinthicknessEnum:2080 this->CalvingRateMinthickness();2081 2079 break; 2082 2080 default: -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r20719 r20723 176 176 virtual void CalvingRateLevermann(void)=0; 177 177 virtual void CalvingRateDev(void){_error_("not implemented yet");}; 178 virtual void CalvingRateMinthickness(void){_error_("not implemented yet");};179 178 virtual void WriteLevelsetSegment(DataSet* segments){_error_("not implemented yet");}; 180 179 virtual void ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r20719 r20723 327 327 calvingratey[iv]=vy*sigma_vm/sigma_max; 328 328 calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]); 329 }330 331 /*Add input*/332 this->inputs->AddInput(new TriaInput(CalvingratexEnum,&calvingratex[0],P1Enum));333 this->inputs->AddInput(new TriaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));334 this->inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));335 336 /*Clean up and return*/337 delete gauss;338 }339 /*}}}*/340 void Tria::CalvingRateMinthickness(){/*{{{*/341 342 IssmDouble calvingratex[NUMVERTICES];343 IssmDouble calvingratey[NUMVERTICES];344 IssmDouble calvingrate[NUMVERTICES];345 IssmDouble vx,vy,H,minH;346 347 /*Retrieve all inputs and parameters we will need*/348 Input* vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);349 Input* vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);350 Input* H_input = inputs->GetInput(ThicknessEnum); _assert_(H_input);351 parameters->FindParam(&minH,CalvingMinthicknessEnum);352 353 /* Start looping on the number of vertices: */354 GaussTria* gauss=new GaussTria();355 for(int iv=0;iv<NUMVERTICES;iv++){356 gauss->GaussVertex(iv);357 358 /*Get velocity components and thickness*/359 vx_input->GetInputValue(&vx,gauss);360 vy_input->GetInputValue(&vy,gauss);361 H_input->GetInputValue(&H,gauss);362 363 /*Assign values*/364 if(H>minH){365 calvingratex[iv]=0.;366 calvingratey[iv]=0.;367 calvingrate[iv]=0.;368 }369 else{370 calvingratex[iv]=vx+1e-2; //counter balance advance + add some retreat371 calvingratey[iv]=vy+1e-2;372 calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);373 }374 329 } 375 330 -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r20719 r20723 54 54 void CalvingRateLevermann(); 55 55 void CalvingRateDev(); 56 void CalvingRateMinthickness();57 56 void WriteLevelsetSegment(DataSet* segments); 58 57 void ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments); -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r20719 r20723 2166 2166 } 2167 2167 /*}}}*/ 2168 void FemModel::CalvingRateMinthicknessx(){/*{{{*/2169 2170 for(int i=0;i<elements->Size();i++){2171 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));2172 element->CalvingRateMinthickness();2173 }2174 }2175 /*}}}*/2176 2168 void FemModel::StrainRateparallelx(){/*{{{*/ 2177 2169 -
issm/trunk-jpl/src/c/classes/FemModel.h
r20719 r20723 95 95 void CalvingRateLevermannx(); 96 96 void CalvingRateDevx(); 97 void CalvingRateMinthicknessx();98 97 void ResetLevelset(); 99 98 #ifdef _HAVE_DAKOTA_ -
issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp
r20719 r20723 16 16 switch(calvinglaw){ 17 17 case DefaultCalvingEnum: 18 case CalvingMinthicknessEnum: 18 19 break; 19 20 case CalvingLevermannEnum: … … 27 28 femmodel->ElementOperationx(&Element::CalvingRateDev); 28 29 break; 29 case CalvingMinthicknessEnum:30 femmodel->CalvingRateMinthicknessx();31 break;32 30 default: 33 31 _error_("Caving law "<<EnumToStringx(calvinglaw)<<" not supported yet");
Note:
See TracChangeset
for help on using the changeset viewer.