Changeset 16793
- Timestamp:
- 11/15/13 16:18:54 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Misfit.h
r16787 r16793 13 13 #include "./Elements/Elements.h" 14 14 #include "./FemModel.h" 15 #include "../modules/SurfaceAreax/SurfaceAreax.h" 16 #include "../classes/Params/Parameters.h" 15 17 /*}}}*/ 16 18 … … 25 27 char* timeinterpolation; 26 28 29 IssmDouble misfit; //value carried over in time. 30 int lock; // if lock is on, we just return the value stored in "misfit". this is used so we don't compute misfit past the final_time 31 27 32 /*Misfit constructors, destructors :*/ 28 33 /*FUNCTION Misfit() {{{*/ … … 34 39 this->weights_enum = UNDEF; 35 40 this->timeinterpolation=NULL; 41 this->misfit=0; 42 this->lock=0; 36 43 37 44 } … … 49 56 this->observation_enum=in_observation_enum; 50 57 this->weights_enum=in_weights_enum; 58 59 this->misfit=0; 60 this->lock=0; 51 61 } 52 62 /*}}}*/ … … 55 65 if(this->name)xDelete(this->name); 56 66 if(this->timeinterpolation)xDelete(this->timeinterpolation); 67 this->misfit=0; 68 this->lock=0; 57 69 } 58 70 /*}}}*/ … … 101 113 102 114 int i; 103 IssmDouble response=0; 104 IssmDouble all_response=0; 115 IssmDouble misfit_t=0; 116 IssmDouble all_misfit_t=0; 117 IssmDouble dt; 118 IssmDouble area; 119 IssmDouble time,starttime,finaltime; 120 121 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 122 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); 123 femmodel->parameters->FindParam(&time,TimeEnum); 124 125 /*If we are locked, return time average: */ 126 if(this->lock)return misfit/(time-starttime); 105 127 106 128 for(i=0;i<femmodel->elements->Size();i++){ 107 129 Element* element=(Element*)femmodel->elements->GetObjectByOffset(i); 108 response+=element->Misfit(model_enum,observation_enum,weights_enum);130 misfit_t+=element->Misfit(model_enum,observation_enum,weights_enum); 109 131 } 132 133 ISSM_MPI_Allreduce ( (void*)&misfit_t,(void*)&all_misfit_t,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm()); 134 misfit_t=all_misfit_t; 110 135 111 ISSM_MPI_Allreduce ( (void*)&response,(void*)&all_response,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm()); 112 return all_response; 136 /*Divide by surface area: */ 137 SurfaceAreax(&area,femmodel); 138 misfit_t=misfit_t/area; 139 140 /*Recover delta_t: */ 141 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 142 143 /*Add this time's contribution to curent misfit: */ 144 misfit+=dt*misfit_t; 145 146 /*Do we lock? i.e. are we at final_time? :*/ 147 if(time==finaltime)this->lock=1; 148 149 /*What we return is the value of misfit / time: */ 150 return misfit/(time-starttime); 113 151 } 114 152 /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.