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);
92 (*Data).resize(Steps);
94 (*Data)[0][0].resize(1);
95 (*Data)[0][0][0].resize(1);
97 size_t CurrentStep = 0;
98 while(fgets(Line, LineLength, File) != NULL)
100 double InRankData[3];
102 size_t CurrentVertex;
103 ReadCount = sscanf(Line,
"[%lu,%lu,%lu] Result Vertex: %lf %lf %lf",
107 &InRankData[0], &InRankData[1], &InRankData[2]);
108 if(ReadCount!=6)
continue;
111 if((*Data)[CurrentStep].size() <= CurrentRank)
113 (*Data)[CurrentStep].resize(CurrentRank+1);
116 if((*Data)[CurrentStep][CurrentRank].size() <= CurrentVertex)
118 (*Data)[CurrentStep][CurrentRank].resize(CurrentVertex+1);
121 (*Data)[CurrentStep][CurrentRank][CurrentVertex].resize(Dimension);
122 (*Data)[CurrentStep][CurrentRank][CurrentVertex][0] = InRankData[0];
123 (*Data)[CurrentStep][CurrentRank][CurrentVertex][1] = InRankData[1];
124 (*Data)[CurrentStep][CurrentRank][CurrentVertex][2] = InRankData[2];
140 double MaximumDifference = 0;
142 if(Test1->size() != Test2->size()){
143 printf(
"Different number of steps: %lu %lu\n", Test1->size(), Test2->size());
147 for(
size_t CurrentStep=0; CurrentStep<(*Test1).size(); ++CurrentStep)
149 if((*Test1)[CurrentStep].size() != (*Test2)[CurrentStep].size()){
150 printf(
"Different number of ranks in Step %lu: %lu %lu\n", CurrentStep,(*Test1)[CurrentStep].size(),(*Test2)[CurrentStep].size());
154 for(
size_t CurrentRank=0; CurrentRank<(*Test1)[CurrentStep].size(); ++CurrentRank)
156 if((*Test1)[CurrentStep][CurrentRank].size() != (*Test2)[CurrentStep][CurrentRank].size()){
157 printf(
"Different number of vertices in Step %lu and Rank %lu: %lu %lu\n",CurrentStep,CurrentRank,(*Test1)[CurrentStep][CurrentRank].size(),(*Test2)[CurrentStep][CurrentRank].size());
160 for(
size_t CurrentVertex=0; CurrentVertex<(*Test1)[CurrentStep][CurrentRank].size(); ++CurrentVertex)
162 for(
size_t i=0; i<(*Test1)[CurrentStep][CurrentRank][CurrentVertex].size(); ++i)
164 double Value1 = (*Test1)[CurrentStep][CurrentRank][CurrentVertex][i];
165 double Value2 = (*Test2)[CurrentStep][CurrentRank][CurrentVertex][i];
166 double AbsVal = fabs(Value1-Value2);
167 MaximumDifference = MaximumDifference>AbsVal?MaximumDifference:AbsVal;
168 if(AbsVal>0.001) printf(
"Found deviation of %g at Step: %lu Rank: %lu Vertex: %lu, between %g and %g\n",
178 printf(
"MaximumDifference: %g\n", MaximumDifference);
179 return MaximumDifference<0.001;