コード例 #1
0
ファイル: artHeader.c プロジェクト: adrpar/densfield
extern void
artHeader_write(artHeader_t header, const char *headerFileName)
{
	assert(header != NULL);
	assert(headerFileName != NULL);

	FILE     *f;
	int      blocksize;
	endian_t systemEndianess = endian_getSystemEndianess();

	f         = xfopen(headerFileName, "wb");
	blocksize = ARTHEADER_HEADERSTRING_LENGTH + 121 * sizeof(float);
	if (header->fileEndianess != systemEndianess) {
		local_byteswapHeader(header);
		byteswap(&blocksize, sizeof(int));
	}

	xfwrite(&blocksize, sizeof(int), 1, f);
	xfwrite(header->headerString, sizeof(char),
	        ARTHEADER_HEADERSTRING_LENGTH, f);
	xfwrite(&(header->aexpn), sizeof(float), 121, f);
	xfwrite(&blocksize, sizeof(int), 1, f);

	if (header->fileEndianess != systemEndianess)
		local_byteswapHeader(header);

	xfclose(&f);
}
コード例 #2
0
ファイル: cubepm.c プロジェクト: satlank/ginnungagap
extern void
cubepm_initHeaderValuesFromFiles(cubepm_t cubepm)
{
	assert(cubepm != NULL);
	assert(cubepm->fileNames != NULL);

	cubepm_open(cubepm, CUBEPM_MODE_READ, 0);
	xfread(cubepm->np_local, sizeof(int32_t), 1, cubepm->f);
	xfread(&(cubepm->a), sizeof(float), 1, cubepm->f);
	xfread(&(cubepm->t), sizeof(float), 1, cubepm->f);
	xfread(&(cubepm->tau), sizeof(float), 1, cubepm->f);
	xfread(&(cubepm->nts), sizeof(int32_t), 1, cubepm->f);
	xfread(&(cubepm->dt_f_acc), sizeof(float), 1, cubepm->f);
	xfread(&(cubepm->dt_pp_acc), sizeof(float), 1, cubepm->f);
	xfread(&(cubepm->dt_c_acc), sizeof(float), 1, cubepm->f);
	xfread(&(cubepm->cur_checkpoint), sizeof(int32_t), 1, cubepm->f);
	xfread(&(cubepm->cur_projection), sizeof(int32_t), 1, cubepm->f);
	xfread(&(cubepm->cur_halofind), sizeof(int32_t), 1, cubepm->f);
	xfread(&(cubepm->mass_p), sizeof(float), 1, cubepm->f);
	cubepm_close(cubepm);
	for (int i = 1; i < cubepm->numFiles; i++) {
		cubepm_open(cubepm, CUBEPM_MODE_READ, i);
		xfread(cubepm->np_local + i, sizeof(int32_t), 1, cubepm->f);
		cubepm_close(cubepm);
	}

	if (cubepm->fileEndianess != endian_getSystemEndianess())
		local_byteswapHeaderValues(cubepm);
}
コード例 #3
0
ファイル: cubepm.c プロジェクト: satlank/ginnungagap
static uint64_t
local_actOnSingleFile(cubepm_t cubepm,
                      uint64_t pSkip,
                      uint64_t pAct,
                      stai_t   *data)
{
	bool  doByteswap = false;
	float partData[6];

	if (endian_getSystemEndianess() != cubepm_getFileEndianess(cubepm))
		doByteswap = true;

	local_seekToParticle(cubepm, pSkip);

	if (cubepm_getMode(cubepm) == CUBEPM_MODE_READ) {
		int ngrid = cubepm_getNGrid(cubepm);
		for (uint64_t i = UINT64_C(0); i < pAct; i++) {
			local_readParticle(cubepm->f, partData, doByteswap);
			local_applyOffsetToParticle(partData, cubepm->fileCoordOffset);
			local_applyPeriodicityToParticle(partData, ngrid);
			local_copyParticleDataToStais(partData, i, data);
		}
	} else if (cubepm_getMode(cubepm) == CUBEPM_MODE_WRITE) {
		for (uint64_t i = UINT64_C(0); i < pAct; i++) {
			local_fillParticleDataFromStais(partData, i, data);
			local_unapplyOffsetToParticle(partData, cubepm->fileCoordOffset);
			local_writeParticle(cubepm->f, partData, doByteswap);
		}
	} else {
		diediedie(EXIT_FAILURE);
	}

	return pAct;
}
コード例 #4
0
ファイル: cubepm.c プロジェクト: satlank/ginnungagap
/*--- Implementations of local functions --------------------------------*/
static void
local_nullRestOfStructure(cubepm_t cubepm)
{
	assert(cubepm->numFiles > 0);

	cubepm->fileEndianess = endian_getSystemEndianess();
	cubepm->f             = NULL;
	cubepm->mode          = CUBEPM_MODE_READ;
	cubepm->lastOpened    = CUBEPM_NUMBER_NONE;
	for (int i = 0; i < 3; i++)
		cubepm->fileCoordOffset[i] = NAN;
	for (int i = 0; i < cubepm->numFiles; i++)
		cubepm->np_local[i] = CUBEPM_NUMBER_NONE;
	cubepm->a              = NAN;
	cubepm->t              = NAN;
	cubepm->tau            = NAN;
	cubepm->nts            = CUBEPM_NUMBER_NONE;
	cubepm->dt_f_acc       = NAN;
	cubepm->dt_pp_acc      = NAN;
	cubepm->dt_c_acc       = NAN;
	cubepm->cur_checkpoint = CUBEPM_NUMBER_NONE;
	cubepm->cur_projection = CUBEPM_NUMBER_NONE;
	cubepm->cur_halofind   = CUBEPM_NUMBER_NONE;
	cubepm->mass_p         = NAN;
	cubepm->omega0         = NAN;
	cubepm->lambda0        = NAN;
	cubepm->boxsize        = NAN;
}
コード例 #5
0
ファイル: art.c プロジェクト: adrpar/densfield
extern uint64_t
art_readFromPage(art_t    art,
                 int      pageNumber,
                 uint64_t pSkip,
                 uint64_t pRead,
                 stai_t   *data)
{
	bool     doByteswap      = false;
	endian_t systemEndianess = endian_getSystemEndianess();

	assert(art != NULL);
	assert(art->f != NULL && art->mode == ART_MODE_READ);
	assert(pageNumber < art->numPagesInThisFile);

	local_seekToPage(art, pageNumber);

	if (systemEndianess != artHeader_getFileEndianess(art->header))
		doByteswap = true;

	local_readComponent(art, pSkip, pRead, data[0], doByteswap);
	local_readComponent(art, pSkip, pRead, data[1], doByteswap);
	local_readComponent(art, pSkip, pRead, data[2], doByteswap);
	local_readComponent(art, pSkip, pRead, data[3], doByteswap);
	local_readComponent(art, pSkip, pRead, data[4], doByteswap);
	local_readComponent(art, pSkip, pRead, data[5], doByteswap);

	return pRead;
}
コード例 #6
0
ファイル: artHeader.c プロジェクト: adrpar/densfield
/*--- Implementation of local functions ---------------------------------*/
static void
local_nullHeader(artHeader_t header)
{
	for (int i = 0; i < ARTHEADER_HEADERSTRING_LENGTH + 1; i++)
		header->headerString[i] = '\0';
	header->aexpn    = HUGE_VAL;
	header->aexp0    = HUGE_VAL;
	header->amplt    = HUGE_VAL;
	header->astep    = HUGE_VAL;
	header->istep    = INT_MAX;
	header->partw    = HUGE_VAL;
	header->tintg    = HUGE_VAL;
	header->ekin     = HUGE_VAL;
	header->ekin1    = HUGE_VAL;
	header->ekin2    = HUGE_VAL;
	header->au0      = HUGE_VAL;
	header->aeu0     = HUGE_VAL;
	header->nrowc    = INT_MAX;
	header->ngridc   = INT_MAX;
	header->nspecies = INT_MAX;
	header->nseed    = INT_MAX;
	header->Om0      = HUGE_VAL;
	header->Oml0     = HUGE_VAL;
	header->hubble   = HUGE_VAL;
	header->wp5      = HUGE_VAL;
	header->Ocurv    = HUGE_VAL;
	for (int i = 0; i < 10; i++)
		header->wspecies[i] = HUGE_VAL;
	for (int i = 0; i < 10; i++)
		header->lspecies[i] = INT64_MAX;
	for (int i = 30; i < 100; i++)
		header->extras[i] = HUGE_VAL;

	header->fileEndianess            = endian_getSystemEndianess();
	header->factorFileWeightToMsunh  = 0.0;
	header->factorFilePositionToMpch = 0.0;
} /* local_nullHeader */
コード例 #7
0
ファイル: artHeader.c プロジェクト: adrpar/densfield
static void
local_readHeaderActual(artHeader_t header, FILE *f)
{
	uint32_t b1, b2;
	endian_t systemEndianess = endian_getSystemEndianess();

	xfread(&b1, sizeof(uint32_t), 1, f);
	xfread(header->headerString, sizeof(char),
	       ARTHEADER_HEADERSTRING_LENGTH, f);
	header->headerString[ARTHEADER_HEADERSTRING_LENGTH] = '\0';
	xfread(&(header->aexpn), sizeof(float), 121, f);
	xfread(&b2, sizeof(uint32_t), 1, f);

	if (b1 != b2) {
		diediedie(EXIT_FAILURE);
	}

	if (systemEndianess != header->fileEndianess)
		local_byteswapHeader(header);

	local_calcFactorWeight(header);
	local_calcFactorPosition(header);
	local_calFactorVelocity(header);
}