Ice Sheet System Model  4.18
Code documentation
Functions
kriging.cpp File Reference

: kriging main parallel program More...

#include "./issm.h"

Go to the source code of this file.

Functions

void ProcessArguments2 (char **pbinfilename, char **poutbinfilename, char **plockfilename, char **prootpath, int argc, char **argv)
 
void ProcessInputfile (IssmDouble **px, IssmDouble **py, IssmDouble **pdata, int *pnobs, IssmDouble **px_interp, IssmDouble **py_interp, int *pninterp, Options **poptions, FILE *fid)
 
int main (int argc, char **argv)
 

Detailed Description

: kriging main parallel program

Definition in file kriging.cpp.

Function Documentation

◆ ProcessArguments2()

void ProcessArguments2 ( char **  pbinfilename,
char **  poutbinfilename,
char **  plockfilename,
char **  prootpath,
int  argc,
char **  argv 
)

Definition at line 94 of file kriging.cpp.

94  {
95  char *modelname = NULL;
96  char *binfilename = NULL;
97  char *outbinfilename = NULL;
98  char *lockfilename = NULL;
99  char *rootpatharg = NULL;
100  char *rootpath = NULL;
101 
102  if(argc<1)_error_("Usage error: no execution path provided");
103  if(argc<2)_error_("Usage error: missing model name");
104 
105  rootpatharg=argv[1];
106  if(strcmp(strstr(rootpatharg,"/"),"/")!=0){
107  rootpath = xNew<char>(strlen(rootpatharg)+2); sprintf(rootpath,"%s/",rootpatharg);
108  }
109  else{
110  rootpath = xNew<char>(strlen(rootpatharg)+1); sprintf(rootpath,"%s",rootpatharg);
111  }
112 
113  modelname=argv[2];
114  if(strstr(modelname,rootpath)==NULL){
115  binfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".bin") +1); sprintf(binfilename, "%s%s%s",rootpath,modelname,".bin");
116  outbinfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s%s",rootpath,modelname,".outbin");
117  lockfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".lock") +1); sprintf(lockfilename, "%s%s%s",rootpath,modelname,".lock");
118  }
119  else{
120  binfilename = xNew<char>(strlen(modelname)+strlen(".bin") +1); sprintf(binfilename, "%s%s",modelname,".bin");
121  outbinfilename = xNew<char>(strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s",modelname,".outbin");
122  lockfilename = xNew<char>(strlen(modelname)+strlen(".lock") +1); sprintf(lockfilename, "%s%s",modelname,".lock");
123  }
124 
125  /*Clean up and assign output pointer*/
126  *pbinfilename=binfilename;
127  *poutbinfilename=outbinfilename;
128  *plockfilename=lockfilename;
129  *prootpath=rootpath;
130 }

◆ ProcessInputfile()

void ProcessInputfile ( IssmDouble **  px,
IssmDouble **  py,
IssmDouble **  pdata,
int *  pnobs,
IssmDouble **  px_interp,
IssmDouble **  py_interp,
int *  pninterp,
Options **  poptions,
FILE *  fid 
)

Definition at line 132 of file kriging.cpp.

132  {
133 
134  int ninterp ,nobs;
135  IssmDouble *x = NULL;
136  IssmDouble *y = NULL;
137  IssmDouble *data = NULL;
138  IssmDouble *x_interp = NULL;
139  IssmDouble *y_interp = NULL;
140  Options *options = NULL;
141 
142  int M,N;
143  IoModel* iomodel = new IoModel();
144  iomodel->fid=fid;
145  iomodel->CheckFile();
146  iomodel->FetchData(&x,&M,&N,"md.x"); nobs=M*N;
147  iomodel->FetchData(&y,&M,&N,"md.y"); _assert_(M*N==nobs);
148  iomodel->FetchData(&data,&M,&N,"md.data"); _assert_(M*N==nobs);
149  iomodel->FetchData(&x_interp,&M,&N,"md.x_interp"); ninterp=M*N;
150  iomodel->FetchData(&y_interp,&M,&N,"md.y_interp"); _assert_(M*N==ninterp);
151 
152  /*Read options*/
153  options = new Options();
154  iomodel->FetchData(options,"md.y_interp");
155 
156  /*Assign output pointer*/
157  *px = x;
158  *py = y;
159  *pdata = data;
160  *pnobs = nobs;
161  *px_interp = x_interp;
162  *py_interp = y_interp;
163  *pninterp = ninterp;
164  *poptions = options;
165  delete iomodel;
166 }

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 11 of file kriging.cpp.

11  {
12 
13  /*I/O: */
14  FILE *output_fid = NULL;
15  FILE *input_fid = NULL;
16 
17  /*File names*/
18  char *lockfilename = NULL;
19  char *binfilename = NULL;
20  char *outbinfilename = NULL;
21  char *rootpath = NULL;
22 
23  /*Input*/
24  int ninterp,nobs;
25  IssmDouble *x = NULL;
26  IssmDouble *y = NULL;
27  IssmDouble *data = NULL;
28  IssmDouble *x_interp = NULL;
29  IssmDouble *y_interp = NULL;
30  Options *options = NULL;
31 
32  /*Output*/
33  IssmDouble *predictions = NULL;
34  IssmDouble *error = NULL;
35 
36  /*Initialize exception trapping: */
38 
39  /*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
40  ISSM_MPI_Comm comm=EnvironmentInit(argc,argv);
41  IssmComm::SetComm(comm);
42 
43  ProcessArguments2(&binfilename,&outbinfilename,&lockfilename,&rootpath,argc,argv);
44 
45  /*Process input files*/
46  input_fid=pfopen(binfilename,"rb");
47  ProcessInputfile(&x,&y,&data,&nobs,&x_interp,&y_interp,&ninterp,&options,input_fid);
48  pfclose(input_fid,binfilename);
49 
50  _printf0_("call computational core:\n");
51  pKrigingx(&predictions,&error,x,y,data,nobs,x_interp,y_interp,ninterp,options);
52 
53  _printf0_("write results to disk:\n");
54  Results *results = new Results();
55  if(IssmComm::GetRank()==0){
56  output_fid=pfopen0(outbinfilename,"wb");
57  results->AddObject(new GenericExternalResult<double*>(results->Size()+1,"predictions",predictions,ninterp,1,1,0));
58  results->AddObject(new GenericExternalResult<double*>(results->Size()+1,"error",error,ninterp,1,1,0));
59  for(int i=0;i<results->Size();i++){
60  ExternalResult* result=xDynamicCast<ExternalResult*>(results->GetObjectByOffset(i));
61  result->WriteData(output_fid,1);
62  }
63  pfclose(output_fid,outbinfilename);
64  }
65 
66  /*Close output and toolkits options file and write lock file if requested*/
67  _printf0_("write lock file:\n");
68  WriteLockFile(lockfilename);
69 
70  /*Free ressources */
71  xDelete<char>(lockfilename);
72  xDelete<char>(binfilename);
73  xDelete<char>(outbinfilename);
74  xDelete<char>(rootpath);
75  xDelete<IssmDouble>(x);
76  xDelete<IssmDouble>(y);
77  xDelete<IssmDouble>(data);
78  xDelete<IssmDouble>(x_interp);
79  xDelete<IssmDouble>(y_interp);
80  xDelete<IssmDouble>(predictions);
81  xDelete<IssmDouble>(error);
82  delete options;
83  delete results;
84 
85  /*Finalize environment:*/
87 
88  /*Finalize exception trapping: */
90 
91  return 0; //unix success return;
92 }
DataSet::Size
int Size()
Definition: DataSet.cpp:399
ExceptionTrapEnd
#define ExceptionTrapEnd()
Definition: exceptions.h:64
Options
Definition: Options.h:9
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
IssmDouble
double IssmDouble
Definition: types.h:37
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
DataSet::AddObject
int AddObject(Object *object)
Definition: DataSet.cpp:252
ExceptionTrapBegin
#define ExceptionTrapBegin()
Definition: exceptions.h:61
EnvironmentInit
ISSM_MPI_Comm EnvironmentInit(int argc, char **argv)
Definition: EnvironmentInit.cpp:12
pfopen
FILE * pfopen(char *filename, const char *format, bool errorout=true)
Definition: pfopen.cpp:30
pfopen0
FILE * pfopen0(char *filename, const char *format)
Definition: pfopen.cpp:16
ExternalResult
Definition: ExternalResult.h:21
ExternalResult::WriteData
virtual void WriteData(FILE *fid, bool io_gather)=0
IssmComm::SetComm
static void SetComm(void)
Definition: IssmComm.cpp:22
IoModel::fid
FILE * fid
Definition: IoModel.h:60
IoModel::FetchData
void FetchData(bool *pboolean, const char *data_name)
Definition: IoModel.cpp:933
ProcessInputfile
void ProcessInputfile(IssmDouble **px, IssmDouble **py, IssmDouble **pdata, int *pnobs, IssmDouble **px_interp, IssmDouble **py_interp, int *pninterp, Options **poptions, FILE *fid)
Definition: kriging.cpp:132
pKrigingx
int pKrigingx(double **ppredictions, double **perror, double *x, double *y, double *observations, int n_obs, double *x_interp, double *y_interp, int n_interp, Options *options)
Definition: pKrigingx.cpp:11
ProcessArguments2
void ProcessArguments2(char **pbinfilename, char **poutbinfilename, char **plockfilename, char **prootpath, int argc, char **argv)
Definition: kriging.cpp:94
WriteLockFile
void WriteLockFile(char *filename)
Definition: WriteLockFile.cpp:10
IoModel::CheckFile
void CheckFile(void)
Definition: IoModel.cpp:344
EnvironmentFinalize
void EnvironmentFinalize(void)
Definition: EnvironmentFinalize.cpp:12
GenericExternalResult
Definition: GenericExternalResult.h:21
IssmComm::GetRank
static int GetRank(void)
Definition: IssmComm.cpp:34
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
ISSM_MPI_Comm
int ISSM_MPI_Comm
Definition: issmmpi.h:118
IoModel
Definition: IoModel.h:48
pfclose
void pfclose(FILE *fid, char *filename)
Definition: pfclose.cpp:14
Results
Declaration of Results class.
Definition: Results.h:14