Changeset 15740
- Timestamp:
- 08/07/13 10:57:10 (12 years ago)
- Location:
- issm/trunk-jpl/src/c/classes
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp
r15654 r15740 221 221 222 222 switch(analysis_type){ 223 #ifdef _HAVE_DIAGNOSTIC_224 case DiagnosticHorizAnalysisEnum: case AdjointHorizAnalysisEnum:225 Ke=PenaltyCreateKMatrixDiagnosticFS(kmax);226 break;227 #endif228 223 #ifdef _HAVE_THERMAL_ 229 224 case ThermalAnalysisEnum: … … 448 443 } 449 444 /*}}}*/ 450 #ifdef _HAVE_DIAGNOSTIC_451 /*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticFS {{{*/452 ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax){453 454 const int numdof = NUMVERTICES *NDOF4;455 IssmDouble slope[2];456 IssmDouble penalty_offset;457 int approximation;458 459 Penta* penta=(Penta*)element;460 461 /*Initialize Element vector and return if necessary*/462 penta->inputs->GetInputValue(&approximation,ApproximationEnum);463 if(approximation!=FSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;464 ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,FSApproximationEnum);465 466 /*Retrieve all inputs and parameters*/467 parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);468 penta->GetInputValue(&slope[0],node,BedSlopeXEnum);469 penta->GetInputValue(&slope[1],node,BedSlopeYEnum);470 471 /*Create elementary matrix: add penalty to constrain wb (wb=ub*db/dx+vb*db/dy)*/472 Ke->values[2*NDOF4+0]=-slope[0]*kmax*pow((IssmDouble)10.0,penalty_offset);473 Ke->values[2*NDOF4+1]=-slope[1]*kmax*pow((IssmDouble)10.0,penalty_offset);474 Ke->values[2*NDOF4+2]= kmax*pow((IssmDouble)10,penalty_offset);475 476 /*Transform Coordinate System*/477 TransformStiffnessMatrixCoord(Ke,&node,NUMVERTICES,XYZEnum);478 479 /*Clean up and return*/480 return Ke;481 }482 /*}}}*/483 #endif484 445 #ifdef _HAVE_THERMAL_ 485 446 /*FUNCTION Pengrid::ConstraintActivateThermal {{{*/ … … 574 535 /*Add penalty load*/ 575 536 if (temperature<t_pmp){ //If T<Tpmp, there must be no melting. Therefore, melting should be constrained to 0 when T<Tpmp, instead of using spcs, use penalties 576 Ke->values[0]=kmax*pow( (IssmDouble)10,penalty_factor);537 Ke->values[0]=kmax*pow(10.,penalty_factor); 577 538 } 578 539 … … 594 555 parameters->FindParam(&penalty_factor,ThermalPenaltyFactorEnum); 595 556 596 Ke->values[0]=kmax*pow( (IssmDouble)10,penalty_factor);557 Ke->values[0]=kmax*pow(10.,penalty_factor); 597 558 598 559 /*Clean up and return*/ … … 635 596 } 636 597 else{ 637 if (reCast<bool>(dt)) pe->values[0]=melting_offset*pow( (IssmDouble)10,penalty_factor)*(temperature-t_pmp)/dt;638 else pe->values[0]=melting_offset*pow( (IssmDouble)10,penalty_factor)*(temperature-t_pmp);598 if (reCast<bool>(dt)) pe->values[0]=melting_offset*pow(10.,penalty_factor)*(temperature-t_pmp)/dt; 599 else pe->values[0]=melting_offset*pow(10.,penalty_factor)*(temperature-t_pmp); 639 600 } 640 601 … … 664 625 t_pmp=matpar->GetMeltingPoint()-matpar->GetBeta()*pressure; 665 626 666 pe->values[0]=kmax*pow( (IssmDouble)10,penalty_factor)*t_pmp;627 pe->values[0]=kmax*pow(10.,penalty_factor)*t_pmp; 667 628 668 629 /*Clean up and return*/ -
issm/trunk-jpl/src/c/classes/Loads/Pengrid.h
r15564 r15740 87 87 /*}}}*/ 88 88 /*Pengrid management {{{*/ 89 #ifdef _HAVE_DIAGNOSTIC_90 ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);91 #endif92 89 #ifdef _HAVE_THERMAL_ 93 90 ElementMatrix* PenaltyCreateKMatrixThermal(IssmDouble kmax); -
issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp
r15567 r15740 340 340 341 341 //Create elementary matrix: add penalty to 342 Ke->values[0*numdof+0]=+kmax*pow( (IssmDouble)10.0,penalty_offset);343 Ke->values[0*numdof+2]=-kmax*pow( (IssmDouble)10.0,penalty_offset);344 Ke->values[2*numdof+0]=-kmax*pow( (IssmDouble)10.0,penalty_offset);345 Ke->values[2*numdof+2]=+kmax*pow( (IssmDouble)10.0,penalty_offset);346 347 Ke->values[1*numdof+1]=+kmax*pow( (IssmDouble)10.0,penalty_offset);348 Ke->values[1*numdof+3]=-kmax*pow( (IssmDouble)10.0,penalty_offset);349 Ke->values[3*numdof+1]=-kmax*pow( (IssmDouble)10.0,penalty_offset);350 Ke->values[3*numdof+3]=+kmax*pow( (IssmDouble)10.0,penalty_offset);342 Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset); 343 Ke->values[0*numdof+2]=-kmax*pow(10.,penalty_offset); 344 Ke->values[2*numdof+0]=-kmax*pow(10.,penalty_offset); 345 Ke->values[2*numdof+2]=+kmax*pow(10.,penalty_offset); 346 347 Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_offset); 348 Ke->values[1*numdof+3]=-kmax*pow(10.,penalty_offset); 349 Ke->values[3*numdof+1]=-kmax*pow(10.,penalty_offset); 350 Ke->values[3*numdof+3]=+kmax*pow(10.,penalty_offset); 351 351 352 352 /*Clean up and return*/ … … 367 367 368 368 //Create elementary matrix: add penalty to 369 Ke->values[0*numdof+0]=+kmax*pow( (IssmDouble)10.0,penalty_offset);370 Ke->values[0*numdof+4]=-kmax*pow( (IssmDouble)10.0,penalty_offset);371 Ke->values[4*numdof+0]=-kmax*pow( (IssmDouble)10.0,penalty_offset);372 Ke->values[4*numdof+4]=+kmax*pow( (IssmDouble)10.0,penalty_offset);373 374 Ke->values[1*numdof+1]=+kmax*pow( (IssmDouble)10.0,penalty_offset);375 Ke->values[1*numdof+5]=-kmax*pow( (IssmDouble)10.0,penalty_offset);376 Ke->values[5*numdof+1]=-kmax*pow( (IssmDouble)10.0,penalty_offset);377 Ke->values[5*numdof+5]=+kmax*pow( (IssmDouble)10.0,penalty_offset);378 379 Ke->values[2*numdof+2]=+kmax*pow( (IssmDouble)10.0,penalty_offset);380 Ke->values[2*numdof+6]=-kmax*pow( (IssmDouble)10.0,penalty_offset);381 Ke->values[6*numdof+2]=-kmax*pow( (IssmDouble)10.0,penalty_offset);382 Ke->values[6*numdof+6]=+kmax*pow( (IssmDouble)10.0,penalty_offset);383 384 Ke->values[3*numdof+3]=+kmax*pow( (IssmDouble)10.0,penalty_offset);385 Ke->values[3*numdof+7]=-kmax*pow( (IssmDouble)10.0,penalty_offset);386 Ke->values[7*numdof+3]=-kmax*pow( (IssmDouble)10.0,penalty_offset);387 Ke->values[7*numdof+7]=+kmax*pow( (IssmDouble)10.0,penalty_offset);369 Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset); 370 Ke->values[0*numdof+4]=-kmax*pow(10.,penalty_offset); 371 Ke->values[4*numdof+0]=-kmax*pow(10.,penalty_offset); 372 Ke->values[4*numdof+4]=+kmax*pow(10.,penalty_offset); 373 374 Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_offset); 375 Ke->values[1*numdof+5]=-kmax*pow(10.,penalty_offset); 376 Ke->values[5*numdof+1]=-kmax*pow(10.,penalty_offset); 377 Ke->values[5*numdof+5]=+kmax*pow(10.,penalty_offset); 378 379 Ke->values[2*numdof+2]=+kmax*pow(10.,penalty_offset); 380 Ke->values[2*numdof+6]=-kmax*pow(10.,penalty_offset); 381 Ke->values[6*numdof+2]=-kmax*pow(10.,penalty_offset); 382 Ke->values[6*numdof+6]=+kmax*pow(10.,penalty_offset); 383 384 Ke->values[3*numdof+3]=+kmax*pow(10.,penalty_offset); 385 Ke->values[3*numdof+7]=-kmax*pow(10.,penalty_offset); 386 Ke->values[7*numdof+3]=-kmax*pow(10.,penalty_offset); 387 Ke->values[7*numdof+7]=+kmax*pow(10.,penalty_offset); 388 388 389 389 /*Clean up and return*/ … … 404 404 405 405 //Create elementary matrix: add penalty to 406 Ke->values[0*numdof+0]=+kmax*pow( (IssmDouble)10.0,penalty_factor);407 Ke->values[0*numdof+1]=-kmax*pow( (IssmDouble)10.0,penalty_factor);408 Ke->values[1*numdof+0]=-kmax*pow( (IssmDouble)10.0,penalty_factor);409 Ke->values[1*numdof+1]=+kmax*pow( (IssmDouble)10.0,penalty_factor);406 Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_factor); 407 Ke->values[0*numdof+1]=-kmax*pow(10.,penalty_factor); 408 Ke->values[1*numdof+0]=-kmax*pow(10.,penalty_factor); 409 Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_factor); 410 410 411 411 /*Clean up and return*/ -
issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp
r15450 r15740 576 576 if(shelf){ 577 577 /*We are on an ice shelf, hydrostatic equilibrium is used to determine the pressure for water fill: */ 578 pressure=rho_ice*gravity*pow(thickness, (IssmDouble)2)/(IssmDouble)2 - rho_water*gravity*pow(bed,(IssmDouble)2)/(IssmDouble)2;578 pressure=rho_ice*gravity*pow(thickness,2)/2.- rho_water*gravity*pow(bed,2)/2.; 579 579 } 580 580 else{ 581 581 //We are on an icesheet, we assume the water column fills the entire front: */ 582 pressure=rho_ice*gravity*pow(thickness, (IssmDouble)2)/(IssmDouble)2 - rho_water*gravity*pow(thickness,(IssmDouble)2)/(IssmDouble)2;582 pressure=rho_ice*gravity*pow(thickness,2)/2.- rho_water*gravity*pow(thickness,2)/2.; 583 583 } 584 584 } 585 585 else if(fill==AirEnum){ 586 pressure=rho_ice*gravity*pow(thickness, (IssmDouble)2)/(IssmDouble)2; //icefront on an ice sheet, pressure imbalance ice vs air.586 pressure=rho_ice*gravity*pow(thickness,2)/2.; //icefront on an ice sheet, pressure imbalance ice vs air. 587 587 } 588 588 else if(fill==IceEnum){ //icefront finding itself against another icefront (pressure imbalance is fully compensated, ice vs ice) … … 593 593 if(!shelf) _error_("fill type " << fill << " not supported on ice sheets yet."); 594 594 595 pressure_litho=rho_ice*gravity*pow(thickness, (IssmDouble)2)/(IssmDouble)2;595 pressure_litho=rho_ice*gravity*pow(thickness,2)/2.; 596 596 pressure_air=0; 597 pressure_melange=rho_ice*gravity*pow(fraction*thickness, (IssmDouble)2)/(IssmDouble)2;597 pressure_melange=rho_ice*gravity*pow(fraction*thickness,2)/2.; 598 598 pressure_water=1.0/2.0*rho_water*gravity* ( pow(bed,2.0)-pow(rho_ice/rho_water*fraction*thickness,2.0) ); 599 599 … … 684 684 /*increase melange fraction: */ 685 685 this->fraction+=fractionincrement; 686 if (this->fraction>1)this->fraction= (IssmDouble)1.0;686 if (this->fraction>1)this->fraction=1.; 687 687 //_printf_("riftfront " << this->Id() << " fraction: " << this->fraction << "\n"); 688 688 } -
issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
r15654 r15740 249 249 else{ 250 250 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){ 251 viscosity=0.5*pow( (IssmDouble)10,(IssmDouble)14);251 viscosity=0.5*pow(10.,14); 252 252 } 253 253 else{ … … 261 261 if(A==0){ 262 262 /*Maxiviscositym viscosity for 0 shear areas: */ 263 viscosity=2.5*pow(10.,17 .);263 viscosity=2.5*pow(10.,17); 264 264 } 265 265 else{ … … 317 317 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 318 318 (epsilon[3]==0) && (epsilon[4]==0)){ 319 viscosity3d=0.5*pow( (IssmDouble)10,(IssmDouble)14);319 viscosity3d=0.5*pow(10.,14); 320 320 } 321 321 else{ … … 332 332 if(A==0){ 333 333 /*Maxiviscosity3dm viscosity for 0 shear areas: */ 334 viscosity3d=2.25*pow( (IssmDouble)10,(IssmDouble)17);334 viscosity3d=2.25*pow(10.,17); 335 335 } 336 336 else{ … … 378 378 379 379 /*Get B and n*/ 380 eps0=pow( (IssmDouble)10,(IssmDouble)-27);380 eps0=pow(10.,(IssmDouble)-27); 381 381 n=GetN(); 382 382 Z=GetZ(); … … 390 390 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 391 391 (epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){ 392 viscosity3d=0.5*pow( (IssmDouble)10,(IssmDouble)14);392 viscosity3d=0.5*pow(10.,14); 393 393 } 394 394 else{ … … 406 406 if(A==0){ 407 407 /*Maxiviscosity3dm viscosity for 0 shear areas: */ 408 viscosity3d=2.25*pow( (IssmDouble)10,(IssmDouble)17);408 viscosity3d=2.25*pow(10.,17); 409 409 } 410 410 else{ … … 459 459 if(A==0){ 460 460 /*Maximum viscosity_complement for 0 shear areas: */ 461 viscosity_complement=2.25*pow( (IssmDouble)10,(IssmDouble)17);461 viscosity_complement=2.25*pow(10.,17); 462 462 } 463 463 else{ … … 468 468 } 469 469 else{ 470 viscosity_complement=4.5*pow( (IssmDouble)10,(IssmDouble)17);470 viscosity_complement=4.5*pow(10.,17); 471 471 } 472 472 … … 515 515 if(A==0){ 516 516 /*Maximum viscosity_complement for 0 shear areas: */ 517 viscosity_complement=2.25*pow( (IssmDouble)10,(IssmDouble)17);517 viscosity_complement=2.25*pow(10.,17); 518 518 } 519 519 else{ … … 524 524 } 525 525 else{ 526 viscosity_complement=4.5*pow( (IssmDouble)10,(IssmDouble)17);526 viscosity_complement=4.5*pow(10.,17); 527 527 } 528 528 … … 552 552 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 553 553 (epsilon[3]==0) && (epsilon[4]==0)){ 554 mu_prime=0.5*pow( (IssmDouble)10,(IssmDouble)14);554 mu_prime=0.5*pow(10.,14); 555 555 } 556 556 else{ … … 586 586 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 587 587 (epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){ 588 mu_prime=0.5*pow( (IssmDouble)10,(IssmDouble)14);588 mu_prime=0.5*pow(10.,14); 589 589 } 590 590 else{ … … 620 620 621 621 if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){ 622 mu_prime=0.5*pow( (IssmDouble)10,(IssmDouble)14);622 mu_prime=0.5*pow(10.,14); 623 623 } 624 624 else{
Note:
See TracChangeset
for help on using the changeset viewer.