Changeset 3647
- Timestamp:
- 04/30/10 12:38:29 (15 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/Inputs.cpp
r3633 r3647 102 102 } 103 103 /*}}}*/ 104 /*FUNCTION Inputs::GetParameterValue AtNode(double* pvalue, Node* node, int enum_type){{{1*/105 void Inputs::GetParameterValue AtNode(double* pvalue,Node* node,int enum_type){104 /*FUNCTION Inputs::GetParameterValue(double* pvalue, Node* node, int enum_type){{{1*/ 105 void Inputs::GetParameterValue(double* pvalue,Node* node,int enum_type){ 106 106 107 107 /*given a node, instead of a gauss point, we want to recover a value: probably in an element!: */ … … 124 124 125 125 /*Ok, we have an input if we made it here, request the input to return the values: */ 126 input->GetParameterValueAtNode(pvalue,node); 126 input->GetParameterValue(pvalue,node); 127 } 128 /*}}}*/ 129 /*FUNCTION Inputs::GetParameterValue(double* pvalue, Node* node1, Node* node2,int enum_type){{{1*/ 130 void Inputs::GetParameterValue(double* pvalue,Node* node1, Node* node2,double gauss_coord,int enum_type){ 131 132 /*given a node, instead of a gauss point, we want to recover a value: probably in an element!: */ 133 134 vector<Object*>::iterator object; 135 Input* input=NULL; 136 137 /*Go through inputs and check whether any input with the same name is already in: */ 138 for ( object=objects.begin() ; object < objects.end(); object++ ){ 139 140 input=(Input*)(*object); 141 if (input->EnumType()==enum_type)break; 142 } 143 144 if (!input){ 145 /*we could not find an input with the correct enum type. No defaults values were provided, 146 * error out: */ 147 ISSMERROR("%s%i"," could not find input with enum type ",enum_type); 148 } 149 150 /*Ok, we have an input if we made it here, request the input to return the values: */ 151 input->GetParameterValue(pvalue,node1,node2,gauss_coord); 127 152 } 128 153 /*}}}*/ -
issm/trunk/src/c/DataSet/Inputs.h
r3633 r3647 21 21 /*}}}*/ 22 22 /*numerics: {{{1*/ 23 int AddInput(Input* in_input); 24 23 25 void GetParameterValue(bool* pvalue,int enum_type); 24 26 void GetParameterValue(int* pvalue,int enum_type); 25 27 void GetParameterValue(double* pvalue,int enum_type); 26 void GetParameterValueAtNode(double* pvalue,Node* node,int enum_type); 28 void GetParameterValue(double* pvalue,Node* node,int enum_type); 29 void GetParameterValue(double* pvalue,Node* node1,Node* node2,double gauss_coord,int enum_type); 27 30 void GetParameterValue(double* pvalue,double* gauss,int enum_type); 28 31 void GetParameterValue(double* pvalue,double* gauss,int enum_type,double defaultvalue); 32 29 33 void GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type); 30 34 void GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type,double* defaultvalues); 31 int AddInput(Input* in_input);35 32 36 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss,int enum_type); 33 37 void GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum); -
issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
r3642 r3647 185 185 ConvergedEnum, 186 186 SegmentOnIceShelfEnum, 187 FillEnum 187 FillEnum, 188 InternalEnum, 189 BoundaryEnum 188 190 /*}}}*/ 189 191 -
issm/trunk/src/c/objects/Numericalflux.cpp
r3645 r3647 54 54 this->parameters=numericalflux_parameters; 55 55 } 56 /*}}}*/ 57 /*FUNCTION Numericalflux::Numericalflux(int id, int i, IoModel* iomodel) {{{1*/ 56 /*}}}*//*FUNCTION Numericalflux::Numericalflux(int id, int i, IoModel* iomodel) {{{1*/ 58 57 Numericalflux::Numericalflux(int numericalflux_id,int i, IoModel* iomodel){ 59 58 … … 148 147 } 149 148 /*}}}*/ 149 150 150 /*FUNCTION Numericalflux::~Numericalflux(){{{1*/ 151 151 Numericalflux::~Numericalflux(){ … … 288 288 void Numericalflux::CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type){ 289 289 290 if (strcmp(type,"internal")==0){ 291 292 CreateKMatrixInternal(Kgg,inputs,analysis_type,sub_analysis_type); 293 } 294 else if (strcmp(type,"boundary")==0){ 295 296 CreateKMatrixBoundary(Kgg,inputs,analysis_type,sub_analysis_type); 290 int type; 291 292 /*recover type: */ 293 inputs->GetParameterValue(&type,TypeEnum); 294 295 if (type==InternalEnum){ 296 297 CreateKMatrixInternal(Kgg,analysis_type,sub_analysis_type); 298 } 299 else if (type==BoundaryEnum){ 300 301 CreateKMatrixBoundary(Kgg,analysis_type,sub_analysis_type); 297 302 } 298 303 else ISSMERROR("type not supported yet"); … … 332 337 333 338 /*input parameters for structural analysis (diagnostic): */ 334 double vx_list[numgrids]={0.0};335 double vy_list[numgrids]={0.0};336 339 double vx,vy; 337 340 double UdotN; 338 341 double dt; 339 int dofs[1]={0};340 342 int found; 341 343 342 ParameterInputs* inputs=NULL; 343 344 /*recover pointers: */ 345 inputs=(ParameterInputs*)vinputs; 346 347 /*recover extra inputs from users, at current convergence iteration: */ 348 found=inputs->Recover("vx_average",&vx_list[0],1,dofs,numgrids,(void**)nodes); 349 if(!found)ISSMERROR(" could not find vx_average in inputs!"); 350 found=inputs->Recover("vy_average",&vy_list[0],1,dofs,numgrids,(void**)nodes); 351 if(!found)ISSMERROR(" could not find vy_average in inputs!"); 344 /*dynamic objects pointed to by hooks: */ 345 Node** nodes=NULL; 346 Tria** trias=NULL; 347 348 /*recover objects from hooks: */ 349 nodes=(Node**)hnodes.deliverp(); 350 trias=(Tria**)helements.deliverp(); 351 352 /*recover parameters: */ 352 353 if (analysis_type==Prognostic2AnalysisEnum){ 353 if(!inputs->Recover("dt",&dt))ISSMERROR(" could not find dt in inputs!");354 parameters->FindParam(&dt,"dt"); 354 355 } 355 356 else if (analysis_type==Balancedthickness2AnalysisEnum){ … … 381 382 382 383 //Get vx, vy and v.n 383 GetParameterValue(&vx, &vx_list[0],gauss_coord); 384 GetParameterValue(&vy, &vy_list[0],gauss_coord); 384 trias[0]->inputs->GetParameterValue(&vx, nodes[0],nodes[1],gauss_coord,VxAverageEnum); 385 trias[0]->inputs->GetParameterValue(&vy, nodes[0],nodes[1],gauss_coord,VyAverageEnum); 386 385 387 UdotN=vx*normal[0]+vy*normal[1]; 386 388 if (fabs(UdotN)<1.0e-9 && analysis_type==Balancedthickness2AnalysisEnum) printf("Edge number %i has a flux very small (u.n = %g ), which could lead to unaccurate results\n",id,UdotN); … … 447 449 448 450 /*input parameters for structural analysis (diagnostic): */ 449 double vx_list[numgrids]={0.0};450 double vy_list[numgrids]={0.0};451 451 double vx,vy; 452 452 double mean_vx; … … 457 457 int found; 458 458 459 ParameterInputs* inputs=NULL; 460 461 /*recover pointers: */ 462 inputs=(ParameterInputs*)vinputs; 463 464 /*recover extra inputs from users, at current convergence iteration: */ 465 found=inputs->Recover("vx_average",&vx_list[0],1,dofs,numgrids,(void**)nodes); 466 if(!found)ISSMERROR(" could not find vx_average in inputs!"); 467 found=inputs->Recover("vy_average",&vy_list[0],1,dofs,numgrids,(void**)nodes); 468 if(!found)ISSMERROR(" could not find vy_average in inputs!"); 459 /*dynamic objects pointed to by hooks: */ 460 Node** nodes=NULL; 461 Tria** trias=NULL; 462 463 /*recover objects from hooks: */ 464 nodes=(Node**)hnodes.deliverp(); 465 trias=(Tria**)helements.deliverp(); 466 467 /*recover parameters: */ 469 468 if (analysis_type==Prognostic2AnalysisEnum){ 470 if(!inputs->Recover("dt",&dt))ISSMERROR(" could not find dt in inputs!");469 parameters->FindParam(&dt,"dt"); 471 470 } 472 471 else if (analysis_type==Balancedthickness2AnalysisEnum){ … … 477 476 ISSMERROR("analysis_type %i not supported yet"); 478 477 } 479 478 480 479 /* Get node coordinates, dof list and normal vector: */ 481 480 GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids); … … 484 483 485 484 /*Check wether it is an inflow or outflow BC*/ 486 mean_vx=(vx_list[0]+vx_list[1])/2.0;487 mean_vy=(vy_list[0]+vy_list[1])/2.0;485 trias[0]->inputs->GetParameterValue(&mean_vx, nodes[0],nodes[1],.5,VxAverageEnum); 486 trias[0]->inputs->GetParameterValue(&mean_vy, nodes[0],nodes[1],.5,VyAverageEnum); 488 487 UdotN=mean_vx*normal[0]+mean_vy*normal[1]; 489 488 if (UdotN<=0){ … … 507 506 508 507 //Get vx, vy and v.n 509 GetParameterValue(&vx, &vx_list[0],gauss_coord); 510 GetParameterValue(&vy, &vy_list[0],gauss_coord); 508 trias[0]->inputs->GetParameterValue(&vx, nodes[0],nodes[1],gauss_coord,VxAverageEnum); 509 trias[0]->inputs->GetParameterValue(&vy, nodes[0],nodes[1],gauss_coord,VyAverageEnum); 510 511 511 UdotN=vx*normal[0]+vy*normal[1]; 512 512 … … 539 539 void Numericalflux::CreatePVector(Vec pg, int analysis_type,int sub_analysis_type){ 540 540 541 if (strcmp(type,"internal")==0){ 542 543 CreatePVectorInternal(pg,inputs,analysis_type,sub_analysis_type); 544 } 545 else if (strcmp(type,"boundary")==0){ 546 547 CreatePVectorBoundary(pg,inputs,analysis_type,sub_analysis_type); 541 int type; 542 543 /*recover type: */ 544 inputs->GetParameterValue(&type,TypeEnum); 545 546 if (type==InternalEnum){ 547 548 CreatePVectorInternal(pg,analysis_type,sub_analysis_type); 549 } 550 else if (type==BoundaryEnum){ 551 552 CreatePVectorBoundary(pg,analysis_type,sub_analysis_type); 548 553 } 549 554 else ISSMERROR("type not supported yet"); … … 588 593 589 594 /*input parameters for structural analysis (diagnostic): */ 590 double vx_list[numgrids]={0.0};591 double vy_list[numgrids]={0.0};592 595 double vx,vy; 593 596 double mean_vx; … … 599 602 int found; 600 603 601 ParameterInputs* inputs=NULL; 602 603 /*recover pointers: */ 604 inputs=(ParameterInputs*)vinputs; 605 606 /*recover extra inputs from users, at current convergence iteration: */ 607 found=inputs->Recover("vx_average",&vx_list[0],1,dofs,numgrids,(void**)nodes); 608 if(!found)ISSMERROR(" could not find vx_average in inputs!"); 609 found=inputs->Recover("vy_average",&vy_list[0],1,dofs,numgrids,(void**)nodes); 610 if(!found)ISSMERROR(" could not find vy_average in inputs!"); 604 /*dynamic objects pointed to by hooks: */ 605 Node** nodes=NULL; 606 Tria** trias=NULL; 607 608 /*recover objects from hooks: */ 609 nodes=(Node**)hnodes.deliverp(); 610 trias=(Tria**)helements.deliverp(); 611 612 /*recover parameters: */ 611 613 if (analysis_type==Prognostic2AnalysisEnum){ 612 if(!inputs->Recover("dt",&dt))ISSMERROR(" could not find dt in inputs!");614 parameters->FindParam(&dt,"dt"); 613 615 } 614 616 else if (analysis_type==Balancedthickness2AnalysisEnum){ … … 619 621 ISSMERROR("analysis_type %i not supported yet"); 620 622 } 621 623 622 624 /* Get node coordinates, dof list and normal vector: */ 623 625 GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids); … … 626 628 627 629 /*Check wether it is an inflow or outflow BC*/ 628 mean_vx=(vx_list[0]+vx_list[1])/2.0;629 mean_vy=(vy_list[0]+vy_list[1])/2.0;630 trias[0]->inputs->GetParameterValue(&mean_vx, nodes[0],nodes[1],.5,VxAverageEnum); 631 trias[0]->inputs->GetParameterValue(&mean_vy, nodes[0],nodes[1],.5,VyAverageEnum); 630 632 UdotN=mean_vx*normal[0]+mean_vy*normal[1]; 631 633 if (UdotN>0){ … … 649 651 650 652 //Get vx, vy and v.n 651 GetParameterValue(&vx, &vx_list[0],gauss_coord); 652 GetParameterValue(&vy, &vy_list[0],gauss_coord); 653 GetParameterValue(&thickness,&h[0], gauss_coord); 653 trias[0]->inputs->GetParameterValue(&vx, nodes[0],nodes[1],gauss_coord,VxAverageEnum); 654 trias[0]->inputs->GetParameterValue(&vy, nodes[0],nodes[1],gauss_coord,VyAverageEnum); 655 trias[0]->inputs->GetParameterValue(&thickness, nodes[0],nodes[1],gauss_coord,ThicknessEnum); 656 654 657 UdotN=vx*normal[0]+vy*normal[1]; 655 658 … … 701 704 int doflist_per_node[MAXDOFSPERNODE]; 702 705 int numberofdofspernode; 706 707 /*dynamic objects pointed to by hooks: */ 708 Node** nodes=NULL; 709 int type; 710 711 /*recover objects from hooks: */ 712 nodes=(Node**)hnodes.deliverp(); 703 713 704 if (strcmp(type,"internal")==0){ 714 /*recover type: */ 715 inputs->GetParameterValue(&type,TypeEnum); 716 717 if (type==InternalEnum){ 705 718 for(i=0;i<4;i++){ 706 719 nodes[i]->GetDofList(&doflist_per_node[0],&numberofdofspernode); … … 710 723 } 711 724 } 712 else if ( strcmp(type,"boundary")==0){725 else if (type==BoundaryEnum){ 713 726 for(i=0;i<2;i++){ 714 727 nodes[i]->GetDofList(&doflist_per_node[0],&numberofdofspernode); -
issm/trunk/src/c/objects/Numericalflux.h
r3642 r3647 28 28 Numericalflux(int numericalflux_id,int* numericalflux_node_ids,int numnodes, int* numericalflux_element_ids, int numelements); 29 29 Numericalflux(int numericalflux_id,Hook* numericalflux_hnodes, Hook* numericalflux_helements, Parameters* parameters, Inputs* numericalflux_inputs); 30 Numericalflux::Numericalflux(int numericalflux_id,int i, IoModel* iomodel); 30 31 ~Numericalflux(); 31 32 /*}}}*/ -
issm/trunk/src/c/objects/Pengrid.cpp
r3632 r3647 364 364 365 365 //First recover pressure and temperature values, using the element: */ 366 penta->inputs->GetParameterValue AtNode(&pressure,node,PressureEnum);367 penta->inputs->GetParameterValue AtNode(&temperature,node,TemperatureEnum);366 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 367 penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum); 368 368 369 369 //Recover our data: … … 463 463 464 464 //recover slope: */ 465 penta->inputs->GetParameterValue AtNode(&slope[0],node,BedSlopexEnum);466 penta->inputs->GetParameterValue AtNode(&slope[1],node,BedSlopeyEnum);465 penta->inputs->GetParameterValue(&slope[0],node,BedSlopexEnum); 466 penta->inputs->GetParameterValue(&slope[1],node,BedSlopeyEnum); 467 467 468 468 /*recover parameters: */ … … 511 511 512 512 //First recover pressure and temperature values, using the element: */ 513 penta->inputs->GetParameterValue AtNode(&pressure,node,PressureEnum);514 penta->inputs->GetParameterValue AtNode(&temperature,node,TemperatureEnum);513 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 514 penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum); 515 515 516 516 /*recover parameters: */ … … 622 622 623 623 //First recover pressure and temperature values, using the element: */ 624 penta->inputs->GetParameterValue AtNode(&pressure,node,PressureEnum);625 penta->inputs->GetParameterValue AtNode(&temperature,node,TemperatureEnum);624 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 625 penta->inputs->GetParameterValue(&temperature,node,TemperatureEnum); 626 626 inputs->GetParameterValue(&melting_offset,MeltingOffsetEnum); 627 627 parameters->FindParam(&dt,"dt"); … … 689 689 690 690 //First recover pressure and penalty_offset 691 penta->inputs->GetParameterValue AtNode(&pressure,node,PressureEnum);691 penta->inputs->GetParameterValue(&pressure,node,PressureEnum); 692 692 parameters->FindParam(&penalty_offset,"penalty_offset"); 693 693 -
issm/trunk/src/c/objects/Riftfront.cpp
r3637 r3647 338 338 339 339 /*First recover velocity: */ 340 tria1->inputs->GetParameterValue AtNode(&vx1,nodes[0],VxEnum);341 tria2->inputs->GetParameterValue AtNode(&vx2,nodes[1],VxEnum);342 tria1->inputs->GetParameterValue AtNode(&vy1,nodes[0],VyEnum);343 tria2->inputs->GetParameterValue AtNode(&vy2,nodes[1],VyEnum);340 tria1->inputs->GetParameterValue(&vx1,nodes[0],VxEnum); 341 tria2->inputs->GetParameterValue(&vx2,nodes[1],VxEnum); 342 tria1->inputs->GetParameterValue(&vy1,nodes[0],VyEnum); 343 tria2->inputs->GetParameterValue(&vy2,nodes[1],VyEnum); 344 344 345 345 /*Node 1 faces node 2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */ … … 478 478 479 479 /*recover velocity: */ 480 tria1->inputs->GetParameterValue AtNode(&vx1,nodes[0],VxEnum);481 tria2->inputs->GetParameterValue AtNode(&vx2,nodes[1],VxEnum);482 tria1->inputs->GetParameterValue AtNode(&vy1,nodes[0],VyEnum);483 tria2->inputs->GetParameterValue AtNode(&vy2,nodes[1],VyEnum);480 tria1->inputs->GetParameterValue(&vx1,nodes[0],VxEnum); 481 tria2->inputs->GetParameterValue(&vx2,nodes[1],VxEnum); 482 tria1->inputs->GetParameterValue(&vy1,nodes[0],VyEnum); 483 tria2->inputs->GetParameterValue(&vy2,nodes[1],VyEnum); 484 484 485 485 /*Grid 1 faces grid2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */ … … 561 561 562 562 /*Recover thickness: */ 563 tria1->inputs->GetParameterValue AtNode(&h[0],nodes[0],ThicknessEnum);564 tria2->inputs->GetParameterValue AtNode(&h[1],nodes[1],ThicknessEnum);563 tria1->inputs->GetParameterValue(&h[0],nodes[0],ThicknessEnum); 564 tria2->inputs->GetParameterValue(&h[1],nodes[1],ThicknessEnum); 565 565 566 566 if (h[0]!=h[1])ISSMERROR(" different thicknesses not supported for rift fronts"); … … 688 688 689 689 /*get thickness: */ 690 tria1->inputs->GetParameterValue AtNode(&h[0],nodes[0],ThicknessEnum);691 tria2->inputs->GetParameterValue AtNode(&h[1],nodes[1],ThicknessEnum);690 tria1->inputs->GetParameterValue(&h[0],nodes[0],ThicknessEnum); 691 tria2->inputs->GetParameterValue(&h[1],nodes[1],ThicknessEnum); 692 692 693 693 if (h[0]!=h[1])ISSMERROR(" different thicknesses not supported for rift fronts"); 694 694 thickness=h[0]; 695 695 696 tria1->inputs->GetParameterValue AtNode(&b[0],nodes[0],BedEnum);697 tria2->inputs->GetParameterValue AtNode(&b[1],nodes[1],BedEnum);696 tria1->inputs->GetParameterValue(&b[0],nodes[0],BedEnum); 697 tria2->inputs->GetParameterValue(&b[1],nodes[1],BedEnum); 698 698 699 699 if (b[0]!=b[1])ISSMERROR(" different beds not supported for rift fronts"); … … 779 779 780 780 /*First recover velocity: */ 781 tria1->inputs->GetParameterValue AtNode(&vx1,nodes[0],VxEnum);782 tria2->inputs->GetParameterValue AtNode(&vx2,nodes[1],VxEnum);783 tria1->inputs->GetParameterValue AtNode(&vy1,nodes[0],VyEnum);784 tria2->inputs->GetParameterValue AtNode(&vy2,nodes[1],VyEnum);781 tria1->inputs->GetParameterValue(&vx1,nodes[0],VxEnum); 782 tria2->inputs->GetParameterValue(&vx2,nodes[1],VxEnum); 783 tria1->inputs->GetParameterValue(&vy1,nodes[0],VyEnum); 784 tria2->inputs->GetParameterValue(&vy2,nodes[1],VyEnum); 785 785 786 786 /*Node 1 faces node 2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */ … … 829 829 830 830 /*First recover velocity: */ 831 tria1->inputs->GetParameterValue AtNode(&vx1,nodes[0],VxEnum);832 tria2->inputs->GetParameterValue AtNode(&vx2,nodes[1],VxEnum);833 tria1->inputs->GetParameterValue AtNode(&vy1,nodes[0],VyEnum);834 tria2->inputs->GetParameterValue AtNode(&vy2,nodes[1],VyEnum);831 tria1->inputs->GetParameterValue(&vx1,nodes[0],VxEnum); 832 tria2->inputs->GetParameterValue(&vx2,nodes[1],VxEnum); 833 tria1->inputs->GetParameterValue(&vy1,nodes[0],VyEnum); 834 tria2->inputs->GetParameterValue(&vy2,nodes[1],VyEnum); 835 835 836 836 /*Node 1 faces node 2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */ … … 885 885 886 886 /*First recover velocity: */ 887 tria1->inputs->GetParameterValue AtNode(&vx1,nodes[0],VxEnum);888 tria2->inputs->GetParameterValue AtNode(&vx2,nodes[1],VxEnum);889 tria1->inputs->GetParameterValue AtNode(&vy1,nodes[0],VyEnum);890 tria2->inputs->GetParameterValue AtNode(&vy2,nodes[1],VyEnum);887 tria1->inputs->GetParameterValue(&vx1,nodes[0],VxEnum); 888 tria2->inputs->GetParameterValue(&vx2,nodes[1],VxEnum); 889 tria1->inputs->GetParameterValue(&vy1,nodes[0],VyEnum); 890 tria2->inputs->GetParameterValue(&vy2,nodes[1],VyEnum); 891 891 892 892 /*Node 1 faces node 2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */
Note:
See TracChangeset
for help on using the changeset viewer.