Changeset 3621
- Timestamp:
- 04/27/10 07:33:58 (15 years ago)
- Location:
- issm/trunk/src/c
- Files:
-
- 2 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/DataSet.cpp
r3612 r3621 392 392 } 393 393 /*}}}*/ 394 /*FUNCTION DataSet::FindParam(double* pscalar, char* name){{{1*/395 int DataSet::FindParam(double* pscalar, char* name){396 397 /*Go through a dataset, and find a Param* object398 *which parameter name is "name" : */399 400 vector<Object*>::iterator object;401 Param* param=NULL;402 403 int found=0;404 405 for ( object=objects.begin() ; object < objects.end(); object++ ){406 407 /*Find param type objects: */408 if((*object)->Enum()==ParamEnum){409 410 /*Ok, this object is a parameter, recover it and ask which name it has: */411 param=(Param*)(*object);412 413 if (strcmp(param->GetParameterName(),name)==0){414 /*Ok, this is the one! Recover the value of this parameter: */415 param->GetParameterValue(pscalar);416 found=1;417 break;418 }419 }420 }421 return found;422 }423 /*}}}*/424 /*FUNCTION DataSet::FindParam(int* pinteger,char* name){{{1*/425 int DataSet::FindParam(int* pinteger,char* name){426 427 428 /*Go through a dataset, and find a Param* object429 *which parameter name is "name" : */430 431 vector<Object*>::iterator object;432 Param* param=NULL;433 434 int found=0;435 436 for ( object=objects.begin() ; object < objects.end(); object++ ){437 438 /*Find param type objects: */439 if((*object)->Enum()==ParamEnum){440 441 /*Ok, this object is a parameter, recover it and ask which name it has: */442 param=(Param*)(*object);443 444 if (strcmp(param->GetParameterName(),name)==0){445 /*Ok, this is the one! Recover the value of this parameter: */446 param->GetParameterValue(pinteger);447 found=1;448 break;449 }450 }451 }452 return found;453 }454 /*}}}*/455 /*FUNCTION DataSet::FindParam(char** pstring,char* name){{{1*/456 int DataSet::FindParam(char** pstring,char* name){457 458 /*Go through a dataset, and find a Param* object459 *which parameter name is "name" : */460 461 vector<Object*>::iterator object;462 Param* param=NULL;463 464 int found=0;465 466 for ( object=objects.begin() ; object < objects.end(); object++ ){467 468 /*Find param type objects: */469 if((*object)->Enum()==ParamEnum){470 471 /*Ok, this object is a parameter, recover it and ask which name it has: */472 param=(Param*)(*object);473 474 if (strcmp(param->GetParameterName(),name)==0){475 /*Ok, this is the one! Recover the value of this parameter: */476 param->GetParameterValue(pstring);477 found=1;478 break;479 }480 }481 }482 return found;483 484 }485 /*}}}*/486 /*FUNCTION DataSet::FindParam(char*** pstringarray,int* pM,char* name){{{1*/487 int DataSet::FindParam(char*** pstringarray,int* pM,char* name){488 489 /*Go through a dataset, and find a Param* object490 *which parameter name is "name" : */491 492 vector<Object*>::iterator object;493 Param* param=NULL;494 495 int found=0;496 497 for ( object=objects.begin() ; object < objects.end(); object++ ){498 499 /*Find param type objects: */500 if((*object)->Enum()==ParamEnum){501 502 /*Ok, this object is a parameter, recover it and ask which name it has: */503 param=(Param*)(*object);504 505 if (strcmp(param->GetParameterName(),name)==0){506 /*Ok, this is the one! Recover the value of this parameter: */507 param->GetParameterValue(pstringarray);508 if(pM)*pM=param->GetM();509 found=1;510 break;511 }512 }513 }514 return found;515 516 }517 /*}}}*/518 /*FUNCTION DataSet::FindParam(double** pdoublearray,int* pM, int* pN,char* name){{{1*/519 int DataSet::FindParam(double** pdoublearray,int* pM, int* pN,char* name){520 521 /*Go through a dataset, and find a Param* object522 *which parameter name is "name" : */523 524 vector<Object*>::iterator object;525 Param* param=NULL;526 527 int found=0;528 529 for ( object=objects.begin() ; object < objects.end(); object++ ){530 531 /*Find param type objects: */532 if((*object)->Enum()==ParamEnum){533 534 /*Ok, this object is a parameter, recover it and ask which name it has: */535 param=(Param*)(*object);536 537 if (strcmp(param->GetParameterName(),name)==0){538 /*Ok, this is the one! Recover the value of this parameter: */539 param->GetParameterValue(pdoublearray);540 if(pM)param->GetM();541 if(pN)param->GetN();542 found=1;543 break;544 }545 }546 }547 return found;548 549 }550 /*}}}*/551 /*FUNCTION DataSet::FindParam(Vec* pvec,char* name){{{1*/552 int DataSet::FindParam(Vec* pvec,char* name){553 554 /*Go through a dataset, and find a Param* object555 *which parameter name is "name" : */556 557 vector<Object*>::iterator object;558 Param* param=NULL;559 560 int found=0;561 562 for ( object=objects.begin() ; object < objects.end(); object++ ){563 564 /*Find param type objects: */565 if((*object)->Enum()==ParamEnum){566 567 /*Ok, this object is a parameter, recover it and ask which name it has: */568 param=(Param*)(*object);569 570 if (strcmp(param->GetParameterName(),name)==0){571 /*Ok, this is the one! Recover the value of this parameter: */572 param->GetParameterValue(pvec);573 found=1;574 break;575 }576 }577 }578 return found;579 580 }581 /*}}}*/582 /*FUNCTION DataSet::FindParamMat* pmat,char* name){{{1*/583 int DataSet::FindParam(Mat* pmat,char* name){584 585 /*Go through a dataset, and find a Param* object586 *which parameter name is "name" : */587 588 vector<Object*>::iterator object;589 Param* param=NULL;590 591 int found=0;592 593 for ( object=objects.begin() ; object < objects.end(); object++ ){594 595 /*Find param type objects: */596 if((*object)->Enum()==ParamEnum){597 598 /*Ok, this object is a parameter, recover it and ask which name it has: */599 param=(Param*)(*object);600 601 if (strcmp(param->GetParameterName(),name)==0){602 /*Ok, this is the one! Recover the value of this parameter: */603 param->GetParameterValue(pmat);604 found=1;605 break;606 }607 }608 }609 return found;610 611 }612 /*}}}*/613 /*FUNCTION DataSet::FindParamObject{{{1*/614 Object* DataSet::FindParamObject(char* name){615 616 /*Go through a dataset, and find a Param* object617 *which parameter name is "name" : */618 619 vector<Object*>::iterator object;620 Param* param=NULL;621 622 for ( object=objects.begin() ; object < objects.end(); object++ ){623 624 /*Find param type objects: */625 if((*object)->Enum()==ParamEnum){626 627 /*Ok, this object is a parameter, recover it and ask which name it has: */628 param=(Param*)(*object);629 630 if (strcmp(param->GetParameterName(),name)==0){631 /*Ok, this is the one! Return the object: */632 return (*object);633 }634 }635 }636 return NULL;637 }638 /*}}}*/639 394 /*FUNCTION DataSet::FindResult(Vec* presult,char* name){{{1*/ 640 395 int DataSet::FindResult(Vec* presult,char* name){ … … 868 623 Load* load=NULL; 869 624 Node* node=NULL; 870 Numpar* numpar=NULL;871 625 872 626 for ( object=objects.begin() ; object < objects.end(); object++ ){ … … 886 640 node->Configure(nodes,vertices); 887 641 } 888 if((*object)->Enum()==NumparEnum){889 numpar=(Numpar*)(*object);890 numpar->Configure(parameters);891 }892 893 642 } 894 643 -
issm/trunk/src/c/DataSet/DataSet.h
r3612 r3621 48 48 int DeleteObject(int id); 49 49 int Size(); 50 int FindParam(double* pscalar, char* name); 51 int FindParam(int* pinteger,char* name); 52 int FindParam(char** pstring,char* name); 53 int FindParam(char*** pstringarray,int* pM,char* name); 54 int FindParam(double** pdoublearray,int* pM,int* pN,char* name); 55 int FindParam(Vec* pvec,char* name); 56 int FindParam(Mat* pmat,char* name); 50 57 51 int FindResult(Vec* presult,char* name); 58 52 Object* FindParamObject(char* name); -
issm/trunk/src/c/DataSet/Inputs.cpp
r3612 r3621 249 249 } 250 250 /*}}}*/ 251 /*FUNCTION Inputs::GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int zenum){{{1*/ 252 void Inputs::GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int zenum){ 253 254 vector<Object*>::iterator object; 255 Input* xinput=NULL; 256 Input* yinput=NULL; 257 Input* yinput=NULL; 258 259 /*Go through inputs and find data for xenum: */ 260 for ( object=objects.begin() ; object < objects.end(); object++ ){ 261 xinput=(Input*)(*object); 262 if (xinput->EnumType()==xenum)break; 263 } 264 /*Go through inputs and find data for yenum: */ 265 for ( object=objects.begin() ; object < objects.end(); object++ ){ 266 yinput=(Input*)(*object); 267 if (yinput->EnumType()==yenum)break; 268 } 269 /*Go through inputs and find data for zenum: */ 270 for ( object=objects.begin() ; object < objects.end(); object++ ){ 271 zinput=(Input*)(*object); 272 if (zinput->EnumType()==zenum)break; 273 } 274 275 if (!xinput | !yinput | !zinput){ 276 /*we could not find one input with the correct enum type. No defaults values were provided, 277 * error out: */ 278 ISSMERROR("%s%i%s%i%s%i\n"," could not find input with enum type ",xenum," or enum type ",yenum, " or enum type ",zenum); 279 } 280 281 /*Ok, we have the inputs, call bilinear operator: */ 282 xinput->GetStrainRateStokes(epsilon,yinput,zinput,xyz_list,gauss); 283 284 } 285 /*}}}*/ 251 286 /*FUNCTION Inputs::AddInput{{{1*/ 252 287 int Inputs::AddInput(Input* in_input){ -
issm/trunk/src/c/DataSet/Inputs.h
r3612 r3621 6 6 #define _INPUTS_H_ 7 7 8 class Input; 8 9 #include "./DataSet.h" 9 10 … … 28 29 void GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss,int enum_type); 29 30 void GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum); 31 void GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int yenum); 30 32 /*}}}*/ 31 33 -
issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
r3612 r3621 99 99 InputEnum, 100 100 TriaVertexInputEnum, 101 SingVertexInputEnum, 102 BeamVertexInputEnum, 103 PentaVertexInputEnum, 101 104 BoolInputEnum, 102 105 IntInputEnum, … … 155 158 ElementOnSurfaceEnum, 156 159 SurfaceAreaEnum, 160 SurfaceSlopexEnum, 161 SurfaceSlopeyEnum, 157 162 WeightsEnum, 158 163 FitEnum, 159 164 AdjointxEnum, 160 165 AdjointyEnum, 166 AdjointzEnum, 167 CollapseEnum, 168 TemperatureEnum, 161 169 PressureEnum 162 170 /*}}}*/ -
issm/trunk/src/c/Makefile.am
r3612 r3621 65 65 ./objects/TriaVertexInput.h\ 66 66 ./objects/TriaVertexInput.cpp\ 67 ./objects/SingVertexInput.h\ 68 ./objects/SingVertexInput.cpp\ 69 ./objects/BeamVertexInput.h\ 70 ./objects/BeamVertexInput.cpp\ 71 ./objects/PentaVertexInput.h\ 72 ./objects/PentaVertexInput.cpp\ 67 73 ./objects/BoolInput.h\ 68 74 ./objects/BoolInput.cpp\ … … 81 87 ./objects/Matpar.h\ 82 88 ./objects/Matpar.cpp\ 83 ./objects/Numpar.h\84 ./objects/Numpar.cpp\85 89 ./objects/Input.h\ 86 ./objects/Input.cpp\87 ./objects/Einput.h\88 90 ./objects/Spc.cpp\ 89 91 ./objects/Spc.h\ … … 108 110 ./DataSet/Inputs.cpp\ 109 111 ./DataSet/Inputs.h\ 112 ./DataSet/Parameters.cpp\ 113 ./DataSet/Parameters.h\ 110 114 ./shared/shared.h\ 111 115 ./shared/Alloc/alloc.h\ … … 477 481 ./objects/TriaVertexInput.h\ 478 482 ./objects/TriaVertexInput.cpp\ 483 ./objects/SingVertexInput.h\ 484 ./objects/SingVertexInput.cpp\ 485 ./objects/BeamVertexInput.h\ 486 ./objects/BeamVertexInput.cpp\ 487 ./objects/PentaVertexInput.h\ 488 ./objects/PentaVertexInput.cpp\ 479 489 ./objects/BoolInput.h\ 480 490 ./objects/BoolInput.cpp\ … … 493 503 ./objects/Matpar.h\ 494 504 ./objects/Matpar.cpp\ 495 ./objects/Numpar.h\ 496 ./objects/Numpar.cpp\ 497 ./objects/Einput.h\ 505 ./objects/Input.h\ 498 506 ./objects/Spc.cpp\ 499 507 ./objects/Spc.h\ … … 518 526 ./DataSet/Inputs.cpp\ 519 527 ./DataSet/Inputs.h\ 528 ./DataSet/Parameters.cpp\ 529 ./DataSet/Parameters.h\ 520 530 ./shared/shared.h\ 521 531 ./shared/Threads/issm_threads.h\ -
issm/trunk/src/c/ModelProcessorx/CreateDataSets.cpp
r3588 r3621 15 15 16 16 17 void CreateDataSets(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads, DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){17 void CreateDataSets(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){ 18 18 19 19 /*create parameters common to all solutions: */ -
issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp
r3588 r3621 32 32 parameters = new DataSet(ParametersEnum); 33 33 34 //solution parameters: always 1'st, to speed-up its lookup by elements..35 count++;36 numpar= new Numpar(count);37 parameters->AddObject(numpar);38 39 34 //outputfilename 40 35 count++; … … 43 38 parameters->AddObject(param); 44 39 45 //analysis and subanalysis46 count++;47 param= new Param(count,"analysis_type",DOUBLE);48 param->SetDouble(iomodel->analysis_type);49 parameters->AddObject(param);50 51 count++;52 param= new Param(count,"sub_analysis_type",DOUBLE);53 param->SetDouble(iomodel->sub_analysis_type);54 parameters->AddObject(param);55 56 57 40 //dimension 2d or 3d: 58 41 if (strcmp(iomodel->meshtype,"2d")==0)dim=2; … … 121 104 param->SetDouble(iomodel->dt); 122 105 parameters->AddObject(param); 106 123 107 124 108 /*ndt: */ -
issm/trunk/src/c/ModelProcessorx/IoModel.h
r3612 r3621 9 9 #include "../io/io.h" 10 10 #include "../DataSet/DataSet.h" 11 #include "../DataSet/Parameters.h" 11 12 #include "../toolkits/toolkits.h" 12 13 … … 198 199 199 200 /*Creation of fem datasets: general drivers*/ 200 void CreateDataSets(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads, DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);201 void CreateParameters( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);201 void CreateDataSets(DataSet** pelements,DataSet** pnodes, DataSet** pvertices, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads,Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 202 void CreateParameters(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 202 203 203 204 … … 208 209 void CreateConstraintsDiagnosticHoriz(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 209 210 void CreateLoadsDiagnosticHoriz(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 210 void CreateParametersDiagnosticHoriz( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);211 void CreateParametersDiagnosticHoriz(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 211 212 212 213 /*diagnostic vertical*/ … … 231 232 232 233 /*control:*/ 233 void CreateParametersControl( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);234 void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 234 235 235 236 /*thermal:*/ … … 237 238 void CreateConstraintsThermal(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 238 239 void CreateLoadsThermal(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 239 void CreateParametersThermal( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);240 void CreateParametersThermal(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 240 241 241 242 /*melting:*/ … … 243 244 void CreateConstraintsMelting(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 244 245 void CreateLoadsMelting(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 245 void CreateParametersMelting( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);246 void CreateParametersMelting(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 246 247 247 248 /*prognostic:*/ … … 249 250 void CreateConstraintsPrognostic(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 250 251 void CreateLoadsPrognostic(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 251 void CreateParametersPrognostic( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);252 void CreateParametersPrognostic(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 252 253 253 254 /*prognostic2:*/ … … 255 256 void CreateConstraintsPrognostic2(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 256 257 void CreateLoadsPrognostic2(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 257 void CreateParametersPrognostic2( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);258 void CreateParametersPrognostic2(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 258 259 259 260 /*balancedthickness:*/ … … 261 262 void CreateConstraintsBalancedthickness(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 262 263 void CreateLoadsBalancedthickness(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 263 void CreateParametersBalancedthickness( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);264 void CreateParametersBalancedthickness(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 264 265 265 266 /*balancedthickness2:*/ … … 267 268 void CreateConstraintsBalancedthickness2(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 268 269 void CreateLoadsBalancedthickness2(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 269 void CreateParametersBalancedthickness2( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);270 void CreateParametersBalancedthickness2(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 270 271 271 272 /*balancedvelocities:*/ … … 273 274 void CreateConstraintsBalancedvelocities(DataSet** pconstraints,IoModel* iomodel,ConstDataHandle iomodel_handle); 274 275 void CreateLoadsBalancedvelocities(DataSet** ploads, IoModel* iomodel, ConstDataHandle iomodel_handle); 275 void CreateParametersBalancedvelocities( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);276 void CreateParametersBalancedvelocities(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 276 277 277 278 /*qmu: */ 278 void CreateParametersQmu( DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle);279 void CreateParametersQmu(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle); 279 280 280 281 -
issm/trunk/src/c/io/WriteParams.cpp
r3570 r3621 63 63 for(i=0;i<nfields;i++){ 64 64 65 param=(Param*)parameters->GetObjectByOffset(i+1); 65 param=(Param*)parameters->GetObjectByOffset(i+1); //skip the numpar object 66 66 67 67 switch(param->GetType()){ -
issm/trunk/src/c/objects/Beam.cpp
r3620 r3621 23 23 Beam::Beam(){ 24 24 this->inputs=NULL; 25 this->parameters=NULL; 25 26 return; 26 27 } 27 28 /*}}}*/ 28 /*FUNCTION Beam::Beam(int id, int* node_ids, int matice_id, int matpar_id , int numpar_id, ElementProperties* properties){{{1*/29 Beam::Beam(int beam_id,int* beam_node_ids, int beam_matice_id, int beam_matpar_id , int beam_numpar_id):29 /*FUNCTION Beam::Beam(int id, int* node_ids, int matice_id, int matpar_id){{{1*/ 30 Beam::Beam(int beam_id,int* beam_node_ids, int beam_matice_id, int beam_matpar_id): 30 31 hnodes(beam_node_ids,2), 31 32 hmatice(&beam_matice_id,1), 32 hmatpar(&beam_matpar_id,1), 33 hnumpar(&beam_numpar_id,1) 33 hmatpar(&beam_matpar_id,1) 34 34 { 35 35 36 36 /*all the initialization has been done by the initializer, just fill in the id: */ 37 37 this->id=beam_id; 38 this->parameters=NULL; 38 39 this->inputs=new Inputs(); 39 40 } 40 41 /*}}}*/ 41 /*FUNCTION Beam::Beam(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, Hook* hnumpar, ElementProperties* properties){{{1*/42 Beam::Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Hook* beam_hnumpar, Inputs* beam_inputs):42 /*FUNCTION Beam::Beam(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, Parameters* beam_parameters, ElementProperties* properties){{{1*/ 43 Beam::Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Parameters* beam_parameters, Inputs* beam_inputs): 43 44 hnodes(beam_hnodes), 44 45 hmatice(beam_hmatice), 45 hmatpar(beam_hmatpar), 46 hnumpar(beam_hnumpar) 46 hmatpar(beam_hmatpar) 47 47 { 48 48 … … 55 55 this->inputs=new Inputs(); 56 56 } 57 return; 57 /*point parameters: */ 58 this->parameters=beam_parameters; 58 59 } 59 60 /*}}}*/ … … 68 69 int beam_matice_id; 69 70 int beam_matpar_id; 70 int beam_numpar_id;71 71 int beam_node_ids[2]; 72 72 double nodeinputs[2]; … … 79 79 beam_matice_id=index+1; //refers to the corresponding material property card 80 80 beam_matpar_id=iomodel->numberofvertices2d*(iomodel->numlayers-1)+1;//refers to the corresponding matpar property card 81 beam_numpar_id=1;82 81 beam_node_ids[0]=index+1; 83 82 beam_node_ids[1]=(int)iomodel->uppernodes[index]; //grid that lays right on top … … 86 85 this->hmatice.Init(&beam_matice_id,1); 87 86 this->hmatpar.Init(&beam_matpar_id,1); 88 this->hnumpar.Init(&beam_numpar_id,1);89 87 90 88 //intialize inputs, and add as many inputs per element as requested: … … 113 111 if (iomodel->gridonbed) this->inputs->AddInput(new BoolInput(ElementOnBedEnum,(IssmBool)iomodel->gridonbed[index])); 114 112 113 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this. 114 this->parameters=NULL; 115 116 115 117 } 116 118 /*}}}*/ … … 118 120 Beam::~Beam(){ 119 121 delete inputs; 120 return;122 this->parameters=NULL; 121 123 } 122 124 /*}}}*/ … … 124 126 /*Object management*/ 125 127 /*FUNCTION Beam::Configure{{{1*/ 126 void Beam::Configure( void* ploadsin,void* pnodesin,void* pmaterialsin,void* pparametersin){128 void Beam::Configure(DataSet* loadsin, DataSet* nodesin, DataSet* materialsin, Parameters* parametersin){ 127 129 128 130 int i; 129 131 130 DataSet* loadsin=NULL;131 DataSet* nodesin=NULL;132 DataSet* materialsin=NULL;133 DataSet* parametersin=NULL;134 135 /*Recover pointers :*/136 loadsin=(DataSet*)ploadsin;137 nodesin=(DataSet*)pnodesin;138 materialsin=(DataSet*)pmaterialsin;139 parametersin=(DataSet*)pparametersin;140 141 132 /*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 142 133 * datasets, using internal ids and offsets hidden in hooks: */ … … 144 135 hmatice.configure(materialsin); 145 136 hmatpar.configure(materialsin); 146 hnumpar.configure(parametersin); 137 138 /*point parameters to real dataset: */ 139 this->parameters=parametersin; 147 140 148 141 } … … 151 144 Object* Beam::copy() { 152 145 153 return new Beam(this->id,&this->hnodes,&this->hmatice,&this->hmatpar, &this->hnumpar,this->inputs);146 return new Beam(this->id,&this->hnodes,&this->hmatice,&this->hmatpar,this->parameters,this->inputs); 154 147 155 148 } … … 163 156 hmatice.DeepEcho(); 164 157 hmatpar.DeepEcho(); 165 hnumpar.DeepEcho(); 158 printf(" parameters\n"); 159 parameters->DeepEcho(); 166 160 printf(" inputs\n"); 167 161 inputs->DeepEcho(); … … 187 181 hmatice.Demarshall(&marshalled_dataset); 188 182 hmatpar.Demarshall(&marshalled_dataset); 189 hnumpar.Demarshall(&marshalled_dataset);190 183 191 184 /*demarshall inputs: */ 192 185 inputs=(Inputs*)DataSetDemarshallRaw(&marshalled_dataset); 186 187 /*parameters: may not exist even yet, so let Configure handle it: */ 188 this->parameters=NULL; 193 189 194 190 /*return: */ … … 205 201 hmatice.Echo(); 206 202 hmatpar.Echo(); 207 hnumpar.Echo(); 203 printf(" parameters\n"); 204 parameters->Echo(); 208 205 printf(" inputs\n"); 209 206 inputs->Echo(); … … 236 233 hmatice.Marshall(&marshalled_dataset); 237 234 hmatpar.Marshall(&marshalled_dataset); 238 hnumpar.Marshall(&marshalled_dataset);239 235 240 236 /*Marshall inputs: */ … … 243 239 memcpy(marshalled_dataset,marshalled_inputs,marshalled_inputs_size*sizeof(char)); 244 240 marshalled_dataset+=marshalled_inputs_size; 241 242 /*parameters: don't do anything about it. parameters are marshalled somewhere else!*/ 245 243 246 244 xfree((void**)&marshalled_inputs); … … 257 255 +hmatice.MarshallSize() 258 256 +hmatpar.MarshallSize() 259 +hnumpar.MarshallSize()260 257 +inputs->MarshallSize() 261 258 +sizeof(int); //sizeof(int) for enum type … … 292 289 Matpar* matpar=NULL; 293 290 Matice* matice=NULL; 294 Numpar* numpar=NULL;295 291 296 292 /*Get dof list on which we will plug the pressure values: */ … … 301 297 matpar=(Matpar*)hmatpar.delivers(); 302 298 matice=(Matice*)hmatice.delivers(); 303 numpar=(Numpar*)hnumpar.delivers();304 299 305 300 /*Get node data: */ … … 454 449 Matpar* matpar=NULL; 455 450 Matice* matice=NULL; 456 Numpar* numpar=NULL;457 451 458 452 /*recover objects from hooks: */ … … 460 454 matpar=(Matpar*)hmatpar.delivers(); 461 455 matice=(Matice*)hmatice.delivers(); 462 numpar=(Numpar*)hnumpar.delivers();463 456 464 457 /*recover doflist: */ -
issm/trunk/src/c/objects/Beam.h
r3620 r3621 13 13 #include "../ModelProcessorx/IoModel.h" 14 14 #include "../DataSet/Inputs.h" 15 #include "../DataSet/DataSet.h" 16 #include "../DataSet/Parameters.h" 15 17 #include "./Hook.h" 16 18 … … 30 32 Hook hmatice; //hook to 1 matice 31 33 Hook hmatpar; //hook to 1 matpar 32 Hook hnumpar; //hook to 1 numpar 34 35 Parameters* parameters; //pointer to solution parameters 33 36 Inputs* inputs; 34 37 … … 37 40 /*constructors, destructors: {{{1*/ 38 41 Beam(); 39 Beam(int beam_id,int* beam_node_ids, int beam_matice_id, int beam_matpar_id , int beam_numpar_id);40 Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Hook* beam_hnumpar, Inputs* beam_inputs);42 Beam(int beam_id,int* beam_node_ids, int beam_matice_id, int beam_matpar_id); 43 Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Parameters* beam_parameters, Inputs* beam_inputs); 41 44 Beam(int i, IoModel* iomodel); 42 45 ~Beam(); -
issm/trunk/src/c/objects/Pengrid.cpp
r3570 r3621 18 18 #include "../include/typedefs.h" 19 19 #include "../include/macros.h" 20 20 #include "../DataSet/DataSet.h" 21 #include "../DataSet/Inputs.h" 22 21 23 /*Object constructors and destructor*/ 22 24 /*FUNCTION Pengrid::constructor {{{1*/ 23 25 Pengrid::Pengrid(){ 24 return; 25 } 26 /*}}}1*/ 27 /*FUNCTION Pengrid::creation {{{1*/ 26 this->inputs=NULL; 27 this->parameters=NULL; 28 29 /*not active, not zigzagging: */ 30 active=0; 31 zigzag_counter=0; 32 33 } 34 /*}}}1*/ 35 /*FUNCTION Pengrid::Pengrid(int id, int node_ids int matpar_id){{{1*/ 36 Pengrid::Pengrid(int pengrid_id,int pengrid_node_id, int pengrid_matpar_id): 37 hnode(pengrid_node_ids,1), 38 hmatice(&pengrid_matice_id,1), 39 hmatpar(&pengrid_matpar_id,1) 40 { 41 42 /*all the initialization has been done by the initializer, just fill in the id: */ 43 this->id=pengrid_id; 44 this->parameters=NULL; 45 this->inputs=new Inputs(); 46 47 /*not active, not zigzagging: */ 48 active=0; 49 zigzag_counter=0; 50 51 } 52 /*}}}*/ 53 /*FUNCTION Pengrid::Pengrid(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, DataSet* parameters, Inputs* pengrid_inputs) {{{1*/ 54 Pengrid::Pengrid(int pengrid_id,Hook* pengrid_hnode, Hook* pengrid_hmatpar, Parameters* pengrid_parameters, Inputs* pengrid_inputs): 55 hnode(pengrid_hnode), 56 hmatpar(pengrid_hmatpar) 57 { 58 59 /*all the initialization has been done by the initializer, just fill in the id: */ 60 this->id=pengrid_id; 61 if(pengrid_inputs){ 62 this->inputs=(Inputs*)pengrid_inputs->Copy(); 63 } 64 else{ 65 this->inputs=new Inputs(); 66 } 67 /*point parameters: */ 68 this->parameters=pengrid_parameters; 69 70 /*not active, not zigzagging: */ 71 active=0; 72 zigzag_counter=0; 73 74 } 75 /*}}}*/ 28 76 Pengrid::Pengrid(int pengrid_id, int pengrid_node_id,int pengrid_mparid, int pengrid_dof, int pengrid_active, double pengrid_penalty_offset,int pengrid_thermal_steadystate,int pengrid_stabilize_constraints){ 29 77 … … 42 90 matpar_offset=UNDEF; 43 91 44 zigzag_counter=0;45 92 46 93 return; 47 94 } 48 95 /*}}}1*/ 96 /*FUNCTION Pengrid::Pengrid(int i, IoModel* iomodel){{{1*/ 97 Pengrid::Pengrid(int index, IoModel* iomodel){ //i is the element index 98 99 int i,j; 100 int tria_node_ids[3]; 101 int tria_matice_id; 102 int tria_matpar_id; 103 double nodeinputs[3]; 104 105 /*id: */ 106 this->id=index+1; 107 108 /*hooks: */ 109 //go recover node ids, needed to initialize the node hook. 110 if (iomodel->analysis_type==Prognostic2AnalysisEnum || iomodel->analysis_type==Balancedthickness2AnalysisEnum){ 111 /*Discontinuous Galerkin*/ 112 tria_node_ids[0]=3*index+1; 113 tria_node_ids[1]=3*index+2; 114 tria_node_ids[2]=3*index+3; 115 } 116 else{ 117 /*Continuous Galerkin*/ 118 for(i=0;i<3;i++){ 119 tria_node_ids[i]=(int)*(iomodel->elements+3*index+i); //ids for vertices are in the elements array from Matlab 120 } 121 } 122 tria_matice_id=index+1; //refers to the corresponding ice material object 123 tria_matpar_id=iomodel->numberofelements+1; //refers to the constant material parameters object 124 125 this->hnodes.Init(tria_node_ids,3); 126 this->hmatice.Init(&tria_matice_id,1); 127 this->hmatpar.Init(&tria_matpar_id,1); 128 129 //intialize inputs, and add as many inputs per element as requested: 130 this->inputs=new Inputs(); 131 132 if (iomodel->thickness) { 133 for(i=0;i<3;i++)nodeinputs[i]=iomodel->thickness[tria_node_ids[i]-1]; 134 this->inputs->AddInput(new PengridVertexInput(ThicknessEnum,nodeinputs)); 135 } 136 if (iomodel->surface) { 137 for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface[tria_node_ids[i]-1]; 138 this->inputs->AddInput(new PengridVertexInput(SurfaceEnum,nodeinputs)); 139 } 140 if (iomodel->bed) { 141 for(i=0;i<3;i++)nodeinputs[i]=iomodel->bed[tria_node_ids[i]-1]; 142 this->inputs->AddInput(new PengridVertexInput(BedEnum,nodeinputs)); 143 } 144 if (iomodel->drag_coefficient) { 145 for(i=0;i<3;i++)nodeinputs[i]=iomodel->drag_coefficient[tria_node_ids[i]-1]; 146 this->inputs->AddInput(new PengridVertexInput(DragCoefficientEnum,nodeinputs)); 147 148 if (iomodel->drag_p) this->inputs->AddInput(new DoubleInput(DragPEnum,iomodel->drag_p[index])); 149 if (iomodel->drag_q) this->inputs->AddInput(new DoubleInput(DragQEnum,iomodel->drag_q[index])); 150 this->inputs->AddInput(new IntInput(DragTypeEnum,iomodel->drag_type)); 151 152 } 153 if (iomodel->melting_rate) { 154 for(i=0;i<3;i++)nodeinputs[i]=iomodel->melting_rate[tria_node_ids[i]-1]; 155 this->inputs->AddInput(new PengridVertexInput(MeltingRateEnum,nodeinputs)); 156 } 157 if (iomodel->accumulation_rate) { 158 for(i=0;i<3;i++)nodeinputs[i]=iomodel->accumulation_rate[tria_node_ids[i]-1]; 159 this->inputs->AddInput(new PengridVertexInput(AccumulationRateEnum,nodeinputs)); 160 } 161 if (iomodel->geothermalflux) { 162 for(i=0;i<3;i++)nodeinputs[i]=iomodel->geothermalflux[tria_node_ids[i]-1]; 163 this->inputs->AddInput(new PengridVertexInput(GeothermalFluxEnum,nodeinputs)); 164 } 165 166 if (iomodel->elementoniceshelf) this->inputs->AddInput(new BoolInput(ElementOnIceShelfEnum,(IssmBool)iomodel->elementoniceshelf[index])); 167 if (iomodel->elementonbed) this->inputs->AddInput(new BoolInput(ElementOnBedEnum,(IssmBool)iomodel->elementonbed[index])); 168 if (iomodel->elementonwater) this->inputs->AddInput(new BoolInput(ElementOnWaterEnum,(IssmBool)iomodel->elementonwater[index])); 169 if (iomodel->elementonsurface) this->inputs->AddInput(new BoolInput(ElementOnSurfaceEnum,(IssmBool)iomodel->elementonsurface[index])); 170 171 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this. 172 this->parameters=NULL; 173 174 175 } 176 /*}}}*/ 49 177 /*FUNCTION Pengrid::destructor {{{1*/ 50 178 Pengrid::~Pengrid(){ … … 162 290 /*FUNCTION Pengrid::CreateKMatrix {{{1*/ 163 291 164 void Pengrid::CreateKMatrix(Mat Kgg, void* inputs,int analysis_type,int sub_analysis_type){292 void Pengrid::CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type){ 165 293 166 294 /*No loads applied, do nothing: */ … … 170 298 /*}}}1*/ 171 299 /*FUNCTION Pengrid::CreatePVector {{{1*/ 172 void Pengrid::CreatePVector(Vec pg, void* inputs,int analysis_type,int sub_analysis_type){300 void Pengrid::CreatePVector(Vec pg, int analysis_type,int sub_analysis_type){ 173 301 174 302 /*No loads applied, do nothing: */ … … 253 381 /*}}}1*/ 254 382 /*FUNCTION Pengrid::PenaltyConstrain {{{1*/ 255 void Pengrid::PenaltyConstrain(int* punstable, void* vinputs,int analysis_type,int sub_analysis_type){383 void Pengrid::PenaltyConstrain(int* punstable,int analysis_type,int sub_analysis_type){ 256 384 257 385 if ((analysis_type==DiagnosticAnalysisEnum) && ((sub_analysis_type==StokesAnalysisEnum))){ … … 263 391 else if (analysis_type==ThermalAnalysisEnum){ 264 392 265 PenaltyConstrainThermal(punstable, vinputs,analysis_type,sub_analysis_type);393 PenaltyConstrainThermal(punstable,analysis_type,sub_analysis_type); 266 394 267 395 } … … 279 407 /*}}}1*/ 280 408 /*FUNCTION Pengrid::PenaltyConstrainThermal {{{1*/ 281 void Pengrid::PenaltyConstrainThermal(int* punstable, void* vinputs,int analysis_type,int sub_analysis_type){409 void Pengrid::PenaltyConstrainThermal(int* punstable,int analysis_type,int sub_analysis_type){ 282 410 283 411 // The penalty is stable if it doesn't change during to successive iterations. … … 360 488 /*}}}1*/ 361 489 /*FUNCTION Pengrid::PenaltyCreateMatrix {{{1*/ 362 void Pengrid::PenaltyCreateKMatrix(Mat Kgg, void* inputs,double kmax,int analysis_type,int sub_analysis_type){490 void Pengrid::PenaltyCreateKMatrix(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){ 363 491 364 492 if ((analysis_type==DiagnosticAnalysisEnum) && ((sub_analysis_type==StokesAnalysisEnum))){ 365 493 366 PenaltyCreateKMatrixDiagnosticStokes( Kgg, inputs,kmax,analysis_type,sub_analysis_type);494 PenaltyCreateKMatrixDiagnosticStokes( Kgg,kmax,analysis_type,sub_analysis_type); 367 495 } 368 496 else if (analysis_type==ThermalAnalysisEnum){ 369 497 370 PenaltyCreateKMatrixThermal( Kgg, inputs,kmax,analysis_type,sub_analysis_type);498 PenaltyCreateKMatrixThermal( Kgg,kmax,analysis_type,sub_analysis_type); 371 499 372 500 } 373 501 else if (analysis_type==MeltingAnalysisEnum){ 374 502 375 PenaltyCreateKMatrixMelting( Kgg, inputs,kmax,analysis_type,sub_analysis_type);503 PenaltyCreateKMatrixMelting( Kgg,kmax,analysis_type,sub_analysis_type); 376 504 377 505 } … … 383 511 /*}}}1*/ 384 512 /*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticStokes {{{1*/ 385 void Pengrid::PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg, void* vinputs,double kmax,int analysis_type,int sub_analysis_type){513 void Pengrid::PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){ 386 514 387 515 const int numgrids=1; … … 421 549 /*}}}1*/ 422 550 /*FUNCTION Pengrid::PenaltyCreateKMatrixMelting {{{1*/ 423 void Pengrid::PenaltyCreateKMatrixMelting(Mat Kgg, void* vinputs,double kmax,int analysis_type,int sub_analysis_type){551 void Pengrid::PenaltyCreateKMatrixMelting(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){ 424 552 425 553 … … 469 597 /*}}}1*/ 470 598 /*FUNCTION Pengrid::PenaltyCreateKMatrixThermal {{{1*/ 471 void Pengrid::PenaltyCreateKMatrixThermal(Mat Kgg, void* vinputs,double kmax,int analysis_type,int sub_analysis_type){599 void Pengrid::PenaltyCreateKMatrixThermal(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type){ 472 600 473 601 int found=0; … … 498 626 /*}}}1*/ 499 627 /*FUNCTION Pengrid::PenaltyCreatePVector {{{1*/ 500 void Pengrid::PenaltyCreatePVector(Vec pg, void* inputs,double kmax,int analysis_type,int sub_analysis_type){628 void Pengrid::PenaltyCreatePVector(Vec pg,double kmax,int analysis_type,int sub_analysis_type){ 501 629 502 630 if (analysis_type==ThermalAnalysisEnum){ 503 631 504 PenaltyCreatePVectorThermal( pg, inputs,kmax,analysis_type,sub_analysis_type);632 PenaltyCreatePVectorThermal( pg,kmax,analysis_type,sub_analysis_type); 505 633 506 634 } 507 635 else if (analysis_type==MeltingAnalysisEnum){ 508 636 509 PenaltyCreatePVectorMelting( pg, inputs,kmax,analysis_type,sub_analysis_type);637 PenaltyCreatePVectorMelting( pg,kmax,analysis_type,sub_analysis_type); 510 638 511 639 } … … 523 651 /*}}}1*/ 524 652 /*FUNCTION Pengrid::PenaltyCreatePVectorMelting {{{1*/ 525 void Pengrid::PenaltyCreatePVectorMelting(Vec pg, void* vinputs,double kmax,int analysis_type,int sub_analysis_type){653 void Pengrid::PenaltyCreatePVectorMelting(Vec pg, double kmax,int analysis_type,int sub_analysis_type){ 526 654 527 655 const int numgrids=1; … … 595 723 /*}}}1*/ 596 724 /*FUNCTION Pengrid::PenaltyCreatePVectorThermal {{{1*/ 597 void Pengrid::PenaltyCreatePVectorThermal(Vec pg, void* vinputs,double kmax,int analysis_type,int sub_analysis_type){725 void Pengrid::PenaltyCreatePVectorThermal(Vec pg, double kmax,int analysis_type,int sub_analysis_type){ 598 726 599 727 const int numgrids=1; -
issm/trunk/src/c/objects/Pengrid.h
r3463 r3621 16 16 17 17 int id; 18 int dof;19 int active;20 double penalty_offset;21 int thermal_steadystate;22 18 23 /*nodes: */ 24 int node_id; 25 Node* node; 26 int node_offset; 19 Hook hnode; //hook to 1 node 20 Hook hmatpar; //hook to 1 matpar 27 21 28 int mparid;29 Matpar* matpar;30 int matpar_offset;31 32 int stabilize_constraints;22 Parameters* parameters; //pointer to solution parameters 23 Inputs* inputs; 24 25 /*internals: */ 26 int active; 33 27 int zigzag_counter; 34 28 35 29 public: 36 30 31 /*FUNCTION constructors, destructors {{{1*/ 37 32 Pengrid(); 38 Pengrid(int id, int node_id,int mparid,int dof, int active, double penalty_offset,int thermal_steadystate,int stabilize_constraints); 33 Pengrid(int pengrid_id,int pengrid_node_id int pengrid_matpar_id); 34 Pengrid(int pengrid_id,Hook* pengrid_hnode, Hook* pengrid_hmatpar, Parameters* pengrid_parameters, Inputs* pengrid_inputs); 35 Pengrid(int i, IoModel* iomodel); 39 36 ~Pengrid(); 40 37 /*}}}*/ 38 /*FUNCTION object management {{{1*/ 39 void Configure(void* elements,void* nodes,void* materials); 40 Object* copy(); 41 void DeepEcho(); 42 void Demarshall(char** pmarshalled_dataset); 41 43 void Echo(); 42 void DeepEcho(); 44 int Enum(); 45 int GetId(); 46 char* GetName(); 43 47 void Marshall(char** pmarshalled_dataset); 44 48 int MarshallSize(); 45 char* GetName();46 void Demarshall(char** pmarshalled_dataset);47 int Enum();48 int GetId();49 49 int MyRank(); 50 /*}}}*/ 51 /*FUNCTION element numerical routines {{{1*/ 50 52 void DistributeNumDofs(int* numdofspernode,int analysis_type,int sub_analysis_type); 51 void Configure(void* elements,void* nodes,void* materials); 52 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 53 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 54 void UpdateFromInputs(void* inputs); 55 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 56 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 57 void PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 53 void CreateKMatrix(Mat Kgg,int analysis_type,int sub_analysis_type); 54 void CreatePVector(Vec pg, int analysis_type,int sub_analysis_type); 55 void PenaltyCreateKMatrix(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type); 56 void PenaltyCreatePVector(Vec pg,double kmax,int analysis_type,int sub_analysis_type); 57 void PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type); 58 58 void GetDofList(int* doflist,int* pnumberofdofspernode); 59 Object* copy(); 60 void PenaltyCreateKMatrixThermal(Mat Kgg,void* vinputs,double kmax,int analysis_type,int sub_analysis_type); 61 void PenaltyCreateKMatrixMelting(Mat Kgg,void* vinputs,double kmax,int analysis_type,int sub_analysis_type); 59 void PenaltyCreateKMatrixThermal(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type); 60 void PenaltyCreateKMatrixMelting(Mat Kgg,double kmax,int analysis_type,int sub_analysis_type); 62 61 void MatparConfiguration(Matpar* matpar,int matpar_offset); 63 void PenaltyCreatePVectorThermal(Vec pg, void* inputs, double kmax,int analysis_type,int sub_analysis_type); 64 void PenaltyCreatePVectorMelting(Vec pg, void* inputs, double kmax,int analysis_type,int sub_analysis_type); 65 void PenaltyConstrain(int* punstable,void* inputs,int analysis_type,int sub_analysis_type); 66 void PenaltyConstrainThermal(int* punstable,void* inputs,int analysis_type,int sub_analysis_type); 62 void PenaltyCreatePVectorThermal(Vec pg, double kmax,int analysis_type,int sub_analysis_type); 63 void PenaltyCreatePVectorMelting(Vec pg, double kmax,int analysis_type,int sub_analysis_type); 64 void PenaltyConstrain(int* punstable,int analysis_type,int sub_analysis_type); 65 void PenaltyConstrainThermal(int* punstable,int analysis_type,int sub_analysis_type); 66 67 /*updates:*/ 68 void UpdateFromDakota(void* inputs); 69 void UpdateInputs(double* solution, int analysis_type, int sub_analysis_type); 70 /*}}}*/ 67 71 68 72 }; -
issm/trunk/src/c/objects/Penta.cpp
r3620 r3621 17 17 #include "../include/typedefs.h" 18 18 #include "../include/macros.h" 19 #include "../DataSet/DataSet.h" 20 #include "../DataSet/Inputs.h" 19 21 20 22 /*Object constructors and destructor*/ … … 22 24 Penta::Penta(){ 23 25 this->inputs=NULL; 24 return;26 this->parameters=NULL; 25 27 } 26 28 /*}}}*/ 27 29 /*FUNCTION Penta constructor {{{1*/ 28 Penta::Penta(int penta_id,int* penta_node_ids, int penta_matice_id, int penta_matpar_id , int penta_numpar_id):30 Penta::Penta(int penta_id,int* penta_node_ids, int penta_matice_id, int penta_matpar_id): 29 31 hnodes(penta_node_ids,6), 30 32 hmatice(&penta_matice_id,1), 31 hmatpar(&penta_matpar_id,1), 32 hnumpar(&penta_numpar_id,1) 33 hmatpar(&penta_matpar_id,1) 33 34 { 34 35 35 36 /*all the initialization has been done by the initializer, just fill in the id: */ 36 37 this->id=penta_id; 38 this->parameters=NULL; 37 39 this->inputs=new Inputs(); 38 40 39 41 } 40 42 /*}}}*/ 41 /*FUNCTION Penta other constructor{{{1*/42 Penta::Penta(int penta_id,Hook* penta_hnodes, Hook* penta_hmatice, Hook* penta_hmatpar, Hook* penta_hnumpar, Inputs* penta_inputs):43 /*FUNCTION Penta::Penta(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, DataSet* parameters, Inputs* penta_inputs) {{{1*/ 44 Penta::Penta(int penta_id,Hook* penta_hnodes, Hook* penta_hmatice, Hook* penta_hmatpar, Parameters* penta_parameters, Inputs* penta_inputs): 43 45 hnodes(penta_hnodes), 44 46 hmatice(penta_hmatice), 45 hmatpar(penta_hmatpar), 46 hnumpar(penta_hnumpar) 47 hmatpar(penta_hmatpar) 47 48 { 48 49 … … 55 56 this->inputs=new Inputs(); 56 57 } 58 /*point parameters: */ 59 this->parameters=penta_parameters; 57 60 } 58 61 /*}}}*/ … … 64 67 int penta_matice_id; 65 68 int penta_matpar_id; 66 int penta_numpar_id;67 69 double nodeinputs[6]; 68 70 bool collapse; … … 77 79 penta_matice_id=index+1; //refers to the corresponding ice material object 78 80 penta_matpar_id=iomodel->numberofelements+1; //refers to the constant material parameters object 79 penta_numpar_id=1; //refers to numerical parameters object80 81 81 82 this->hnodes.Init(&penta_node_ids[0],6); 82 83 this->hmatice.Init(&penta_matice_id,1); 83 84 this->hmatpar.Init(&penta_matpar_id,1); 84 this->hnumpar.Init(&penta_numpar_id,1);85 85 86 86 //intialize inputs, and add as many inputs per element as requested: … … 142 142 Penta::~Penta(){ 143 143 delete inputs; 144 return;144 this->parameters=NULL; 145 145 } 146 146 /*}}}*/ 147 147 148 148 /*Object management: */ 149 /*FUNCTION Configure {{{1*/150 void Penta::Configure( void* ploadsin,void* pnodesin,void* pmaterialsin,void* pparametersin){149 /*FUNCTION Penta::Configure {{{1*/ 150 void Penta::Configure(DataSet* loadsin, DataSet* nodesin, DataSet* materialsin, Parameters* parametersin){ 151 151 152 152 int i; 153 154 DataSet* loadsin=NULL;155 DataSet* nodesin=NULL;156 DataSet* materialsin=NULL;157 DataSet* parametersin=NULL;158 159 /*Recover pointers :*/160 loadsin=(DataSet*)ploadsin;161 nodesin=(DataSet*)pnodesin;162 materialsin=(DataSet*)pmaterialsin;163 parametersin=(DataSet*)pparametersin;164 153 165 154 /*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective … … 168 157 hmatice.configure(materialsin); 169 158 hmatpar.configure(materialsin); 170 hnumpar.configure(parametersin); 159 160 /*point parameters to real dataset: */ 161 this->parameters=parametersin; 171 162 172 163 } … … 174 165 /*FUNCTION copy {{{1*/ 175 166 Object* Penta::copy() { 176 return new Penta(this->id,&this->hnodes,&this->hmatice,&this->hmatpar, &this->hnumpar,this->inputs);167 return new Penta(this->id,&this->hnodes,&this->hmatice,&this->hmatpar,this->parameters,this->inputs); 177 168 } 178 169 /*}}}*/ … … 195 186 hmatice.Demarshall(&marshalled_dataset); 196 187 hmatpar.Demarshall(&marshalled_dataset); 197 hnumpar.Demarshall(&marshalled_dataset);198 188 199 189 /*demarshall inputs: */ 200 190 inputs=(Inputs*)DataSetDemarshallRaw(&marshalled_dataset); 191 192 /*parameters: may not exist even yet, so let Configure handle it: */ 193 this->parameters=NULL; 201 194 202 195 /*return: */ … … 214 207 hmatice.DeepEcho(); 215 208 hmatpar.DeepEcho(); 216 hnumpar.DeepEcho(); 209 printf(" parameters\n"); 210 parameters->DeepEcho(); 217 211 printf(" inputs\n"); 218 212 inputs->DeepEcho(); … … 230 224 hmatice.Echo(); 231 225 hmatpar.Echo(); 232 hnumpar.Echo(); 226 printf(" parameters\n"); 227 parameters->Echo(); 233 228 printf(" inputs\n"); 234 229 inputs->Echo(); … … 267 262 hmatice.Marshall(&marshalled_dataset); 268 263 hmatpar.Marshall(&marshalled_dataset); 269 hnumpar.Marshall(&marshalled_dataset);270 264 271 265 /*Marshall inputs: */ … … 275 269 marshalled_dataset+=marshalled_inputs_size; 276 270 271 /*parameters: don't do anything about it. parameters are marshalled somewhere else!*/ 272 277 273 xfree((void**)&marshalled_inputs); 278 279 274 280 275 *pmarshalled_dataset=marshalled_dataset; … … 289 284 +hmatice.MarshallSize() 290 285 +hmatpar.MarshallSize() 291 +hnumpar.MarshallSize()292 286 +inputs->MarshallSize() 293 287 +sizeof(int); //sizeof(int) for enum type … … 304 298 Hook* tria_hmatice=NULL; 305 299 Hook* tria_hmatpar=NULL; 306 Hook* tria_hnumpar=NULL;300 Parameters* tria_parameters=NULL; 307 301 Inputs* tria_inputs=NULL; 308 302 … … 314 308 tria_hmatice=this->hmatice.Spawn(&zero,1); 315 309 tria_hmatpar=this->hmatpar.Spawn(&zero,1); 316 tria_ hnumpar=this->hnumpar.Spawn(&zero,1);310 tria_parameters=this->parameters; 317 311 tria_inputs=(Inputs*)this->inputs->Spawn(indices,3); 318 312 319 tria=new Tria(this->id,tria_hnodes,tria_hmatice,tria_hmatpar,tria_ hnumpar,tria_inputs);313 tria=new Tria(this->id,tria_hnodes,tria_hmatice,tria_hmatpar,tria_parameters,tria_inputs); 320 314 321 315 delete tria_hnodes; 322 316 delete tria_hmatice; 323 317 delete tria_hmatpar; 324 delete tria_hnumpar;325 318 delete tria_inputs; 326 319 … … 497 490 bool onbed; 498 491 492 /*parameters: */ 493 double stokesreconditioning; 494 499 495 /*dynamic objects pointed to by hooks: */ 500 496 Node** nodes=NULL; 501 497 Matpar* matpar=NULL; 502 498 Matice* matice=NULL; 503 Numpar* numpar=NULL;504 499 505 500 /*Check analysis_types*/ … … 510 505 matpar=(Matpar*)hmatpar.delivers(); 511 506 matice=(Matice*)hmatice.delivers(); 512 numpar=(Numpar*)hnumpar.delivers();513 507 514 508 /*recover some inputs: */ 515 509 inputs->GetParameterValue(&onbed,ElementOnBedEnum); 516 510 511 /*retrieve some parameters: */ 512 this->parameters->FindParam(&stokesreconditioning,"stokesreconditioning"); 513 517 514 if(!onbed){ 518 515 //put zero … … 552 549 553 550 /*Compute Stress*/ 554 sigma_xx=viscosity*epsilon[0]-pressure* numpar->stokesreconditioning; // sigma = nu eps - pressure555 sigma_yy=viscosity*epsilon[1]-pressure* numpar->stokesreconditioning;556 sigma_zz=viscosity*epsilon[2]-pressure* numpar->stokesreconditioning;551 sigma_xx=viscosity*epsilon[0]-pressure*stokesreconditioning; // sigma = nu eps - pressure 552 sigma_yy=viscosity*epsilon[1]-pressure*stokesreconditioning; 553 sigma_zz=viscosity*epsilon[2]-pressure*stokesreconditioning; 557 554 sigma_xy=viscosity*epsilon[3]; 558 555 sigma_xz=viscosity*epsilon[4]; … … 723 720 else if (analysis_type==BalancedthicknessAnalysisEnum){ 724 721 725 CreateKMatrixBalancedthickness( Kgg, inputs,analysis_type,sub_analysis_type);722 CreateKMatrixBalancedthickness( Kgg,analysis_type,sub_analysis_type); 726 723 } 727 724 else if (analysis_type==BalancedvelocitiesAnalysisEnum){ 728 725 729 CreateKMatrixBalancedvelocities( Kgg, inputs,analysis_type,sub_analysis_type);726 CreateKMatrixBalancedvelocities( Kgg,analysis_type,sub_analysis_type); 730 727 } 731 728 else if (analysis_type==ThermalAnalysisEnum){ … … 745 742 /*FUNCTION CreateKMatrixBalancedthickness {{{1*/ 746 743 747 void Penta::CreateKMatrixBalancedthickness(Mat Kgg, void* inputs,int analysis_type,int sub_analysis_type){744 void Penta::CreateKMatrixBalancedthickness(Mat Kgg,int analysis_type,int sub_analysis_type){ 748 745 749 746 /*Collapsed formulation: */ 750 747 Tria* tria=NULL; 751 748 749 /*flags: */ 750 bool onwater; 751 bool onbed; 752 753 /*recover some inputs: */ 754 inputs->GetParameterValue(&onwater,ElementOnWaterEnum); 755 inputs->GetParameterValue(&onbed,ElementOnBedEnum); 756 752 757 /*If on water, skip: */ 753 if( this->properties.onwater)return;758 if(onwater)return; 754 759 755 760 /*Is this element on the bed? :*/ 756 if(! this->properties.onbed)return;761 if(!onbed)return; 757 762 758 763 /*Spawn Tria element from the base of the Penta: */ 759 764 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 760 tria->CreateKMatrix(Kgg, inputs,analysis_type,sub_analysis_type);765 tria->CreateKMatrix(Kgg, analysis_type,sub_analysis_type); 761 766 delete tria; 762 767 return; … … 766 771 /*FUNCTION CreateKMatrixBalancedvelocities {{{1*/ 767 772 768 void Penta::CreateKMatrixBalancedvelocities(Mat Kgg, void* inputs,int analysis_type,int sub_analysis_type){773 void Penta::CreateKMatrixBalancedvelocities(Mat Kgg,int analysis_type,int sub_analysis_type){ 769 774 770 775 /*Collapsed formulation: */ 771 776 Tria* tria=NULL; 772 777 778 /*flags: */ 779 bool onbed; 780 bool onwater; 781 782 /*recover some inputs: */ 783 inputs->GetParameterValue(&onbed,ElementOnBedEnum); 784 inputs->GetParameterValue(&onwater,ElementOnWaterEnum); 785 773 786 /*If on water, skip: */ 774 if( this->properties.onwater)return;787 if(onwater)return; 775 788 776 789 /*Is this element on the bed? :*/ 777 if(! this->properties.onbed)return;790 if(!onbed)return; 778 791 779 792 /*Spawn Tria element from the base of the Penta: */ 780 793 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 781 tria->CreateKMatrix(Kgg, inputs,analysis_type,sub_analysis_type);794 tria->CreateKMatrix(Kgg,analysis_type,sub_analysis_type); 782 795 delete tria; 783 796 return; … … 860 873 double MOUNTAINKEXPONENT=10; 861 874 875 /*parameters: */ 876 double viscosity_overshoot; 877 862 878 /*Collapsed formulation: */ 863 879 Tria* tria=NULL; … … 866 882 Node** nodes=NULL; 867 883 Matice* matice=NULL; 868 Numpar* numpar=NULL;869 884 870 885 /*recover objects from hooks: */ 871 886 nodes=(Node**)hnodes.deliverp(); 872 887 matice=(Matice*)hmatice.delivers(); 873 numpar=(Numpar*)hnumpar.delivers();874 888 875 889 /*inputs: */ … … 884 898 inputs->GetParameterValue(&onbed,ElementOnBedEnum); 885 899 inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum); 900 901 /*retrieve some parameters: */ 902 this->parameters->FindParam(&viscosity_overshoot,"viscosity_overshoot"); 886 903 887 904 /*If on water, skip stiffness: */ … … 961 978 onto this scalar matrix, so that we win some computational time: */ 962 979 963 newviscosity=viscosity+ numpar->viscosity_overshoot*(viscosity-oldviscosity);980 newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity); 964 981 D_scalar=newviscosity*gauss_weight*Jdet; 965 982 for (i=0;i<5;i++){ … … 1094 1111 double drag_p,drag_q; 1095 1112 1113 /*parameters: */ 1114 double stokesreconditioning; 1115 1096 1116 /*dynamic objects pointed to by hooks: */ 1097 1117 Node** nodes=NULL; 1098 1118 Matpar* matpar=NULL; 1099 1119 Matice* matice=NULL; 1100 Numpar* numpar=NULL;1101 1120 1102 1121 /*inputs: */ … … 1117 1136 matpar=(Matpar*)hmatpar.delivers(); 1118 1137 matice=(Matice*)hmatice.delivers(); 1119 numpar=(Numpar*)hnumpar.delivers();1120 1138 1121 1139 … … 1124 1142 rho_ice=matpar->GetRhoIce(); 1125 1143 gravity=matpar->GetG(); 1144 1145 /*retrieve some parameters: */ 1146 this->parameters->FindParam(&stokesreconditioning,"stokesreconditioning"); 1126 1147 1127 1148 /* Get node coordinates and dof list: */ … … 1173 1194 } 1174 1195 for (i=6;i<8;i++){ 1175 D[i][i]=-D_scalar* numpar->stokesreconditioning;1196 D[i][i]=-D_scalar*stokesreconditioning; 1176 1197 } 1177 1198 … … 1280 1301 DLStokes[9][8]=-viscosity*gauss_weight*Jdet2d*bed_normal[0]/2.0; 1281 1302 DLStokes[10][10]=-viscosity*gauss_weight*Jdet2d*bed_normal[1]/2.0; 1282 DLStokes[11][11]= numpar->stokesreconditioning*gauss_weight*Jdet2d*bed_normal[0];1283 DLStokes[12][12]= numpar->stokesreconditioning*gauss_weight*Jdet2d*bed_normal[1];1284 DLStokes[13][13]= numpar->stokesreconditioning*gauss_weight*Jdet2d*bed_normal[2];1303 DLStokes[11][11]=stokesreconditioning*gauss_weight*Jdet2d*bed_normal[0]; 1304 DLStokes[12][12]=stokesreconditioning*gauss_weight*Jdet2d*bed_normal[1]; 1305 DLStokes[13][13]=stokesreconditioning*gauss_weight*Jdet2d*bed_normal[2]; 1285 1306 1286 1307 /* Do the triple product tL*D*L: */ … … 1570 1591 1571 1592 int dofs[3]={0,1,2}; 1572 double dt;1573 1593 double K[2][2]={0.0}; 1574 1594 … … 1605 1625 double mixed_layer_capacity,thermal_exchange_velocity; 1606 1626 1627 /*parameters: */ 1628 double dt,artdiff,epsvel; 1629 1607 1630 /*dynamic objects pointed to by hooks: */ 1608 1631 Node** nodes=NULL; 1609 1632 Matpar* matpar=NULL; 1610 Numpar* numpar=NULL;1611 1633 1612 1634 /*Collapsed formulation: */ … … 1630 1652 nodes=(Node**)hnodes.deliverp(); 1631 1653 matpar=(Matpar*)hmatpar.delivers(); 1632 numpar=(Numpar*)hnumpar.delivers();1633 1654 1634 1655 /* Get node coordinates and dof list: */ … … 1642 1663 heatcapacity=matpar->GetHeatCapacity(); 1643 1664 thermalconductivity=matpar->GetThermalConductivity(); 1644 dt=numpar->dt; 1665 1666 /*retrieve some parameters: */ 1667 this->parameters->FindParam(&dt,"dt"); 1668 this->parameters->FindParam(&artdiff,"art_diff"); 1669 this->parameters->FindParam(&epsvel,"epsvel"); 1645 1670 1646 1671 /* Get gaussian points and weights. Penta is an extrusion of a Tria, we therefore … … 1735 1760 1736 1761 /*Artifficial diffusivity*/ 1737 if( numpar->artdiff){1762 if(artdiff){ 1738 1763 /*Build K: */ 1739 D_scalar=gauss_weight*Jdet/(pow(u,2)+pow(v,2)+ numpar->epsvel);1764 D_scalar=gauss_weight*Jdet/(pow(u,2)+pow(v,2)+epsvel); 1740 1765 if(dt){ 1741 1766 D_scalar=D_scalar*dt; … … 1822 1847 else if (analysis_type==BalancedthicknessAnalysisEnum){ 1823 1848 1824 CreatePVectorPrognostic( pg, inputs,analysis_type,sub_analysis_type);1849 CreatePVectorPrognostic( pg,analysis_type,sub_analysis_type); 1825 1850 } 1826 1851 else if (analysis_type==BalancedvelocitiesAnalysisEnum){ 1827 1852 1828 CreatePVectorPrognostic( pg, inputs,analysis_type,sub_analysis_type);1853 CreatePVectorPrognostic( pg,analysis_type,sub_analysis_type); 1829 1854 } 1830 1855 else if (analysis_type==ThermalAnalysisEnum){ … … 1843 1868 /*}}}*/ 1844 1869 /*FUNCTION CreatePVectorBalancedthickness {{{1*/ 1845 1846 void Penta::CreatePVectorBalancedthickness( Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 1870 void Penta::CreatePVectorBalancedthickness( Vec pg, int analysis_type,int sub_analysis_type){ 1847 1871 1848 1872 /*Collapsed formulation: */ 1849 1873 Tria* tria=NULL; 1850 1874 1875 /*flags: */ 1876 bool onbed; 1877 bool onwater; 1878 1879 /*recover some inputs: */ 1880 inputs->GetParameterValue(&onbed,ElementOnBedEnum); 1881 inputs->GetParameterValue(&onwater,ElementOnWaterEnum); 1882 1851 1883 /*If on water, skip: */ 1852 if( this->properties.onwater)return;1884 if(onwater)return; 1853 1885 1854 1886 /*Is this element on the bed? :*/ 1855 if(! this->properties.onbed)return;1887 if(!onbed)return; 1856 1888 1857 1889 /*Spawn Tria element from the base of the Penta: */ 1858 1890 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 1859 tria->CreatePVector(pg, inputs,analysis_type,sub_analysis_type);1891 tria->CreatePVector(pg, analysis_type,sub_analysis_type); 1860 1892 delete tria; 1861 1893 return; … … 1863 1895 /*}}}*/ 1864 1896 /*FUNCTION CreatePVectorBalancedvelocities {{{1*/ 1865 1866 void Penta::CreatePVectorBalancedvelocities( Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 1897 void Penta::CreatePVectorBalancedvelocities( Vec pg, int analysis_type,int sub_analysis_type){ 1867 1898 1868 1899 /*Collapsed formulation: */ 1869 1900 Tria* tria=NULL; 1870 1901 1902 /*flags: */ 1903 bool onbed; 1904 bool onwater; 1905 1906 /*recover some inputs: */ 1907 inputs->GetParameterValue(&onbed,ElementOnBedEnum); 1908 inputs->GetParameterValue(&onwater,ElementOnWaterEnum); 1909 1871 1910 /*If on water, skip: */ 1872 if( this->properties.onwater)return;1911 if(onwater)return; 1873 1912 1874 1913 /*Is this element on the bed? :*/ 1875 if(! this->properties.onbed)return;1914 if(!onbed)return; 1876 1915 1877 1916 /*Spawn Tria element from the base of the Penta: */ 1878 1917 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 1879 tria->CreatePVector(pg, inputs,analysis_type,sub_analysis_type);1918 tria->CreatePVector(pg, analysis_type,sub_analysis_type); 1880 1919 delete tria; 1881 1920 return; … … 2110 2149 Matpar* matpar=NULL; 2111 2150 Matice* matice=NULL; 2112 Numpar* numpar=NULL; 2151 2152 /*parameters: */ 2153 double stokesreconditioning; 2113 2154 2114 2155 /*inputs: */ … … 2122 2163 inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum); 2123 2164 2165 /*retrieve some parameters: */ 2166 this->parameters->FindParam(&stokesreconditioning,"stokesreconditioning"); 2167 2124 2168 /*If on water, skip load: */ 2125 2169 if(onwater)return; … … 2129 2173 matpar=(Matpar*)hmatpar.delivers(); 2130 2174 matice=(Matice*)hmatice.delivers(); 2131 numpar=(Numpar*)hnumpar.delivers();2132 2175 2133 2176 … … 2200 2243 } 2201 2244 for (i=6;i<8;i++){ 2202 D[i][i]=-D_scalar* numpar->stokesreconditioning;2245 D[i][i]=-D_scalar*stokesreconditioning; 2203 2246 } 2204 2247 … … 2513 2556 int num_vert_gauss=3; 2514 2557 2515 double dt;2516 2558 double temperature_list[numgrids]; 2517 2559 double temperature; … … 2552 2594 Tria* tria=NULL; 2553 2595 2596 /*parameters: */ 2597 double dt; 2598 2554 2599 /*dynamic objects pointed to by hooks: */ 2555 2600 Node** nodes=NULL; 2556 2601 Matpar* matpar=NULL; 2557 2602 Matice* matice=NULL; 2558 Numpar* numpar=NULL;2559 2603 2560 2604 /*inputs: */ … … 2568 2612 inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum); 2569 2613 2614 /*retrieve some parameters: */ 2615 this->parameters->FindParam(&dt,"dt"); 2616 2570 2617 /*If on water, skip: */ 2571 2618 if(onwater)return; … … 2575 2622 matpar=(Matpar*)hmatpar.delivers(); 2576 2623 matice=(Matice*)hmatice.delivers(); 2577 numpar=(Numpar*)hnumpar.delivers();2578 2624 2579 2625 /* Get node coordinates and dof list: */ … … 2588 2634 beta=matpar->GetBeta(); 2589 2635 meltingpoint=matpar->GetMeltingPoint(); 2590 dt=numpar->dt;2591 2636 2592 2637 /* Get gaussian points and weights. Penta is an extrusion of a Tria, we therefore -
issm/trunk/src/c/objects/Penta.h
r3620 r3621 21 21 #include "../ModelProcessorx/IoModel.h" 22 22 #include "./Node.h" 23 #include "../DataSet/DataSet.h" 24 #include "../DataSet/Parameters.h" 25 #include "../DataSet/Inputs.h" 23 26 24 27 class Penta: public Element{ … … 30 33 Hook hmatice; //hook to 1 matice 31 34 Hook hmatpar; //hook to 1 matpar 32 Hook hnumpar; //hook to 1 numpar33 35 36 Parameters* parameters; //pointer to solution parameters 34 37 Inputs* inputs; 35 38 … … 38 41 /*FUNCTION constructors, destructors {{{1*/ 39 42 Penta(); 40 Penta(int penta_id,int* penta_node_ids, int penta_matice_id, int penta_matpar_id , int penta_numpar_id);41 Penta(int penta_id,Hook* penta_hnodes, Hook* penta_hmatice, Hook* penta_hmatpar, Hook* penta_hnumpar, Inputs* inputs);43 Penta(int penta_id,int* penta_node_ids, int penta_matice_id, int penta_matpar_id); 44 Penta(int penta_id,Hook* penta_hnodes, Hook* penta_hmatice, Hook* penta_hmatpar, Parameters* penta_parameters, Inputs* inputs); 42 45 Penta(int i, IoModel* iomodel); 43 46 ~Penta(); … … 104 107 void CreateKMatrixPrognostic(Mat Kgg,int analysis_type,int sub_analysis_type); 105 108 void CreatePVectorPrognostic( Vec pg, int analysis_type,int sub_analysis_type); 106 109 void CreateKMatrixBalancedthickness(Mat Kgg,int analysis_type,int sub_analysis_type); 110 void CreateKMatrixBalancedvelocities(Mat Kgg,int analysis_type,int sub_analysis_type); 107 111 void CreateKMatrixDiagnosticStokes( Mat Kgg, int analysis_type,int sub_analysis_type); 112 void CreatePVectorBalancedthickness( Vec pg, int analysis_type,int sub_analysis_type); 113 void CreatePVectorBalancedvelocities( Vec pg, int analysis_type,int sub_analysis_type); 108 114 void CreatePVectorDiagnosticStokes( Vec pg, int analysis_type,int sub_analysis_type); 109 115 void ReduceMatrixStokes(double* Ke_reduced, double* Ke_temp); -
issm/trunk/src/c/objects/Sing.cpp
r3620 r3621 16 16 #include "../shared/shared.h" 17 17 #include "../DataSet/DataSet.h" 18 #include "../DataSet/Parameters.h" 18 19 #include "../DataSet/Inputs.h" 19 20 #include "../include/typedefs.h" … … 24 25 Sing::Sing(){ 25 26 this->inputs=NULL; 27 this->parameters=NULL; 26 28 return; 27 29 } 28 30 /*}}}*/ 29 31 /*FUNCTION Sing constructor {{{1*/ 30 Sing::Sing(int sing_id,int* sing_node_ids, int sing_matice_id, int sing_matpar_id , int sing_numpar_id):32 Sing::Sing(int sing_id,int* sing_node_ids, int sing_matice_id, int sing_matpar_id): 31 33 hnodes(sing_node_ids,1), 32 34 hmatice(&sing_matice_id,1), 33 hmatpar(&sing_matpar_id,1), 34 hnumpar(&sing_numpar_id,1) 35 hmatpar(&sing_matpar_id,1) 35 36 { 36 37 37 38 /*all the initialization has been done by the initializer, just fill in the id: */ 38 39 this->id=sing_id; 40 this->parameters=NULL; 39 41 this->inputs=new Inputs(); 40 42 … … 43 45 /*}}}*/ 44 46 /*FUNCTION Sing other constructor {{{1*/ 45 Sing::Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Hook* sing_hnumpar,Inputs* sing_inputs):47 Sing::Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Parameters* sing_parameters,Inputs* sing_inputs): 46 48 hnodes(sing_hnodes), 47 49 hmatice(sing_hmatice), 48 hmatpar(sing_hmatpar), 49 hnumpar(sing_hnumpar) 50 hmatpar(sing_hmatpar) 50 51 { 51 52 … … 58 59 this->inputs=new Inputs(); 59 60 } 60 return; 61 /*point parameters: */ 62 this->parameters=sing_parameters; 61 63 } 62 64 /*}}}*/ … … 66 68 int sing_matice_id; 67 69 int sing_matpar_id; 68 int sing_numpar_id;69 70 70 71 int sing_g; … … 79 80 sing_matice_id=i+1; //refers to the corresponding material property card 80 81 sing_matpar_id=iomodel->numberofvertices+1;//refers to the corresponding matpar property card 81 sing_numpar_id=1;82 82 sing_g=i+1; 83 83 … … 85 85 this->hmatice.Init(&sing_matice_id,1); 86 86 this->hmatpar.Init(&sing_matpar_id,1); 87 this->hnumpar.Init(&sing_numpar_id,1);88 87 89 88 //intialize inputs, and add as many inputs per element as requested: … … 92 91 if (iomodel->thickness) this->inputs->AddInput(new SingVertexInput(ThicknessEnum,iomodel->thickness[i])); 93 92 if (iomodel->drag_coefficient) this->inputs->AddInput(new SingVertexInput(DragCoefficientEnum,iomodel->drag_coefficient[i])); 93 94 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this. 95 this->parameters=NULL; 94 96 95 97 } … … 98 100 Sing::~Sing(){ 99 101 delete inputs; 100 return;102 this->parameters=NULL; 101 103 } 102 104 /*}}}*/ … … 104 106 /*Object management*/ 105 107 /*FUNCTION Sing::Configure {{{1*/ 106 void Sing::Configure( void* ploadsin, void* pnodesin,void* pmaterialsin,void* pparametersin){108 void Sing::Configure(DataSet* loadsin, DataSet* nodesin, DataSet* materialsin, Parameters* parametersin){ 107 109 108 110 int i; 109 111 110 DataSet* loadsin=NULL;111 DataSet* nodesin=NULL;112 DataSet* materialsin=NULL;113 DataSet* parametersin=NULL;114 115 /*Recover pointers :*/116 loadsin=(DataSet*)ploadsin;117 nodesin=(DataSet*)pnodesin;118 materialsin=(DataSet*)pmaterialsin;119 parametersin=(DataSet*)pparametersin;120 121 112 /*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 122 113 * datasets, using internal ids and offsets hidden in hooks: */ … … 124 115 hmatice.configure(materialsin); 125 116 hmatpar.configure(materialsin); 126 hnumpar.configure(parametersin); 117 118 /*point parameters to real dataset: */ 119 this->parameters=parametersin; 127 120 128 121 } … … 131 124 Object* Sing::copy() { 132 125 133 return new Sing( *this);126 return new Sing(this->id,&this->hnodes,&this->hmatice,&this->hmatpar,this->parameters,this->inputs); 134 127 135 128 } … … 143 136 hmatice.DeepEcho(); 144 137 hmatpar.DeepEcho(); 145 hnumpar.DeepEcho(); 138 printf(" parameters\n"); 139 parameters->DeepEcho(); 146 140 printf(" inputs\n"); 147 141 inputs->DeepEcho(); … … 167 161 hmatice.Demarshall(&marshalled_dataset); 168 162 hmatpar.Demarshall(&marshalled_dataset); 169 hnumpar.Demarshall(&marshalled_dataset); 170 171 /*demarshall inputs: */ 172 inputs=(Inputs*)DataSetDemarshallRaw(&marshalled_dataset); 163 164 /*parameters: may not exist even yet, so let Configure handle it: */ 165 this->parameters=NULL; 173 166 174 167 /*return: */ … … 186 179 hmatice.Echo(); 187 180 hmatpar.Echo(); 188 hnumpar.Echo(); 181 printf(" parameters\n"); 182 parameters->Echo(); 189 183 printf(" inputs\n"); 190 184 inputs->Echo(); … … 215 209 hmatice.Marshall(&marshalled_dataset); 216 210 hmatpar.Marshall(&marshalled_dataset); 217 hnumpar.Marshall(&marshalled_dataset);218 211 219 212 /*Marshall inputs: */ … … 222 215 memcpy(marshalled_dataset,marshalled_inputs,marshalled_inputs_size*sizeof(char)); 223 216 marshalled_dataset+=marshalled_inputs_size; 217 218 /*parameters: don't do anything about it. parameters are marshalled somewhere else!*/ 219 224 220 225 221 xfree((void**)&marshalled_inputs); … … 236 232 +hmatice.MarshallSize() 237 233 +hmatpar.MarshallSize() 238 +hnumpar.MarshallSize()239 +inputs->MarshallSize()240 234 +sizeof(int); //sizeof(int) for enum type 241 235 } … … 369 363 Matpar* matpar=NULL; 370 364 Matice* matice=NULL; 371 Numpar* numpar=NULL;372 365 373 366 /*recover objects from hooks: */ … … 375 368 matpar=(Matpar*)hmatpar.delivers(); 376 369 matice=(Matice*)hmatice.delivers(); 377 numpar=(Numpar*)hnumpar.delivers();378 370 379 371 inputs->GetParameterValue(&slope[0],SurfaceSlopexEnum); -
issm/trunk/src/c/objects/Sing.h
r3620 r3621 13 13 #include "./Hook.h" 14 14 #include "../DataSet/Inputs.h" 15 #include "../DataSet/DataSet.h" 16 #include "../DataSet/Parameters.h" 15 17 16 18 class Sing: public Element{ … … 24 26 Hook hmatice; //hook to 1 matice 25 27 Hook hmatpar; //hook to 1 matpar 26 Hook hnumpar; //hook to 1 numpar 28 29 Parameters* parameters; //pointer to solution parameters 27 30 Inputs* inputs; 28 31 … … 31 34 /*constructors, destructors: {{{1*/ 32 35 Sing(); 33 Sing(int sing_id,int* sing_node_ids, int sing_matice_id, int sing_matpar_id , int sing_numpar_id);34 Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Hook* sing_hnumpar,Inputs* sing_inputs);36 Sing(int sing_id,int* sing_node_ids, int sing_matice_id, int sing_matpar_id); 37 Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Parameters* sing_parameters,Inputs* sing_inputs); 35 38 Sing(int i, IoModel* iomodel); 36 39 ~Sing(); -
issm/trunk/src/c/objects/Tria.cpp
r3620 r3621 27 27 Tria::Tria(){ 28 28 this->inputs=NULL; 29 return;29 this->parameters=NULL; 30 30 } 31 31 /*}}}*/ … … 148 148 delete inputs; 149 149 this->parameters=NULL; 150 return;151 150 } 152 151 /*}}}*/ -
issm/trunk/src/c/objects/Tria.h
r3620 r3621 6 6 #define _TRIA_H_ 7 7 8 class Object;9 class Element;10 class Hook;11 class DataSet;12 class Inputs;13 class Node;14 struct IoModel;15 16 8 #include "./Object.h" 17 9 #include "./Element.h" … … 20 12 #include "../ModelProcessorx/IoModel.h" 21 13 #include "../DataSet/DataSet.h" 14 #include "../DataSet/Parameters.h" 22 15 #include "../DataSet/Inputs.h" 23 16
Note:
See TracChangeset
for help on using the changeset viewer.