Changeset 3877
- Timestamp:
- 05/21/10 12:12:38 (15 years ago)
- Location:
- issm/trunk/src/c/objects
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/objects/Elements/Penta.cpp
r3875 r3877 459 459 460 460 return tria; 461 } 462 /*}}}*/ 463 /*FUNCTION Penta::GaussFromNode {{{1*/ 464 double* Penta::GaussFromNode(Node* node){ 465 466 /*variable declaration*/ 467 int i,pos; 468 double* gauss=NULL; 469 470 /*Allocate gauss*/ 471 gauss=(double*)xmalloc(4*sizeof(double)); 472 473 for(i=0;i<6;i++){ 474 if (node==nodes[i]){ 475 switch(i){ 476 case 0: 477 gauss[0]=1.0; gauss[1]=0.0; gauss[2]=0.0; gauss[3]= -1.0; 478 return gauss; 479 case 1: 480 gauss[0]=0.0; gauss[1]=1.0; gauss[2]=0.0; gauss[3]= -1.0; 481 return gauss; 482 case 2: 483 gauss[0]=0.0; gauss[1]=0.0; gauss[2]=1.0; gauss[3]= -1.0; 484 return gauss; 485 case 3: 486 gauss[0]=1.0; gauss[1]=0.0; gauss[2]=0.0; gauss[3]=1.0; 487 return gauss; 488 case 4: 489 gauss[0]=0.0; gauss[1]=1.0; gauss[2]=0.0; gauss[3]=1.0; 490 return gauss; 491 case 5: 492 gauss[0]=0.0; gauss[1]=0.0; gauss[2]=1.0; gauss[3]=1.0; 493 return gauss; 494 } 495 } 496 } 497 498 /*output error if not found*/ 499 ISSMERROR("Node not found in Penta"); 461 500 } 462 501 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Penta.h
r3875 r3877 58 58 void* SpawnTria(int g0, int g1, int g2); 59 59 void SetClone(int* minranks); 60 double* GaussFromNode(Node* node); 60 61 61 62 /*}}}*/ -
issm/trunk/src/c/objects/Elements/Tria.cpp
r3869 r3877 3027 3027 3028 3028 friction->GetAlpha2(&alpha2,&gauss_coord[0],VxEnum,VyEnum,VzEnum); 3029 inputs->GetParameterValue(&vx, &gauss_coord[0],Vx AverageEnum);3030 inputs->GetParameterValue(&vy, &gauss_coord[0],Vy AverageEnum);3029 inputs->GetParameterValue(&vx, &gauss_coord[0],VxEnum); 3030 inputs->GetParameterValue(&vy, &gauss_coord[0],VyEnum); 3031 3031 basalfriction= alpha2*(pow(vx,(double)2.0)+pow(vy,(double)2.0)); 3032 3032 -
issm/trunk/src/c/objects/Loads/Pengrid.cpp
r3875 r3877 341 341 int reset_penalties=0; 342 342 int stabilize_constraints; 343 double* gauss=NULL; 343 344 344 345 /*pointers: */ … … 346 347 Penta* penta=NULL; 347 348 Matpar* matpar=NULL; 349 350 /*recover pointers: */ 351 node=(Node*)hnode.delivers(); 352 penta=(Penta*)helement.delivers(); 353 matpar=(Matpar*)hmatpar.delivers(); 348 354 349 355 /*check that pengrid is not a clone (penalty to be added only once)*/ … … 354 360 } 355 361 356 /*recover pointers: */357 node=(Node*)hnode.delivers();358 penta=(Penta*)helement.delivers();359 matpar=(Matpar*)hmatpar.delivers();360 361 362 //First recover pressure and temperature values, using the element: */ 362 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 363 penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum); 363 gauss=penta->GaussFromNode(node); 364 penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum); 365 penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum); 364 366 365 367 //Recover our data: 366 inputs->GetParameterValue(&reset_penalties,ResetPenaltiesEnum);367 368 meltingpoint=matpar->GetMeltingPoint(); 368 369 beta=matpar->GetBeta(); 369 370 parameters->FindParam(&stabilize_constraints,StabilizeConstraintsEnum); 370 371 371 if(reset_penalties)zigzag_counter=0;372 373 372 //Compute pressure melting point 374 373 t_pmp=meltingpoint-beta*pressure; … … 406 405 //*Assign output pointers:*/ 407 406 *punstable=unstable; 407 408 /*Clean up*/ 409 xfree((void**)&gauss); 408 410 } 409 411 /*}}}1*/ … … 476 478 /*FUNCTION Pengrid::PenaltyCreateKMatrixMelting {{{1*/ 477 479 void Pengrid::PenaltyCreateKMatrixMelting(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){ 478 479 480 480 481 int found=0; … … 487 488 int numberofdofspernode; 488 489 double meltingpoint; 490 double* gauss=NULL; 489 491 490 492 double pressure; … … 507 509 508 510 //First recover pressure and temperature values, using the element: */ 509 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 510 penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum); 511 gauss=penta->GaussFromNode(node); 512 penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum); 513 penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum); 511 514 512 515 /*recover parameters: */ … … 527 530 528 531 MatSetValues(Kgg,numdof,doflist,numdof,doflist,(const double*)Ke,ADD_VALUES); 532 533 /*Clean up*/ 534 xfree((void**)&gauss); 529 535 } 530 536 /*}}}1*/ … … 600 606 double t_pmp; 601 607 double dt,penalty_offset; 608 double* gauss=NULL; 602 609 603 610 /*pointers: */ … … 618 625 619 626 //First recover pressure and temperature values, using the element: */ 620 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 621 penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum); 627 gauss=penta->GaussFromNode(node); 628 penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum); 629 penta->inputs->GetParameterValue(&temperature,gauss,TemperatureEnum); 622 630 inputs->GetParameterValue(&melting_offset,MeltingOffsetEnum); 623 631 parameters->FindParam(&dt,DtEnum); … … 650 658 /*Add P_terms to global vector pg: */ 651 659 VecSetValues(pg,numdof,doflist,(const double*)P_terms,ADD_VALUES); 660 661 /*Clean up*/ 662 xfree((void**)&gauss); 652 663 } 653 664 /*}}}1*/ … … 668 679 double t_pmp; 669 680 double penalty_offset; 681 double* gauss=NULL; 670 682 671 683 /*pointers: */ … … 685 697 686 698 //First recover pressure and penalty_offset 687 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 699 gauss=penta->GaussFromNode(node); 700 penta->inputs->GetParameterValue(&pressure,gauss,PressureEnum); 688 701 parameters->FindParam(&penalty_offset,PenaltyOffsetEnum); 689 702 … … 698 711 /*Add P_terms to global vector pg: */ 699 712 VecSetValues(pg,numdof,doflist,(const double*)P_terms,ADD_VALUES); 713 714 /*Clean up*/ 715 xfree((void**)&gauss); 700 716 } 701 717 /*}}}1*/ … … 729 745 /*FUNCTION Pengrid::UpdateInputsFromConstant(double constant, int name) {{{1*/ 730 746 void Pengrid::UpdateInputsFromConstant(double constant, int name){ 731 /*Nothing updated yet*/ 747 switch(name){ 748 749 case MeltingOffsetEnum: 750 inputs->AddInput(new DoubleInput(name,constant)); 751 return; 752 753 } 732 754 } 733 755 /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.