diff --git a/doc/README.pio_write b/doc/README.pio_write index 257f3cf8ad43a4bc142b96e876e3266be064a823..9b8a21689913846030b45f42f33552ac77a4d4a3 100644 --- a/doc/README.pio_write +++ b/doc/README.pio_write @@ -172,3 +172,11 @@ Set the time unit to one of * year As with -qtaxis-type see the CDI library documentation for specifics. + +-qdatatype=<DATATYPE> + +Set the external representation of the written data. Valid values for +DATATYPE are pack followed by the number of significant bits for GRIB +and GRIB2 data and flt32 or flt64 for the other file formats (which +store raw floating point values) to use 32 and 64 bit float formats. +Note: this option must follow the -f option to become effective. diff --git a/tests/pio_write.c b/tests/pio_write.c index 8eceba9e5c9c9c95962c924f41655bda07ee97d8..f376607f18ccf1db7e6a9b4a17c35ba138ccce49 100644 --- a/tests/pio_write.c +++ b/tests/pio_write.c @@ -182,8 +182,25 @@ parse_long_option(struct model_config *restrict setup, int pioConfHandle, pioRol #endif static const char cacheRedistStr[] = "no-cache-redists", pioRoleSchemeOptionStr[] = "pio-role-scheme", curvilinearGridOptionStr[] = "no-create-curvilinear-grid", uuidCreateOptionStr[] = "no-create-uuid", - useDistGridOptionStr[] = "no-use-dist-grid", taxistypeOptionStr[] = "taxis-type", - taxisunitOptionStr[] = "taxis-unit"; + useDistGridOptionStr[] = "no-use-dist-grid", datatypeOptionStr[] = "datatype", + taxistypeOptionStr[] = "taxis-type", taxisunitOptionStr[] = "taxis-unit"; + static const struct string2int datatypeArgMap[] = { + { "pack", CDI_DATATYPE_PACK }, { "pack1", CDI_DATATYPE_PACK1 }, { "pack2", CDI_DATATYPE_PACK2 }, + { "pack3", CDI_DATATYPE_PACK3 }, { "pack4", CDI_DATATYPE_PACK4 }, { "pack5", CDI_DATATYPE_PACK5 }, + { "pack6", CDI_DATATYPE_PACK6 }, { "pack7", CDI_DATATYPE_PACK7 }, { "pack8", CDI_DATATYPE_PACK8 }, + { "pack9", CDI_DATATYPE_PACK9 }, { "pack10", CDI_DATATYPE_PACK10 }, { "pack11", CDI_DATATYPE_PACK11 }, + { "pack12", CDI_DATATYPE_PACK12 }, { "pack13", CDI_DATATYPE_PACK13 }, { "pack14", CDI_DATATYPE_PACK14 }, + { "pack15", CDI_DATATYPE_PACK15 }, { "pack16", CDI_DATATYPE_PACK16 }, { "pack17", CDI_DATATYPE_PACK17 }, + { "pack18", CDI_DATATYPE_PACK18 }, { "pack19", CDI_DATATYPE_PACK19 }, { "pack20", CDI_DATATYPE_PACK20 }, + { "pack21", CDI_DATATYPE_PACK21 }, { "pack22", CDI_DATATYPE_PACK22 }, { "pack23", CDI_DATATYPE_PACK23 }, + { "pack24", CDI_DATATYPE_PACK24 }, { "pack25", CDI_DATATYPE_PACK25 }, { "pack26", CDI_DATATYPE_PACK26 }, + { "pack27", CDI_DATATYPE_PACK27 }, { "pack28", CDI_DATATYPE_PACK28 }, { "pack29", CDI_DATATYPE_PACK29 }, + { "pack30", CDI_DATATYPE_PACK30 }, { "pack31", CDI_DATATYPE_PACK31 }, { "pack32", CDI_DATATYPE_PACK32 }, + { "cpx32", CDI_DATATYPE_CPX32 }, { "cpx64", CDI_DATATYPE_CPX64 }, { "flt32", CDI_DATATYPE_FLT32 }, + { "flt64", CDI_DATATYPE_FLT64 }, { "int8", CDI_DATATYPE_INT8 }, { "int16", CDI_DATATYPE_INT16 }, + { "int32", CDI_DATATYPE_INT32 }, { "uint8", CDI_DATATYPE_UINT8 }, { "uint16", CDI_DATATYPE_UINT16 }, + { "uint32", CDI_DATATYPE_UINT32 }, + }; static const struct string2int taxistypeArgMap[] = { { "absolute", TAXIS_ABSOLUTE }, { "relative", TAXIS_RELATIVE }, @@ -196,6 +213,7 @@ parse_long_option(struct model_config *restrict setup, int pioConfHandle, pioRol }; enum { + datatypeArgMapSize = sizeof(datatypeArgMap) / sizeof(datatypeArgMap[0]), taxistypeArgMapSize = sizeof(taxistypeArgMap) / sizeof(taxistypeArgMap[0]), taxisunitArgMapSize = sizeof(taxisunitArgMap) / sizeof(taxisunitArgMap[0]), }; @@ -214,6 +232,9 @@ parse_long_option(struct model_config *restrict setup, int pioConfHandle, pioRol else if (parseLongOptionArgStringToInt(str, sizeof(taxisunitOptionStr) - 1, taxisunitOptionStr, taxisunitArgMapSize, taxisunitArgMap, argc, argv, &setup->taxisunit)) ; + else if (parseLongOptionArgStringToInt(str, sizeof(datatypeOptionStr) - 1, datatypeOptionStr, datatypeArgMapSize, datatypeArgMap, + argc, argv, &setup->datatype)) + ; else if (!strncmp(str, pioRoleSchemeOptionStr, sizeof(pioRoleSchemeOptionStr) - 1)) { #ifdef USE_MPI