 |
Ice Sheet System Model
4.18
Code documentation
|
Go to the documentation of this file.
10 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
16 #include "../datastructures/datastructures.h"
20 #include "../modules/SurfaceAreax/SurfaceAreax.h"
21 #include "../classes/Params/Parameters.h"
22 #include "../classes/gauss/Gauss.h"
40 Misfit::Misfit(
char* in_name,
int in_definitionenum,
int in_model_enum,
int in_observation_enum,
char* in_timeinterpolation,
int in_local,
int in_weights_enum){
44 this->
name = xNew<char>(strlen(in_name)+1);
45 xMemCpy<char>(this->
name,in_name,strlen(in_name)+1);
48 xMemCpy<char>(this->
timeinterpolation,in_timeinterpolation,strlen(in_timeinterpolation)+1);
91 void Misfit::Marshall(
char** pmarshalled_data,
int* pmarshalled_data_size,
int marshall_direction){
92 _error_(
"not implemented yet!");
105 char* name2=xNew<char>(strlen(this->
name)+1);
143 misfit_t=all_misfit_t;
146 if (area_t!=0) misfit_t=misfit_t/area_t;
152 if(time==finaltime)this->
lock=1;
155 if(time!=0.)
return misfit/(time-starttime);
158 else if (this->
local==2){
163 int msize,osize,wsize;
175 for (
int i=0;i<msize;i++){
176 misfit_t += pow(model[i]-observation[i],2)*weights[i];
177 if (weights[i]!=0)count++;
179 misfit=sqrt(misfit_t/count);
182 xDelete<IssmDouble>(model);
183 xDelete<IssmDouble>(observation);
184 xDelete<IssmDouble>(weights);
203 for (
int i=0;i<msize;i++){
204 misfit_t += pow(model[i]-observation[i],2)*weights[i];
205 if (weights[i]!=0)count++;
207 misfit=sqrt(misfit_t/count);
210 misfit=sqrt(misfit_t)/count;
214 if(time==finaltime)this->
lock=1;
217 xDelete<IssmDouble>(model);
218 xDelete<IssmDouble>(observation);
219 xDelete<IssmDouble>(weights);
222 return misfit/(time-starttime);
241 misfit+=dt*(model-observation);
244 if(time==finaltime)this->
lock=1;
247 return misfit/(time-starttime);
@ TimesteppingFinalTimeEnum
int ISSM_MPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, ISSM_MPI_Comm comm)
#define _printf_(StreamArgs)
static ISSM_MPI_Comm GetComm(void)
@ TimesteppingTimeStepEnum
void GetVectorFromInputsx(IssmDouble **pvector, int *pvector_size, FemModel *femmodel, int name)
virtual Input2 * GetInput2(int inputenum)=0
abstract class for Element object This class is a place holder for the Tria and the Penta elements....
const char * EnumToStringx(int enum_in)
abstract class for ExternalResult object
virtual IssmDouble Misfit(int modelenum, int observationenum, int weightsenum)=0
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
@ TimesteppingStartTimeEnum
#define _error_(StreamArgs)
Object * GetObjectByOffset(int offset)
IssmDouble OutputDefinitionsResponsex(FemModel *femmodel, int output_enum)
void FindParam(bool *pinteger, int enum_type)
T * xMemCpy(T *dest, const T *src, unsigned int size)
virtual IssmDouble MisfitArea(int weightsenum)=0
IssmDouble Response(FemModel *femmodel)