Changeset 16787
- Timestamp:
- 11/15/13 13:32:33 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 8 added
- 2 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r16685 r16787 540 540 #Responses sources {{{ 541 541 responses_sources= ./classes/Massfluxatgate.h \ 542 ./classes/Misfit.h \ 542 543 ./modules/ModelProcessorx/CreateOutputDefinitions.cpp\ 543 544 ./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h\ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16778 r16787 133 133 virtual IssmDouble IceVolumeAboveFloatation(void)=0; 134 134 virtual IssmDouble TotalSmb(void)=0; 135 virtual IssmDouble Misfit(int modelenum,int observationenum,int weightsenum)=0; 135 136 #endif 136 137 -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r16783 r16787 178 178 IssmDouble BalancethicknessMisfit(void){_error_("not supported");}; 179 179 void InputControlUpdate(IssmDouble scalar,bool save_parameter); 180 IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");}; 180 181 #endif 181 182 -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r16783 r16787 179 179 void MaxVy(IssmDouble* pmaxvy){_error_("not implemented yet");}; 180 180 void MaxVz(IssmDouble* pmaxvz){_error_("not implemented yet");}; 181 IssmDouble Misfit(int modelenum,int observationenum,int weightsenum){_error_("not implemented yet");}; 181 182 #endif 182 183 -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r16785 r16787 3250 3250 /*Return: */ 3251 3251 return Total_Smb; 3252 } 3253 /*}}}*/ 3254 /*FUNCTION Tria::Misfit{{{*/ 3255 IssmDouble Tria::Misfit(int modelenum,int observationenum,int weightsenum){ 3256 3257 /*Intermediaries*/ 3258 IssmDouble model,observation,weight; 3259 IssmDouble Jdet; 3260 IssmDouble Jelem = 0; 3261 IssmDouble xyz_list[NUMVERTICES][3]; 3262 GaussTria *gauss = NULL; 3263 3264 /*If on water, return 0: */ 3265 if(NoIceInElement())return 0; 3266 3267 /*Retrieve all inputs we will be needing: */ 3268 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 3269 Input* model_input=inputs->GetInput(modelenum); _assert_(model_input); 3270 Input* observation_input=inputs->GetInput(observationenum);_assert_(observation_input); 3271 Input* weights_input =inputs->GetInput(weightsenum); _assert_(weights_input); 3272 3273 /* Start looping on the number of gaussian points: */ 3274 gauss=new GaussTria(2); 3275 for(int ig=gauss->begin();ig<gauss->end();ig++){ 3276 3277 gauss->GaussPoint(ig); 3278 3279 /* Get Jacobian determinant: */ 3280 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 3281 3282 /*Get parameters at gauss point*/ 3283 model_input->GetInputValue(&model,gauss); 3284 observation_input->GetInputValue(&observation,gauss); 3285 weights_input->GetInputValue(&weight,gauss); 3286 3287 /*compute misfit between model and observation */ 3288 Jelem+=0.5*(model-observation)*(model-observation)*weight*Jdet*gauss->weight; 3289 } 3290 3291 /* clean up and Return: */ 3292 delete gauss; 3293 return Jelem; 3252 3294 } 3253 3295 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16783 r16787 150 150 void MaxVy(IssmDouble* pmaxvy); 151 151 void MaxVz(IssmDouble* pmaxvz); 152 IssmDouble Misfit(int modelenum,int observationenum,int weightsenum); 152 153 #endif 153 154 -
issm/trunk-jpl/src/c/classes/classes.h
r16486 r16787 18 18 #include "./Segment.h" 19 19 #include "./Massfluxatgate.h" 20 #include "./Misfit.h" 20 21 21 22 /*Constraints: */ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
r16542 r16787 8 8 #include "./ModelProcessorx.h" 9 9 10 void CreateOutputDefinitions( Parameters* parameters,IoModel* iomodel){10 void CreateOutputDefinitions(Elements* elements, Parameters* parameters,IoModel* iomodel){ 11 11 12 12 int i,j; 13 13 14 DataSet *output_definitions = NULL;15 int *output_definition_enums = NULL;14 DataSet* output_definitions = NULL; 15 int* output_definition_enums = NULL; 16 16 int num_output_definitions; 17 int numgates;18 char **gatenames = NULL;19 IssmDouble **gatesegments = NULL;20 int *gatesegments_M = NULL;21 17 22 18 /*Create output_definitions dataset: */ … … 28 24 29 25 if (output_definition_enums[i]==MassfluxatgateEnum){ 26 30 27 /*Deal with mass flux gates:{{{ */ 28 29 /*massfluxatgate variables: */ 30 int numgates; 31 char **gatenames = NULL; 32 IssmDouble **gatesegments = NULL; 33 int *gatesegments_M = NULL; 34 31 35 32 36 /*Fetch segments and names: */ … … 47 51 /*}}}*/ 48 52 } 53 else if (output_definition_enums[i]==MisfitEnum){ 54 /*Deal with misfits: {{{*/ 55 56 /*misfit variables: */ 57 int nummisfits; 58 char** misfit_name_s = NULL; 59 int* misfit_model_enum_s = NULL; 60 IssmDouble** misfit_observation_s = NULL; 61 int* misfit_observation_enum_s = NULL; 62 int* misfit_observation_M_s = NULL; 63 int* misfit_observation_N_s = NULL; 64 char** misfit_timeinterpolation_s = NULL; 65 IssmDouble** misfit_weights_s = NULL; 66 int* misfit_weights_M_s = NULL; 67 int* misfit_weights_N_s = NULL; 68 int* misfit_weights_enum_s= NULL; 69 70 /*Fetch name, model_enum, observation, observation_enum, etc ... (see src/m/classes/misfit.m): */ 71 iomodel->FetchMultipleData(&misfit_name_s,&nummisfits,MisfitNameEnum); 72 iomodel->FetchMultipleData(&misfit_model_enum_s,&nummisfits,MisfitModelEnumEnum); 73 iomodel->FetchMultipleData(&misfit_observation_s,&misfit_observation_M_s,&misfit_observation_N_s,&nummisfits,MisfitObservationEnum); 74 iomodel->FetchMultipleData(&misfit_observation_enum_s,&nummisfits,MisfitObservationEnumEnum); 75 iomodel->FetchMultipleData(&misfit_timeinterpolation_s,&nummisfits,MisfitTimeinterpolationEnum); 76 iomodel->FetchMultipleData(&misfit_weights_s,&misfit_weights_M_s,&misfit_weights_N_s,&nummisfits,MisfitWeightsEnum); 77 iomodel->FetchMultipleData(&misfit_weights_enum_s,&nummisfits,MisfitWeightsEnumEnum); 78 79 for(j=0;j<nummisfits;j++){ 80 81 /*First create a misfit object for that specific enum (misfit_model_enum_s[j]):*/ 82 output_definitions->AddObject(new Misfit(misfit_name_s[j],misfit_model_enum_s[j],misfit_observation_enum_s[j],misfit_timeinterpolation_s[j],misfit_weights_enum_s[j])); 83 84 /*Now, for this particular misfit object, make sure we plug into the elements: the observation, and the weights.*/ 85 for(i=0;i<elements->Size();i++){ 86 Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i)); 87 element->InputCreate(misfit_observation_s[j], iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],1,misfit_observation_enum_s[j],7); 88 element->InputCreate(misfit_weights_s[j], iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],1,misfit_weights_enum_s[j],7); 89 } 90 91 } 92 93 /*Free ressources:*/ 94 for(j=0;j<nummisfits;j++){ 95 char* string=NULL; 96 IssmDouble* matrix = NULL; 97 98 string = misfit_name_s[j]; xDelete<char>(string); 99 string = misfit_timeinterpolation_s[j]; xDelete<char>(string); 100 matrix = misfit_observation_s[j]; xDelete<IssmDouble>(matrix); 101 matrix = misfit_weights_s[j]; xDelete<IssmDouble>(matrix); 102 } 103 xDelete<char*>(misfit_name_s); 104 xDelete<int>(misfit_model_enum_s); 105 xDelete<IssmDouble*>(misfit_observation_s); 106 xDelete<int>(misfit_observation_enum_s); 107 xDelete<int>(misfit_observation_M_s); 108 xDelete<int>(misfit_observation_N_s); 109 xDelete<char*>(misfit_timeinterpolation_s); 110 xDelete<IssmDouble*>(misfit_weights_s); 111 xDelete<int>(misfit_weights_M_s); 112 xDelete<int>(misfit_weights_N_s); 113 xDelete<int>(misfit_weights_enum_s); 114 /*}}}*/ 115 } 116 49 117 else _error_("output definition enum " << output_definition_enums[i] << "not supported yet!"); 50 118 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r16604 r16787 196 196 /*}}}*/ 197 197 198 /*Output definitions dataset: */ 199 CreateOutputDefinitions(parameters,iomodel); 200 198 201 199 /*Before returning, create parameters in case we are running Qmu or control types runs: */ 202 200 #ifdef _HAVE_CONTROL_ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
r16550 r16787 105 105 #endif 106 106 107 /*Output definitions dataset: */ 108 CreateOutputDefinitions(elements,parameters,iomodel); 109 107 110 /* Sort datasets: 108 111 * All our datasets are already ordered by ids. Set presort flag so that -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r16550 r16787 17 17 void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type); 18 18 void CreateParametersDakota(Parameters* parameters,IoModel* iomodel,char* rootpath); 19 void CreateOutputDefinitions( Parameters* parameters,IoModel* iomodel);19 void CreateOutputDefinitions(Elements* elements, Parameters* parameters,IoModel* iomodel); 20 20 void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel); 21 21 void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r16767 r16787 552 552 MassfluxatgateSegmentsEnum, 553 553 MisfitNameEnum, 554 MisfitModelEnum, 555 MisfitObservationsEnum, 554 MisfitModelEnumEnum, 555 MisfitObservationEnum, 556 MisfitObservationEnumEnum, 556 557 MisfitTimeinterpolationEnum, 557 558 MisfitWeightsEnum, 559 MisfitWeightsEnumEnum, 560 SurfaceObservationEnum, 561 WeightsSurfaceObservationEnum, 558 562 /*}}}*/ 559 563 /*Responses{{{*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r16767 r16787 540 540 case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments"; 541 541 case MisfitNameEnum : return "MisfitName"; 542 case MisfitModelEnum : return "MisfitModel"; 543 case MisfitObservationsEnum : return "MisfitObservations"; 542 case MisfitModelEnumEnum : return "MisfitModelEnum"; 543 case MisfitObservationEnum : return "MisfitObservation"; 544 case MisfitObservationEnumEnum : return "MisfitObservationEnum"; 544 545 case MisfitTimeinterpolationEnum : return "MisfitTimeinterpolation"; 545 546 case MisfitWeightsEnum : return "MisfitWeights"; 547 case MisfitWeightsEnumEnum : return "MisfitWeightsEnum"; 548 case SurfaceObservationEnum : return "SurfaceObservation"; 549 case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation"; 546 550 case MinVelEnum : return "MinVel"; 547 551 case MaxVelEnum : return "MaxVel"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r16767 r16787 552 552 else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum; 553 553 else if (strcmp(name,"MisfitName")==0) return MisfitNameEnum; 554 else if (strcmp(name,"MisfitModel")==0) return MisfitModelEnum; 555 else if (strcmp(name,"MisfitObservations")==0) return MisfitObservationsEnum; 554 else if (strcmp(name,"MisfitModelEnum")==0) return MisfitModelEnumEnum; 555 else if (strcmp(name,"MisfitObservation")==0) return MisfitObservationEnum; 556 else if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum; 556 557 else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum; 557 558 else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum; 559 else if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum; 560 else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum; 561 else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; 558 562 else if (strcmp(name,"MinVel")==0) return MinVelEnum; 559 563 else if (strcmp(name,"MaxVel")==0) return MaxVelEnum; … … 625 629 else if (strcmp(name,"Option")==0) return OptionEnum; 626 630 else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum; 627 else if (strcmp(name,"OptionCell")==0) return OptionCellEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"OptionCell")==0) return OptionCellEnum; 628 635 else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum; 629 636 else if (strcmp(name,"Paterson")==0) return PatersonEnum; 630 637 else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 638 else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 635 639 else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum; 636 640 else stage=7; -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r16767 r16787 532 532 def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0] 533 533 def MisfitNameEnum(): return StringToEnum("MisfitName")[0] 534 def MisfitModelEnum(): return StringToEnum("MisfitModel")[0] 535 def MisfitObservationsEnum(): return StringToEnum("MisfitObservations")[0] 534 def MisfitModelEnumEnum(): return StringToEnum("MisfitModelEnum")[0] 535 def MisfitObservationEnum(): return StringToEnum("MisfitObservation")[0] 536 def MisfitObservationEnumEnum(): return StringToEnum("MisfitObservationEnum")[0] 536 537 def MisfitTimeinterpolationEnum(): return StringToEnum("MisfitTimeinterpolation")[0] 537 538 def MisfitWeightsEnum(): return StringToEnum("MisfitWeights")[0] 539 def MisfitWeightsEnumEnum(): return StringToEnum("MisfitWeightsEnum")[0] 540 def SurfaceObservationEnum(): return StringToEnum("SurfaceObservation")[0] 541 def WeightsSurfaceObservationEnum(): return StringToEnum("WeightsSurfaceObservation")[0] 538 542 def MinVelEnum(): return StringToEnum("MinVel")[0] 539 543 def MaxVelEnum(): return StringToEnum("MaxVel")[0]
Note:
See TracChangeset
for help on using the changeset viewer.