57 FILE* File = fopen(FileName,
"r");
60 fprintf(stderr,
"Could not open file '%s'\n", FileName);
63 const int LineLength = 8192;
64 char Line[LineLength];
66 if(fgets(Line, LineLength, File) == NULL)
68 fprintf(stderr,
"Could not read file '%s'\n", FileName);
72 int ReadCount = sscanf(Line,
"Ranks: %d", &Ranks);
75 fprintf(stderr,
"Could not parse ranks in '%s'\n", FileName);
78 if(fgets(Line, LineLength, File) == NULL)
80 fprintf(stderr,
"Could not read file '%s'\n", FileName);
84 ReadCount = sscanf(Line,
"Number of Steps: %d", &Steps);
87 fprintf(stderr,
"Could not parse number of steps in '%s'\n", FileName);
90 double ****Data = NULL;
91 stb_arr_setlen(Data, Steps);
92 memset(Data, 0,
sizeof(Data)*Steps);
94 while(fgets(Line, LineLength, File) != NULL)
99 ReadCount = sscanf(Line,
"[%d,%d,%d] Result Vertex: %lf %lf %lf",
103 &InRankData[0], &InRankData[1], &InRankData[2]);
104 if(ReadCount!=6)
continue;
106 double ***StepData = Data[CurrentStep];
107 if(!stb_arr_valid(StepData, CurrentRank))
110 int CurrentLength = stb_arr_len(StepData);
111 stb_arr_setlen(StepData, CurrentRank+1);
112 memset(&StepData[CurrentLength], 0,
sizeof(StepData)*(CurrentRank+1-CurrentLength));
113 Data[CurrentStep] = StepData;
115 double **RankData = StepData[CurrentRank];
116 if(!stb_arr_valid(RankData, CurrentVertex))
118 int CurrentLength = stb_arr_len(RankData);
119 stb_arr_setlen(RankData, CurrentVertex+1);
120 memset(&RankData[CurrentVertex], 0,
sizeof(RankData)*(CurrentVertex+1-CurrentLength));
121 StepData[CurrentRank] = RankData;
123 double *VertexData = RankData[CurrentVertex];
124 stb_arr_setlen(VertexData, Dimension);
125 RankData[CurrentVertex] = VertexData;
126 VertexData[0] = InRankData[0];
127 VertexData[1] = InRankData[1];
128 VertexData[2] = InRankData[2];
143 double MaximumDifference = 0;
144 int CurrentStep, CurrentRank, CurrentVertex, i;
145 if(stb_arr_len(Test1) != stb_arr_len(Test2)){
146 printf(
"Different number of steps: %d %d\n", stb_arr_len(Test1), stb_arr_len(Test2));
150 for(CurrentStep=0; CurrentStep<stb_arr_len(Test1); CurrentStep++)
152 if(stb_arr_len(Test1[CurrentStep]) != stb_arr_len(Test2[CurrentStep]))
154 printf(
"Different number of ranks in Step %d: %d %d\n",
156 stb_arr_len(Test1[CurrentStep]),
157 stb_arr_len(Test2[CurrentStep]));
161 for(CurrentRank=0; CurrentRank<stb_arr_len(Test1[CurrentStep]); CurrentRank++)
163 if(stb_arr_len(Test1[CurrentStep][CurrentRank]) != stb_arr_len(Test2[CurrentStep][CurrentRank]))
165 printf(
"Different number of vertices in Step %d and Rank %d: %d %d\n",
168 stb_arr_len(Test1[CurrentStep][CurrentRank]),
169 stb_arr_len(Test2[CurrentStep][CurrentRank]));
172 for(CurrentVertex=0; CurrentVertex<stb_arr_len(Test1[CurrentStep][CurrentRank]); CurrentVertex++)
174 assert(stb_arr_valid(Test2[CurrentStep][CurrentRank], CurrentVertex));
175 for(i=0; i<stb_arr_len(Test1[CurrentStep][CurrentRank][CurrentVertex]); i++)
177 double Value1 = Test1[CurrentStep][CurrentRank][CurrentVertex][i];
178 double Value2 = Test2[CurrentStep][CurrentRank][CurrentVertex][i];
179 double AbsVal = fabs(Value1-Value2);
180 MaximumDifference = MaximumDifference>AbsVal?MaximumDifference:AbsVal;
181 if(AbsVal>0.001) printf(
"Found deviation of %g at Step: %u Rank: %u Vertex: %u, between %g and %g\n",
191 printf(
"MaximumDifference: %g\n", MaximumDifference);
192 return MaximumDifference<0.001;