int artio_parameter_write(artio_fh *handle, parameter_list *parameters) { parameter * item; /* retain a number for endian check */ int32_t endian_tag = ARTIO_ENDIAN_MAGIC; int32_t length = 0; item = parameters->head; while (NULL != item) { length++; item = item->next; } artio_file_fwrite(handle, &endian_tag, 1, ARTIO_TYPE_INT); artio_file_fwrite(handle, &length, 1, ARTIO_TYPE_INT); item = parameters->head; while (NULL != item) { artio_file_fwrite(handle, &item->key_length, 1, ARTIO_TYPE_INT); artio_file_fwrite(handle, item->key, item->key_length, ARTIO_TYPE_CHAR); artio_file_fwrite(handle, &item->val_length, 1, ARTIO_TYPE_INT); artio_file_fwrite(handle, &item->type, 1, ARTIO_TYPE_INT); artio_file_fwrite(handle, item->value, item->val_length, item->type); item = item->next; } return ARTIO_SUCCESS; }
int artio_particle_write_particle(artio_fileset *handle, int64_t pid, int subspecies, double * primary_variables, float *secondary_variables) { int ret; artio_particle_file *phandle; if ( handle == NULL ) { return ARTIO_ERR_INVALID_HANDLE; } if (handle->open_mode != ARTIO_FILESET_WRITE || !(handle->open_type & ARTIO_OPEN_PARTICLES) || handle->particle == NULL ) { return ARTIO_ERR_INVALID_FILESET_MODE; } phandle = handle->particle; if (phandle->cur_species == -1 || phandle->cur_particle >= phandle->num_particles_per_species[phandle->cur_species]) { return ARTIO_ERR_INVALID_STATE; } ret = artio_file_fwrite(phandle->ffh[phandle->cur_file], &pid, 1, ARTIO_TYPE_LONG); if ( ret != ARTIO_SUCCESS ) return ret; ret = artio_file_fwrite(phandle->ffh[phandle->cur_file], &subspecies, 1, ARTIO_TYPE_INT); if ( ret != ARTIO_SUCCESS ) return ret; ret = artio_file_fwrite(phandle->ffh[phandle->cur_file], primary_variables, phandle->num_primary_variables[phandle->cur_species], ARTIO_TYPE_DOUBLE); if ( ret != ARTIO_SUCCESS ) return ret; ret = artio_file_fwrite(phandle->ffh[phandle->cur_file], secondary_variables, phandle->num_secondary_variables[phandle->cur_species], ARTIO_TYPE_FLOAT); if ( ret != ARTIO_SUCCESS ) return ret; phandle->cur_particle++; return ARTIO_SUCCESS; }
int artio_particle_write_root_cell_begin(artio_fileset *handle, int64_t sfc, int * num_particles_per_species) { int i; int ret; artio_particle_file *phandle; if ( handle == NULL ) { return ARTIO_ERR_INVALID_HANDLE; } if (handle->open_mode != ARTIO_FILESET_WRITE || !(handle->open_type & ARTIO_OPEN_PARTICLES) || handle->particle == NULL ) { return ARTIO_ERR_INVALID_FILESET_MODE; } phandle = handle->particle; if ( phandle->cur_sfc != -1 ) { return ARTIO_ERR_INVALID_STATE; } ret = artio_particle_seek_to_sfc(handle, sfc); if ( ret != ARTIO_SUCCESS ) return ret; ret = artio_file_fwrite(phandle->ffh[phandle->cur_file], num_particles_per_species, phandle->num_species, ARTIO_TYPE_INT); if ( ret != ARTIO_SUCCESS ) return ret; for (i = 0; i < phandle->num_species; i++) { phandle->num_particles_per_species[i] = num_particles_per_species[i]; } phandle->cur_sfc = sfc; phandle->cur_species = -1; phandle->cur_particle = -1; return ARTIO_SUCCESS; }