Changeset 5660
- Timestamp:
- 09/03/10 08:38:03 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 2 deleted
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/Container/Inputs.cpp
r5659 r5660 209 209 } 210 210 /*}}}*/ 211 /*FUNCTION Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type){{{1*/212 void Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type){213 214 vector<Object*>::iterator object;215 Input* input=NULL;216 bool found=false;217 218 /*Go through inputs and check whether any input with the same name is already in: */219 for ( object=objects.begin() ; object < objects.end(); object++ ){220 221 input=(Input*)(*object);222 if (input->EnumType()==enum_type){223 found=true;224 break;225 }226 }227 228 if (!found){229 /*we could not find an input with the correct enum type. No defaults values were provided,230 * error out: */231 ISSMERROR("could not find input with enum type %i (%s)",enum_type,EnumToString(enum_type));232 }233 234 /*Ok, we have an input if we made it here, request the input to return the values: */235 input->GetParameterValues(values,gauss_pointers,numgauss);236 237 }238 /*}}}*/239 /*FUNCTION Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type,double* defaultvalues){{{1*/240 void Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type,double* defaultvalues){241 242 int i;243 vector<Object*>::iterator object;244 Input* input=NULL;245 bool found=false;246 247 /*Go through inputs and check whether any input with the same name is already in: */248 for ( object=objects.begin() ; object < objects.end(); object++ ){249 250 input=(Input*)(*object);251 if (input->EnumType()==enum_type){252 found=true;253 break;254 }255 }256 257 if (!found){258 /*we could not find an input with the correct enum type. Return the default values: */259 for(i=0;i<numgauss;i++) values[i]=defaultvalues[i];260 }261 else{262 input->GetParameterValues(values,gauss_pointers,numgauss);263 }264 265 }266 /*}}}*/267 211 /*FUNCTION Inputs::GetParameterAverage{{{1*/ 268 212 void Inputs::GetParameterAverage(double* pvalue,int enum_type){ -
issm/trunk/src/c/Container/Inputs.h
r5659 r5660 50 50 void GetParameterValue(double* pvalue,GaussTria* gauss,int enum_type); 51 51 void GetParameterValue(double* pvalue,double* gauss,int enum_type,double defaultvalue); 52 void GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type);53 void GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type,double* defaultvalues);54 52 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss,int enum_type); 55 53 /*}}}*/ -
issm/trunk/src/c/Makefile.am
r5641 r5660 480 480 ./modules/ComputeBasalStressx/ComputeBasalStressx.h\ 481 481 ./modules/ComputeBasalStressx/ComputeBasalStressx.cpp\ 482 ./modules/ComputePressurex/ComputePressurex.h\483 ./modules/ComputePressurex/ComputePressurex.cpp\484 482 ./modules/ComputeStrainRatex/ComputeStrainRatex.h\ 485 483 ./modules/ComputeStrainRatex/ComputeStrainRatex.cpp\ … … 1034 1032 ./modules/ComputeBasalStressx/ComputeBasalStressx.h\ 1035 1033 ./modules/ComputeBasalStressx/ComputeBasalStressx.cpp\ 1036 ./modules/ComputePressurex/ComputePressurex.h\1037 ./modules/ComputePressurex/ComputePressurex.cpp\1038 1034 ./modules/ComputeStrainRatex/ComputeStrainRatex.h\ 1039 1035 ./modules/ComputeStrainRatex/ComputeStrainRatex.cpp\ -
issm/trunk/src/c/modules/modules.h
r5578 r5660 15 15 #include "./Chacox/Chacox.h" 16 16 #include "./ComputeBasalStressx/ComputeBasalStressx.h" 17 #include "./ComputePressurex/ComputePressurex.h"18 17 #include "./ComputeStrainRatex/ComputeStrainRatex.h" 19 18 #include "./ConfigureObjectsx/ConfigureObjectsx.h" -
issm/trunk/src/c/objects/Elements/Element.h
r5635 r5660 51 51 virtual void InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum)=0; 52 52 virtual void ComputeBasalStress(Vec sigma_b)=0; 53 virtual void ComputePressure(Vec p_g)=0;54 53 virtual void ComputeStrainRate(Vec eps)=0; 55 54 virtual double MassFlux(double* segment,bool process_units)=0; -
issm/trunk/src/c/objects/Elements/Penta.cpp
r5659 r5660 611 611 /*Add value to output*/ 612 612 VecSetValue(sigma_b,id-1,(const double)value,INSERT_VALUES); 613 }614 /*}}}*/615 /*FUNCTION Penta::ComputePressure {{{1*/616 void Penta::ComputePressure(Vec pg){617 618 int i;619 const int numgrids=6;620 int doflist[numgrids];621 double pressure[numgrids];622 double rho_ice,g;623 double surface[numgrids];624 double xyz_list[numgrids][3];625 double gauss[numgrids][4]={{1,0,0,-1},{0,1,0,-1},{0,0,1,-1},{1,0,0,1},{0,1,0,1},{0,0,1,1}};626 627 /*inputs: */628 bool onwater;629 Input* surface_input=NULL;630 631 /*retrieve inputs :*/632 inputs->GetParameterValue(&onwater,ElementOnWaterEnum);633 634 /*If on water, skip: */635 if(onwater)return;636 637 /*Get node data: */638 GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);639 640 /*pressure is lithostatic: */641 //md.pressure=md.rho_ice*md.g*(md.surface-md.z); a la matlab642 643 /*Get dof list on which we will plug the pressure values: */644 GetDofList1(&doflist[0]);645 646 /*Retrieve all inputs we will be needing: */647 surface_input->GetParameterValues(&surface[0],&gauss[0][0],6);648 649 /*pressure is lithostatic: */650 rho_ice=matpar->GetRhoIce();651 g=matpar->GetG();652 for(i=0;i<numgrids;i++){653 pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]);654 }655 656 /*plug local pressure values into global pressure vector: */657 VecSetValues(pg,numgrids,doflist,(const double*)pressure,INSERT_VALUES);658 659 613 } 660 614 /*}}}*/ … … 4483 4437 const int numvertices = 6; 4484 4438 double value[numvertices]; 4485 double gauss[numvertices][4]={{1,0,0,-1},{0,1,0,-1},{0,0,1,-1},{1,0,0,1},{0,1,0,1},{0,0,1,1}};4439 GaussPenta *gauss = NULL; 4486 4440 4487 4441 /*Recover input*/ … … 4493 4447 4494 4448 /* Start looping on the number of vertices: */ 4449 gauss=new GaussPenta(); 4495 4450 for (int iv=0;iv<numvertices;iv++){ 4496 input->GetParameterValue(&pvalue[iv],&gauss[iv][0]); 4451 gauss->GaussVertex(iv); 4452 input->GetParameterValue(&pvalue[iv],gauss); 4497 4453 } 4498 4454 4499 4455 /*clean-up*/ 4456 delete gauss; 4500 4457 } 4501 4458 /*}}}*/ … … 4506 4463 const int numvertices = 6; 4507 4464 double value[numvertices]; 4508 double gauss[numvertices][4]={{1,0,0,-1},{0,1,0,-1},{0,0,1,-1},{1,0,0,1},{0,1,0,1},{0,0,1,1}};4465 GaussPenta *gauss = NULL; 4509 4466 4510 4467 /*Recover input*/ … … 4515 4472 4516 4473 /* Start looping on the number of vertices: */ 4517 if (input) 4518 for (int iv=0;iv<numvertices;iv++) input->GetParameterValue(&pvalue[iv],&gauss[iv][0]); 4519 else 4520 for (int iv=0;iv<numvertices;iv++) pvalue[iv]=defaultvalue; 4474 if (input){ 4475 gauss=new GaussPenta(); 4476 for (int iv=0;iv<numvertices;iv++){ 4477 gauss->GaussVertex(iv); 4478 input->GetParameterValue(&pvalue[iv],gauss); 4479 } 4480 } 4481 else{ 4482 for (int iv=0;iv<numvertices;iv++) pvalue[iv]=defaultvalue; 4483 } 4521 4484 4522 4485 /*clean-up*/ 4523 //delete gauss;4486 delete gauss; 4524 4487 } 4525 4488 /*}}}*/ … … 5293 5256 5294 5257 /*Now compute pressure*/ 5295 penta->inputs->GetParameterValues(&surface[0],&gauss[0][0],6,SurfaceEnum); 5296 for(i=0;i<numvertices;i++){ 5297 pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5298 } 5258 GetParameterListOnVertices(&surface[0],SurfaceEnum); 5259 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5299 5260 5300 5261 /*Now, we have to move the previous Vx and Vy inputs to old … … 5399 5360 rho_ice=matpar->GetRhoIce(); 5400 5361 g=matpar->GetG(); 5401 inputs->GetParameterValues(&surface[0],&gauss[0][0],6,SurfaceEnum); 5402 5403 for(i=0;i<numvertices;i++){ 5404 pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5405 } 5362 GetParameterListOnVertices(&surface[0],SurfaceEnum); 5363 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5364 5406 5365 /*Now, we have to move the previous Vx and Vy inputs to old 5407 5366 * status, otherwise, we'll wipe them off: */ … … 5482 5441 rho_ice=matpar->GetRhoIce(); 5483 5442 g=matpar->GetG(); 5484 inputs->GetParameterValues(&surface[0],&gauss[0][0],6,SurfaceEnum); 5485 5486 for(i=0;i<numvertices;i++){ 5487 pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5488 } 5443 GetParameterListOnVertices(&surface[0],SurfaceEnum); 5444 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5445 5489 5446 /*Now, we have to move the previous Vx and Vy inputs to old 5490 5447 * status, otherwise, we'll wipe them off: */ … … 5565 5522 rho_ice=matpar->GetRhoIce(); 5566 5523 g=matpar->GetG(); 5567 inputs->GetParameterValues(&surface[0],&gauss[0][0],6,SurfaceEnum); 5568 5569 for(i=0;i<numvertices;i++){ 5570 pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5571 } 5524 GetParameterListOnVertices(&surface[0],SurfaceEnum); 5525 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5526 5572 5527 /*Now, we have to move the previous Vx and Vy inputs to old 5573 5528 * status, otherwise, we'll wipe them off: */ … … 5653 5608 rho_ice=matpar->GetRhoIce(); 5654 5609 g=matpar->GetG(); 5655 inputs->GetParameterValues(&surface[0],&gauss[0][0],6,SurfaceEnum); 5656 5657 for(i=0;i<numvertices;i++){ 5658 pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5659 } 5610 GetParameterListOnVertices(&surface[0],SurfaceEnum); 5611 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i][2]); 5612 5660 5613 /*Now, we have to move the previous Vz inputs to old 5661 5614 * status, otherwise, we'll wipe them off: */ -
issm/trunk/src/c/objects/Elements/Penta.h
r5651 r5660 71 71 void AverageOntoPartition(Vec partition_contributions,Vec partition_areas,double* vertex_response,double* qmu_part); 72 72 void ComputeBasalStress(Vec sigma_b); 73 void ComputePressure(Vec p_g);74 73 void ComputeStrainRate(Vec eps); 75 74 void Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters); -
issm/trunk/src/c/objects/Elements/Tria.cpp
r5659 r5660 575 575 } 576 576 /*}}}*/ 577 /*FUNCTION Tria::ComputePressure {{{1*/578 void Tria::ComputePressure(Vec pg){579 580 const int numvertices= 3;581 int doflist[numvertices];582 double pressure[numvertices];583 double thickness[numvertices];584 double rho_ice,g;585 586 /*Get dof list on which we will plug the pressure values: */587 GetDofList1(&doflist[0]);588 589 /*pressure is lithostatic: */590 rho_ice=matpar->GetRhoIce();591 g=matpar->GetG();592 GetParameterListOnVertices(&thickness[0],ThicknessEnum);593 594 for(int i=0;i<numvertices;i++) pressure[i]=rho_ice*g*thickness[i];595 596 /*plug local pressure values into global pressure vector: */597 VecSetValues(pg,numvertices,doflist,(const double*)pressure,INSERT_VALUES);598 599 }600 /*}}}*/601 577 /*FUNCTION Tria::ComputeStrainRate {{{1*/ 602 578 void Tria::ComputeStrainRate(Vec eps){ … … 5614 5590 /* Start looping on the number of vertices: */ 5615 5591 gauss=new GaussTria(); 5616 for (int iv=0;iv< 3;iv++){5592 for (int iv=0;iv<numvertices;iv++){ 5617 5593 gauss->GaussVertex(iv); 5618 5594 input->GetParameterValue(&pvalue[iv],gauss); -
issm/trunk/src/c/objects/Elements/Tria.h
r5635 r5660 68 68 void AverageOntoPartition(Vec partition_contributions,Vec partition_areas,double* vertex_response,double* qmu_part); 69 69 void ComputeBasalStress(Vec sigma_b); 70 void ComputePressure(Vec p_g);71 70 void ComputeStrainRate(Vec eps); 72 71 void Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters); -
issm/trunk/src/c/objects/Inputs/BoolInput.cpp
r5647 r5660 175 175 void BoolInput::GetParameterValue(double* pvalue,GaussPenta* gauss){ISSMERROR(" not supported yet!");} 176 176 /*}}}*/ 177 /*FUNCTION BoolInput::GetParameterValues{{{1*/178 void BoolInput::GetParameterValues(double* values,double* gauss_pointers, int numgauss){ISSMERROR(" not supported yet!");}179 /*}}}*/180 177 /*FUNCTION BoolInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){{{1*/ 181 178 void BoolInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");} -
issm/trunk/src/c/objects/Inputs/BoolInput.h
r5659 r5660 50 50 void GetParameterValue(double* pvalue,GaussTria* gauss); 51 51 void GetParameterValue(double* pvalue,GaussPenta* gauss); 52 void GetParameterValues(double* values,double* gauss_pointers, int numgauss);53 52 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss); 54 53 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss); -
issm/trunk/src/c/objects/Inputs/DoubleInput.cpp
r5659 r5660 188 188 void DoubleInput::GetParameterValue(double* pvalue,GaussPenta* gauss){ISSMERROR(" not supported yet!");} 189 189 /*}}}*/ 190 /*FUNCTION DoubleInput::GetParameterValues{{{1*/191 void DoubleInput::GetParameterValues(double* values,double* gauss_pointers, int numgauss){ISSMERROR(" not supported yet!");}192 /*}}}*/193 190 /*FUNCTION DoubleInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){{{1*/ 194 191 void DoubleInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");} -
issm/trunk/src/c/objects/Inputs/DoubleInput.h
r5659 r5660 49 49 void GetParameterValue(double* pvalue,GaussTria* gauss); 50 50 void GetParameterValue(double* pvalue,GaussPenta* gauss); 51 void GetParameterValues(double* values,double* gauss_pointers, int numgauss);52 51 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss); 53 52 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss); -
issm/trunk/src/c/objects/Inputs/Input.h
r5659 r5660 28 28 virtual void GetParameterValue(double* pvalue,GaussTria* gauss)=0; 29 29 virtual void GetParameterValue(double* pvalue,GaussPenta* gauss)=0; 30 virtual void GetParameterValues(double* values,double* gauss_pointers, int numgauss)=0;31 30 virtual void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss)=0; 32 31 virtual void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss)=0; -
issm/trunk/src/c/objects/Inputs/IntInput.cpp
r5647 r5660 176 176 void IntInput::GetParameterValue(double* pvalue,GaussPenta* gauss){ISSMERROR(" not supported yet!");} 177 177 /*}}}*/ 178 /*FUNCTION IntInput::GetParameterValues{{{1*/179 void IntInput::GetParameterValues(double* values,double* gauss_pointers, int numgauss){ISSMERROR(" not supported yet!");}180 /*}}}*/181 178 /*FUNCTION IntInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){{{1*/ 182 179 void IntInput::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");} -
issm/trunk/src/c/objects/Inputs/IntInput.h
r5659 r5660 50 50 void GetParameterValue(double* pvalue,GaussTria* gauss); 51 51 void GetParameterValue(double* pvalue,GaussPenta* gauss); 52 void GetParameterValues(double* values,double* gauss_pointers, int numgauss);53 52 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss); 54 53 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss); -
issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
r5659 r5660 192 192 } 193 193 /*}}}*/ 194 /*FUNCTION PentaVertexInput::GetParameterValues{{{1*/195 void PentaVertexInput::GetParameterValues(double* values,double* gauss_pointers, int numgauss){196 /*It is assumed that output values has been correctly allocated*/197 198 int i,j;199 double gauss[4];200 201 for (i=0;i<numgauss;i++){202 203 /*Get current Gauss point coordinates*/204 for (j=0;j<4;j++) gauss[j]=gauss_pointers[i*4+j];205 206 /*Assign parameter value*/207 GetParameterValue(&values[i],&gauss[0]);208 }209 }210 /*}}}*/211 194 /*FUNCTION PentaVertexInput::GetParameterDerivativeValue(double* p, double* xyz_list, double* gauss){{{1*/ 212 195 void PentaVertexInput::GetParameterDerivativeValue(double* p, double* xyz_list, double* gauss){ -
issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
r5659 r5660 50 50 void GetParameterValue(double* pvalue,GaussTria* gauss){ISSMERROR("not implemented yet");}; 51 51 void GetParameterValue(double* pvalue,GaussPenta* gauss); 52 void GetParameterValues(double* values,double* gauss_pointers, int numgauss);53 52 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss); 54 53 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss){ISSMERROR("not implemented yet");}; -
issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
r5659 r5660 181 181 } 182 182 /*}}}*/ 183 /*FUNCTION TriaVertexInput::GetParameterValues{{{1*/184 void TriaVertexInput::GetParameterValues(double* values,double* gauss_pointers, int numgauss){185 /*It is assumed that output values has been correctly allocated*/186 187 int i,j;188 double gauss[3];189 190 for (i=0;i<numgauss;i++){191 192 /*Get current Gauss point coordinates*/193 for (j=0;j<3;j++) gauss[j]=gauss_pointers[i*3+j];194 195 /*Assign parameter value*/196 GetParameterValue(&values[i],&gauss[0]);197 }198 199 }200 /*}}}*/201 183 /*FUNCTION TriaVertexInput::GetParameterDerivativeValue(double* p, double* xyz_list, double* gauss){{{1*/ 202 184 void TriaVertexInput::GetParameterDerivativeValue(double* p, double* xyz_list, double* gauss){ -
issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
r5659 r5660 50 50 void GetParameterValue(double* pvalue,GaussTria* gauss); 51 51 void GetParameterValue(double* pvalue,GaussPenta* gauss){ISSMERROR("not implemented yet");}; 52 void GetParameterValues(double* values,double* gauss_pointers, int numgauss);53 52 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss); 54 53 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, GaussTria* gauss); -
issm/trunk/src/mex/Makefile.am
r5413 r5660 12 12 Chaco\ 13 13 ComputeBasalStress\ 14 ComputePressure\15 14 ConfigureObjects \ 16 15 ControlOptimization\
Note:
See TracChangeset
for help on using the changeset viewer.