Changeset 26984
- Timestamp:
- 05/04/22 05:52:26 (3 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.cpp ¶
r26983 r26984 273 273 this->ComputeSigmaVM(); 274 274 275 IssmDouble calvingratex[NUMVERTICES];276 IssmDouble calvingratey[NUMVERTICES];277 275 IssmDouble calvingrate[NUMVERTICES]; 278 276 IssmDouble vx,vy; … … 317 315 /*Assign values*/ 318 316 if(bed>sealevel){ 319 calvingratex[iv]=0.; 320 calvingratey[iv]=0.; 317 calvingrate[iv] = 0.; 321 318 } 322 319 else{ 323 calvingratex[iv]=vx*sigma_vm/sigma_max; 324 calvingratey[iv]=vy*sigma_vm/sigma_max; 325 } 326 calvingrate[iv] =sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]); 320 calvingrate[iv] = sqrt(vx*vx+vy*vy)*sigma_vm/sigma_max; 321 } 327 322 } 328 323 329 324 /*Add input*/ 330 this->AddBasalInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);331 this->AddBasalInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);332 325 this->AddBasalInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum); 333 326 this->CalvingFromRate(); 327 328 /*Extrude*/ 329 this->InputExtrude(CalvingCalvingrateEnum,-1); 334 330 this->InputExtrude(CalvingratexEnum,-1); 335 331 this->InputExtrude(CalvingrateyEnum,-1); 336 this->InputExtrude(CalvingCalvingrateEnum,-1);337 332 } 338 333 /*}}}*/ … … 2871 2866 } 2872 2867 /*}}}*/ 2873 void Penta::MovingFrontalVelocity(void){/*{{{*/ 2868 void Penta::MovingFrontalVelocity(void){/*{{{*/ 2869 2874 2870 if(!this->IsOnBase()) return; 2875 2871 int domaintype, calvinglaw, i; … … 2902 2898 case DefaultCalvingEnum: 2903 2899 case CalvingVonmisesEnum: 2904 calvingrate_input = this->GetInput(CalvingCalvingrateEnum); _assert_(calvingrate_input);2905 meltingrate_input = this->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);2906 break;2907 2900 case CalvingLevermannEnum: 2908 2901 calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input); … … 2941 2934 case DefaultCalvingEnum: 2942 2935 case CalvingVonmisesEnum: 2943 calvingrate_input->GetInputValue(&calvingrate,&gauss);2944 meltingrate_input->GetInputValue(&meltingrate,&gauss);2945 2946 if(groundedice<0) meltingrate = 0.;2947 2948 if(norm_dlsf>1.e-10)2949 for(i=0;i<dim;i++){2950 c[i]=calvingrate*dlsf[i]/norm_dlsf; m[i]=meltingrate*dlsf[i]/norm_dlsf;2951 }2952 else2953 for(i=0;i<dim;i++){2954 c[i]=0.; m[i]=0.;2955 }2956 break;2957 2958 2936 case CalvingLevermannEnum: 2959 2937 calvingratex_input->GetInputValue(&c[0],&gauss); 2960 2938 calvingratey_input->GetInputValue(&c[1],&gauss); 2961 2939 meltingrate_input->GetInputValue(&meltingrate,&gauss); 2962 norm_calving=0.; 2963 for(i=0;i<dim;i++) norm_calving+=pow(c[i],2); 2964 norm_calving=sqrt(norm_calving)+1.e-14; 2965 for(i=0;i<dim;i++) m[i]=meltingrate*c[i]/norm_calving; 2940 if(groundedice<0) meltingrate = 0.; 2941 m[0]=meltingrate*dlsf[0]/norm_dlsf; 2942 m[1]=meltingrate*dlsf[1]/norm_dlsf; 2966 2943 break; 2967 2944 … … 3036 3013 this->AddInput(MovingFrontalVxEnum,&movingfrontvx[0],P1DGEnum); 3037 3014 this->AddInput(MovingFrontalVyEnum,&movingfrontvy[0],P1DGEnum); 3038 3039 3015 this->InputExtrude(MovingFrontalVxEnum,-1); 3040 3016 this->InputExtrude(MovingFrontalVyEnum,-1); -
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp ¶
r26983 r26984 317 317 318 318 /*Now compute calving rate*/ 319 IssmDouble calvingratex[NUMVERTICES];320 IssmDouble calvingratey[NUMVERTICES];321 319 IssmDouble calvingrate[NUMVERTICES]; 322 320 IssmDouble sigma_vm,vx,vy; … … 325 323 326 324 /*Retrieve all inputs and parameters we will need*/ 327 Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);328 Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);329 Input* gr_input = this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);330 Input* bs_input = this->GetInput(BaseEnum); _assert_(bs_input);331 Input* smax_fl_input = this->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);332 Input* smax_gr_input = this->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);333 Input* sl_input = this->GetInput(SealevelEnum); _assert_(sl_input);334 Input* sigma_vm_input 325 Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input); 326 Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input); 327 Input* gr_input = this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input); 328 Input* bs_input = this->GetInput(BaseEnum); _assert_(bs_input); 329 Input* smax_fl_input = this->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input); 330 Input* smax_gr_input = this->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input); 331 Input* sl_input = this->GetInput(SealevelEnum); _assert_(sl_input); 332 Input* sigma_vm_input = this->GetInput(SigmaVMEnum); _assert_(sigma_vm_input); 335 333 336 334 /* Start looping on the number of vertices: */ … … 354 352 else 355 353 sigma_max = sigma_max_grounded; 354 356 355 /*Assign values*/ 357 356 if(bed>sealevel){ 358 calvingratex[iv]=0.; 359 calvingratey[iv]=0.; 357 calvingrate[iv] = 0.; 360 358 } 361 359 else{ 362 calvingratex[iv]=vx*sigma_vm/sigma_max; 363 calvingratey[iv]=vy*sigma_vm/sigma_max; 364 } 365 calvingrate[iv] =sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]); 360 calvingrate[iv] = sqrt(vx*vx+vy*vy)*sigma_vm/sigma_max; 361 } 366 362 } 367 363 368 364 /*Add input*/ 369 this->AddInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);370 this->AddInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);371 365 this->AddInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum); 366 this->CalvingFromRate(); 372 367 } 373 368 /*}}}*/ … … 4289 4284 IssmDouble norm_dlsf, norm_calving, calvingrate, meltingrate, groundedice; 4290 4285 IssmDouble migrationmax, calvinghaf, heaviside, haf_eps; 4291 IssmDouble 4292 IssmDouble 4293 IssmDouble 4294 IssmDouble 4286 IssmDouble xyz_list[NUMVERTICES][3]; 4287 IssmDouble movingfrontvx[NUMVERTICES]; 4288 IssmDouble movingfrontvy[NUMVERTICES]; 4289 IssmDouble vel; 4295 4290 4296 4291 /* Get node coordinates and dof list: */ … … 4326 4321 switch(calvinglaw){ 4327 4322 case DefaultCalvingEnum: 4323 case CalvingVonmisesEnum: 4328 4324 calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input); 4329 4325 calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input); 4330 meltingrate_input = this->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);4331 break;4332 case CalvingVonmisesEnum:4333 calvingrate_input = this->GetInput(CalvingCalvingrateEnum); _assert_(calvingrate_input);4334 4326 meltingrate_input = this->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input); 4335 4327 break; … … 4389 4381 switch(calvinglaw){ 4390 4382 case DefaultCalvingEnum: 4383 case CalvingVonmisesEnum: 4391 4384 calvingratex_input->GetInputValue(&c[0],&gauss); 4392 4385 calvingratey_input->GetInputValue(&c[1],&gauss); … … 4401 4394 } 4402 4395 } 4403 break;4404 case CalvingVonmisesEnum:4405 calvingrate_input->GetInputValue(&calvingrate,&gauss);4406 meltingrate_input->GetInputValue(&meltingrate,&gauss);4407 if(groundedice<0) meltingrate = 0.;4408 4409 if(norm_dlsf>1.e-10)4410 for(i=0;i<dim;i++){4411 c[i]=calvingrate*dlsf[i]/norm_dlsf; m[i]=meltingrate*dlsf[i]/norm_dlsf;4412 }4413 else4414 for(i=0;i<dim;i++){4415 c[i]=0.; m[i]=0.;4416 }4417 4396 break; 4418 4397
Note:
See TracChangeset
for help on using the changeset viewer.