27 char **strings = NULL;
29 char **toolkits = NULL;
31 char *newstring = NULL;
32 char *catstring = NULL;
34 int stringlength,toolkitlength;
43 while(fgets(line,
sizeof line, fid)){
45 if ((line[0]==
'%') || (line[0]==
'\n') || (line[0]==
' ') || (line[0]==
'\t') || (line[0]==
'\r'))
continue;
56 analyses = xNew<int>(numanalyses);
57 strings = xNew<char*>(numanalyses);
58 toolkits = xNew<char*>(numanalyses);
59 for(
int i=0;i<numanalyses;i++) strings[i] = NULL;
60 for(
int i=0;i<numanalyses;i++) toolkits[i] = NULL;
63 fseek(fid,0,SEEK_SET);
65 while( fgets(line,
sizeof line, fid)){
67 if ((line[0]==
'%') || (line[0]==
'\n') || (line[0]==
' ') || (line[0]==
'\t') || (line[0]==
'\r'))
continue;
70 line[strlen(line)-1]=
'\0';
76 if(!fgets(line,
sizeof line, fid))
_error_(
"could not read toolkit for analysis " << &line[1]);
77 sscanf(line,
"-%s %s",&word1[0],&word2[0]);
78 if(strcmp(word1,
"toolkit")!=0)
_error_(
"toolkit option does not follow analysis");
79 toolkit=xNew<char>((strlen(word2)+1));
80 xMemCpy<char>(toolkit,word2,(strlen(word2)+1));
81 toolkits[numanalyses-1]=toolkit;
86 if(strings[numanalyses-1]==NULL){
87 string=xNew<char>((strlen(line)+1));
88 xMemCpy<char>(
string,line,(strlen(line)+1));
90 strings[numanalyses-1]=string;
93 string=strings[numanalyses-1];
94 newstring=xNew<char>((strlen(line)+1));
95 xMemCpy<char>(newstring,line,(strlen(line)+1));
98 catstring=xNew<char>(strlen(
string)+1+strlen(newstring)+1+1);
99 xMemCpy<char>(catstring,
string,(strlen(
string)+1));
101 strcat(catstring,
" ");
102 strcat(catstring,newstring);
103 strings[numanalyses-1]=catstring;
104 xDelete<char>(newstring);
105 xDelete<char>(
string);
114 analyses = xNew<int>(numanalyses);
115 toolkits = xNew<char*>(numanalyses);
116 strings = xNew<char*>(numanalyses);
119 for(
int i=0;i<numanalyses;i++){
120 char* toolkit=toolkits[i];
122 if(toolkit==NULL)
_error_(
"PETSc options for analysis " <<
EnumToStringx(reCast<int>(analyses[i])) <<
" have been declared but were not found");
124 if(my_rank==0)toolkitlength=(strlen(toolkit)+1)*
sizeof(
char);
126 if(my_rank!=0)toolkit=xNew<char>(toolkitlength);
128 if(my_rank!=0)toolkits[i]=toolkit;
130 char*
string=strings[i];
132 if(
string==NULL)
_error_(
"PETSc options for analysis " <<
EnumToStringx(reCast<int>(analyses[i])) <<
" have been declared but were not found");
134 if(my_rank==0)stringlength=(strlen(
string)+1)*
sizeof(
char);
136 if(my_rank!=0)
string=xNew<char>(stringlength);
138 if(my_rank!=0)strings[i]=string;
147 for(
int i=0;i<numanalyses;i++) xDelete<char>(strings[i]);
148 for(
int i=0;i<numanalyses;i++) xDelete<char>(toolkits[i]);
149 xDelete<char*>(strings);
150 xDelete<char*>(toolkits);
151 xDelete<int>(analyses);