Ice Sheet System Model  4.18
Code documentation
ProcessArguments.cpp
Go to the documentation of this file.
1 
5 #include <stdio.h>
6 #include <cstring>
7 
8 #include "../shared/shared.h"
9 
10 void ProcessArguments(int* solution_type,char** pbinfilename,char** poutbinfilename,char** ptoolkitsfilename,char** plockfilename,char** prestartfilename, char** prootpath, int argc,char **argv){
11 
12  /*Check input arguments*/
13  if(argc<2) _error_("Usage error: no solution requested");
14  if(argc<3) _error_("Usage error: missing execution directory");
15  if(argc<4) _error_("Usage error: missing model name");
16 
17  /*Get some arguments*/
18  *solution_type = StringToEnumx(argv[1]);
19  char* rootpatharg = argv[2];
20  char* modelname = argv[3];
21 
22  /*Recover myrank and length of string "my_rank" */
23  int my_rank = IssmComm::GetRank();
24  int rank_length = (my_rank == 0 ? 1 : (int)(log10(static_cast<double>(my_rank))+1));
25 
26  /*Create rootpath from argument*/
27  char* rootpath = xNew<char>(strlen(rootpatharg)+2); sprintf(rootpath,"%s/",rootpatharg);
28 
29  /*Create all file paths*/
30  char* binfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".bin") +1); sprintf(binfilename, "%s%s%s",rootpath,modelname,".bin");
31  char* outbinfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".outbin") +1); sprintf(outbinfilename,"%s%s%s",rootpath,modelname,".outbin");
32  char* toolkitsfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".toolkits") +1); sprintf(toolkitsfilename,"%s%s%s",rootpath,modelname,".toolkits");
33  char* lockfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".lock") +1); sprintf(lockfilename, "%s%s%s",rootpath,modelname,".lock");
34  char* restartfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".rst.")+rank_length+1);
35  sprintf(restartfilename,"%s%s%s%i",rootpath,modelname,".rst.",my_rank);
36 
37  /*Clean up and assign output pointer*/
38  *pbinfilename=binfilename;
39  *poutbinfilename=outbinfilename;
40  *ptoolkitsfilename=toolkitsfilename;
41  *plockfilename=lockfilename;
42  *prestartfilename=restartfilename;
43  *prootpath=rootpath;
44 
45 }
FemModel::solution_type
int solution_type
Definition: FemModel.h:40
StringToEnumx
int StringToEnumx(const char *string_in, bool notfounderror=true)
Definition: StringToEnumx.cpp:14
IssmComm::GetRank
static int GetRank(void)
Definition: IssmComm.cpp:34
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
ProcessArguments
void ProcessArguments(int *solution_type, char **pbinfilename, char **poutbinfilename, char **ptoolkitsfilename, char **plockfilename, char **prestartfilename, char **prootpath, int argc, char **argv)
Definition: ProcessArguments.cpp:10