Skip to content
Snippets Groups Projects
Commit 9dfaddf5 authored by Thomas Jahns's avatar Thomas Jahns :cartwheel:
Browse files

Extract function.

parent 00b1070d
No related branches found
No related tags found
No related merge requests found
......@@ -1309,6 +1309,42 @@ buildPassVarDict(size_t collSize, const struct passPlan *passes,
return numVarsInPass;
}
static struct idxlistAndSize
dstListFromRecordRange(int vlistID, int varID, int myVarStart, int myVarEnd,
size_t myRecordStart, size_t myRecordEnd,
const struct recordWrite *restrict writtenRecords,
size_t recordStart, size_t recordEnd,
const struct cdiPioConf *conf)
{
/* is this process writing part of this variable? */
Xt_idxlist dstList;
int listSize;
if (myRecordStart <= myRecordEnd && myVarStart <= varID && myVarEnd >= varID)
{
size_t myVarRecordStart
= writtenRecords[myRecordStart].varID == varID
? myRecordStart : recordStart;
size_t myLevelStart
= (size_t)writtenRecords[myVarRecordStart].level;
size_t myVarRecordEnd
= writtenRecords[myRecordEnd].varID == varID
? myRecordEnd : recordEnd;
size_t myNumLevels
= (size_t)writtenRecords[myVarRecordEnd].level
- myLevelStart + 1;
dstList
= buildVarSlicesIdxList(vlistID, varID, (int)myLevelStart,
(int)myNumLevels, conf);
listSize = xt_idxlist_get_num_indices(dstList);
}
else
{
dstList = xt_idxempty_new();
listSize = 0;
}
return (struct idxlistAndSize){ .list = dstList, .listSize = listSize };
}
static void
writeGribStream(size_t streamIdx,
......@@ -1372,40 +1408,19 @@ writeGribStream(size_t streamIdx,
size_t elemSize
= conversion == DATA_HEADER_FLOAT
? sizeof (float) : sizeof (double);
Xt_idxlist dstList;
/* is this process writing part of this variable? */
if (myRecordStart <= myRecordEnd
&& myVarStart <= varID && myVarEnd >= varID)
{
size_t myVarRecordStart
= writtenRecords[myRecordStart].varID == varID
? myRecordStart : varsInPass[varIdx].recordStart;
size_t myLevelStart
= (size_t)writtenRecords[myVarRecordStart].level;
size_t myVarRecordEnd
= writtenRecords[myRecordEnd].varID == varID
? myRecordEnd : (size_t)varsInPass[varIdx].recordEnd;
size_t myNumLevels
= (size_t)writtenRecords[myVarRecordEnd].level
- myLevelStart + 1;
dstList
= buildVarSlicesIdxList(vlistID, varID, (int)myLevelStart,
(int)myNumLevels, conf);
size_t sliceSize = (size_t)xt_idxlist_get_num_indices(dstList);
assert(sliceSize * elemSize
== (writtenRecords[myVarRecordStart].dataSize
* myNumLevels));
myAggSize += sliceSize * elemSize;
}
else
{
dstList = xt_idxempty_new();
}
struct idxlistAndSize dst
= dstListFromRecordRange(vlistID, varID, myVarStart, myVarEnd,
myRecordStart, myRecordEnd,
writtenRecords,
varsInPass[varIdx].recordStart,
varsInPass[varIdx].recordEnd,
conf);
myAggSize += (size_t)dst.listSize * elemSize;
displ[numVarsInPass + varIdx + 1] = (MPI_Aint)myAggSize;
Xt_idxlist *varPartDescPreset
= partDescPreset ? partDescPreset[varIdx] : NULL;
varRedists[varIdx] = buildVarRedist(headerIdx, streamIdx,
dstList, varPartDescPreset,
dst.list, varPartDescPreset,
conf);
}
/* merge all redists for current pass */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment