Bug#856055: NetCDF import broken on amd64
Timo Korvola
Timo.Korvola at iki.fi
Fri Feb 24 20:20:26 UTC 2017
Package: dx
Version: 1:4.4.4-9+b1
Import of NetCDF files produces incorrect integer values on systems
where long is not 32 bits. This can be seen by running the attached
nctest.net and importing nctest.nc. The file can be inspected with
ncdump. The connections, being int valued, will be imported incorrectly.
The attached patch should fix the problem. The erroneous code assumed
that the NetCDF type NC_LONG corresponds to long. However, NC_LONG is a
deprecated alias for NC_INT and by definition 32 bits, whereas long
varies by platform. These days it is better to leave such type
conversions to the NetCDF library, which provides likely more efficient
and correct routines.
The patch also fixes a debug output routine, which casts pointers into
unsigned int for printing. It seems that the routine is never called
but at least compiler warnings are eliminated.
--
Timo Korvola <URL:http://www.iki.fi/tkorvola>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nctest.nc
Type: application/x-netcdf
Size: 568 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/debian-science-maintainers/attachments/20170224/2f63c2c5/attachment-0001.nc>
-------------- next part --------------
//
// time: Fri Feb 24 00:10:21 2017
//
// version: 3.2.0 (format), 4.4.4 (DX)
//
//
// MODULE main
// workspace: width = 321, height = 499
// layout: snap = 0, width = 50, height = 50, align = NN
//
macro main(
) -> (
) {
//
// node FileSelector[1]: x = 72, y = 14, inputs = 0, label = FileSelector
// output[1]: visible = 1, type = 32, value = "/home/thk/src/test/nctest.nc"
// output[2]: visible = 1, type = 32, value = "nctest.nc"
//
//
// node Import[1]: x = 90, y = 118, inputs = 6, label = Import
//
main_Import_1_out_1 =
Import(
main_FileSelector_1_out_1,
main_Import_1_in_2,
main_Import_1_in_3,
main_Import_1_in_4,
main_Import_1_in_5,
main_Import_1_in_6
) [instance: 1, cache: 1];
//
// node AutoColor[1]: x = 138, y = 191, inputs = 10, label = AutoColor
//
main_AutoColor_1_out_1,
main_AutoColor_1_out_2 =
AutoColor(
main_Import_1_out_1,
main_AutoColor_1_in_2,
main_AutoColor_1_in_3,
main_AutoColor_1_in_4,
main_AutoColor_1_in_5,
main_AutoColor_1_in_6,
main_AutoColor_1_in_7,
main_AutoColor_1_in_8,
main_AutoColor_1_in_9,
main_AutoColor_1_in_10
) [instance: 1, cache: 1];
//
// node AutoGlyph[1]: x = 201, y = 278, inputs = 7, label = AutoGlyph
// input[2]: defaulting = 0, visible = 1, type = 32, value = "text"
//
main_AutoGlyph_1_out_1 =
AutoGlyph(
main_AutoColor_1_out_1,
main_AutoGlyph_1_in_2,
main_AutoGlyph_1_in_3,
main_AutoGlyph_1_in_4,
main_AutoGlyph_1_in_5,
main_AutoGlyph_1_in_6,
main_AutoGlyph_1_in_7
) [instance: 1, cache: 1];
//
// node Tube[1]: x = 114, y = 280, inputs = 4, label = Tube
//
main_Tube_1_out_1 =
Tube(
main_AutoColor_1_out_1,
main_Tube_1_in_2,
main_Tube_1_in_3,
main_Tube_1_in_4
) [instance: 1, cache: 1];
//
// node Collect[1]: x = 177, y = 360, inputs = 2, label = Collect
//
main_Collect_1_out_1 =
Collect(
main_Tube_1_out_1,
main_AutoGlyph_1_out_1
) [instance: 1, cache: 1];
//
// node Image[1]: x = 175, y = 437, inputs = 49, label = Image
// input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1"
// input[4]: defaulting = 0, visible = 0, type = 1, value = 1
// input[5]: defaulting = 0, visible = 0, type = 8, value = [0.0407761 0.608095 3.3903]
// input[6]: defaulting = 0, visible = 0, type = 8, value = [1.05857 -0.449439 16.9762]
// input[7]: defaulting = 1, visible = 0, type = 5, value = 7.32305
// input[8]: defaulting = 0, visible = 0, type = 1, value = 640
// input[9]: defaulting = 0, visible = 0, type = 5, value = 0.75
// input[10]: defaulting = 0, visible = 0, type = 8, value = [0.0102178 0.996991 0.076841]
// input[11]: defaulting = 0, visible = 0, type = 5, value = 30.0001
// input[12]: defaulting = 0, visible = 0, type = 1, value = 1
// input[14]: defaulting = 0, visible = 0, type = 1, value = 1
// input[15]: defaulting = 1, visible = 0, type = 32, value = "none"
// input[16]: defaulting = 1, visible = 0, type = 32, value = "none"
// input[17]: defaulting = 1, visible = 0, type = 1, value = 1
// input[18]: defaulting = 1, visible = 0, type = 1, value = 1
// input[19]: defaulting = 0, visible = 0, type = 1, value = 0
// input[29]: defaulting = 1, visible = 0, type = 3, value = 0
// input[41]: defaulting = 0, visible = 0, type = 32, value = "navigate"
// depth: value = 24
// window: position = (0.3708,0.4114), size = 0.3893x0.4971, screen = 0
// internal caching: 1
//
main_Image_1_out_1,
main_Image_1_out_2,
main_Image_1_out_3 =
Image(
main_Image_1_in_1,
main_Collect_1_out_1,
main_Image_1_in_3,
main_Image_1_in_4,
main_Image_1_in_5,
main_Image_1_in_6,
main_Image_1_in_7,
main_Image_1_in_8,
main_Image_1_in_9,
main_Image_1_in_10,
main_Image_1_in_11,
main_Image_1_in_12,
main_Image_1_in_13,
main_Image_1_in_14,
main_Image_1_in_15,
main_Image_1_in_16,
main_Image_1_in_17,
main_Image_1_in_18,
main_Image_1_in_19,
main_Image_1_in_20,
main_Image_1_in_21,
main_Image_1_in_22,
main_Image_1_in_23,
main_Image_1_in_24,
main_Image_1_in_25,
main_Image_1_in_26,
main_Image_1_in_27,
main_Image_1_in_28,
main_Image_1_in_29,
main_Image_1_in_30,
main_Image_1_in_31,
main_Image_1_in_32,
main_Image_1_in_33,
main_Image_1_in_34,
main_Image_1_in_35,
main_Image_1_in_36,
main_Image_1_in_37,
main_Image_1_in_38,
main_Image_1_in_39,
main_Image_1_in_40,
main_Image_1_in_41,
main_Image_1_in_42,
main_Image_1_in_43,
main_Image_1_in_44,
main_Image_1_in_45,
main_Image_1_in_46,
main_Image_1_in_47,
main_Image_1_in_48,
main_Image_1_in_49
) [instance: 1, cache: 1];
// network: end of macro body
CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2);
}
main_FileSelector_1_out_1 = "/home/thk/src/test/nctest.nc";
main_Import_1_in_2 = NULL;
main_Import_1_in_3 = NULL;
main_Import_1_in_4 = NULL;
main_Import_1_in_5 = NULL;
main_Import_1_in_6 = NULL;
main_Import_1_out_1 = NULL;
main_AutoColor_1_in_2 = NULL;
main_AutoColor_1_in_3 = NULL;
main_AutoColor_1_in_4 = NULL;
main_AutoColor_1_in_5 = NULL;
main_AutoColor_1_in_6 = NULL;
main_AutoColor_1_in_7 = NULL;
main_AutoColor_1_in_8 = NULL;
main_AutoColor_1_in_9 = NULL;
main_AutoColor_1_in_10 = NULL;
main_AutoColor_1_out_1 = NULL;
main_AutoGlyph_1_in_2 = "text";
main_AutoGlyph_1_in_3 = NULL;
main_AutoGlyph_1_in_4 = NULL;
main_AutoGlyph_1_in_5 = NULL;
main_AutoGlyph_1_in_6 = NULL;
main_AutoGlyph_1_in_7 = NULL;
main_AutoGlyph_1_out_1 = NULL;
main_Tube_1_in_2 = NULL;
main_Tube_1_in_3 = NULL;
main_Tube_1_in_4 = NULL;
main_Tube_1_out_1 = NULL;
main_Collect_1_out_1 = NULL;
macro Image(
id,
object,
where,
useVector,
to,
from,
width,
resolution,
aspect,
up,
viewAngle,
perspective,
options,
buttonState = 1,
buttonUpApprox = "none",
buttonDownApprox = "none",
buttonUpDensity = 1,
buttonDownDensity = 1,
renderMode = 0,
defaultCamera,
reset,
backgroundColor,
throttle,
RECenable = 0,
RECfile,
RECformat,
RECresolution,
RECaspect,
AAenable = 0,
AAlabels,
AAticks,
AAcorners,
AAframe,
AAadjust,
AAcursor,
AAgrid,
AAcolors,
AAannotation,
AAlabelscale,
AAfont,
interactionMode,
title,
AAxTickLocs,
AAyTickLocs,
AAzTickLocs,
AAxTickLabels,
AAyTickLabels,
AAzTickLabels,
webOptions) -> (
object,
camera,
where)
{
ImageMessage(
id,
backgroundColor,
throttle,
RECenable,
RECfile,
RECformat,
RECresolution,
RECaspect,
AAenable,
AAlabels,
AAticks,
AAcorners,
AAframe,
AAadjust,
AAcursor,
AAgrid,
AAcolors,
AAannotation,
AAlabelscale,
AAfont,
AAxTickLocs,
AAyTickLocs,
AAzTickLocs,
AAxTickLabels,
AAyTickLabels,
AAzTickLabels,
interactionMode,
title,
renderMode,
buttonUpApprox,
buttonDownApprox,
buttonUpDensity,
buttonDownDensity) [instance: 1, cache: 1];
autoCamera =
AutoCamera(
object,
"front",
object,
resolution,
aspect,
[0,1,0],
perspective,
viewAngle,
backgroundColor) [instance: 1, cache: 1];
realCamera =
Camera(
to,
from,
width,
resolution,
aspect,
up,
perspective,
viewAngle,
backgroundColor) [instance: 1, cache: 1];
coloredDefaultCamera =
UpdateCamera(defaultCamera,
background=backgroundColor) [instance: 1, cache: 1];
nullDefaultCamera =
Inquire(defaultCamera,
"is null + 1") [instance: 1, cache: 1];
resetCamera =
Switch(
nullDefaultCamera,
coloredDefaultCamera,
autoCamera) [instance: 1, cache: 1];
resetNull =
Inquire(
reset,
"is null + 1") [instance: 2, cache: 1];
reset =
Switch(
resetNull,
reset,
0) [instance: 2, cache: 1];
whichCamera =
Compute(
"($0 != 0 || $1 == 0) ? 1 : 2",
reset,
useVector) [instance: 1, cache: 1];
camera = Switch(
whichCamera,
resetCamera,
realCamera) [instance: 3, cache: 1];
AAobject =
AutoAxes(
object,
camera,
AAlabels,
AAticks,
AAcorners,
AAframe,
AAadjust,
AAcursor,
AAgrid,
AAcolors,
AAannotation,
AAlabelscale,
AAfont,
AAxTickLocs,
AAyTickLocs,
AAzTickLocs,
AAxTickLabels,
AAyTickLabels,
AAzTickLabels) [instance: 1, cache: 1];
switchAAenable = Compute("$0+1",
AAenable) [instance: 2, cache: 1];
object = Switch(
switchAAenable,
object,
AAobject) [instance:4, cache: 1];
SWapproximation_options =
Switch(
buttonState,
buttonUpApprox,
buttonDownApprox) [instance: 5, cache: 1];
SWdensity_options =
Switch(
buttonState,
buttonUpDensity,
buttonDownDensity) [instance: 6, cache: 1];
HWapproximation_options =
Format(
"%s,%s",
buttonDownApprox,
buttonUpApprox) [instance: 1, cache: 1];
HWdensity_options =
Format(
"%d,%d",
buttonDownDensity,
buttonUpDensity) [instance: 2, cache: 1];
switchRenderMode = Compute(
"$0+1",
renderMode) [instance: 3, cache: 1];
approximation_options = Switch(
switchRenderMode,
SWapproximation_options,
HWapproximation_options) [instance: 7, cache: 1];
density_options = Switch(
switchRenderMode,
SWdensity_options,
HWdensity_options) [instance: 8, cache: 1];
renderModeString = Switch(
switchRenderMode,
"software",
"hardware")[instance: 9, cache: 1];
object_tag = Inquire(
object,
"object tag")[instance: 3, cache: 1];
annoted_object =
Options(
object,
"send boxes",
0,
"cache",
1,
"object tag",
object_tag,
"ddcamera",
whichCamera,
"rendering approximation",
approximation_options,
"render every",
density_options,
"button state",
buttonState,
"rendering mode",
renderModeString) [instance: 1, cache: 1];
RECresNull =
Inquire(
RECresolution,
"is null + 1") [instance: 4, cache: 1];
ImageResolution =
Inquire(
camera,
"camera resolution") [instance: 5, cache: 1];
RECresolution =
Switch(
RECresNull,
RECresolution,
ImageResolution) [instance: 10, cache: 1];
RECaspectNull =
Inquire(
RECaspect,
"is null + 1") [instance: 6, cache: 1];
ImageAspect =
Inquire(
camera,
"camera aspect") [instance: 7, cache: 1];
RECaspect =
Switch(
RECaspectNull,
RECaspect,
ImageAspect) [instance: 11, cache: 1];
switchRECenable = Compute(
"$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4",
RECenable,
switchRenderMode,
RECresolution,
ImageResolution,
RECaspect,
ImageAspect) [instance: 4, cache: 1];
NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object);
Display(
NoRECobject,
camera,
where,
throttle) [instance: 1, cache: 1];
image =
Render(
RECNoRerenderObject,
camera) [instance: 1, cache: 1];
Display(
image,
NULL,
where,
throttle) [instance: 2, cache: 1];
WriteImage(
image,
RECfile,
RECformat) [instance: 1, cache: 1];
rec_where = Display(
RECNoRerHW,
camera,
where,
throttle) [instance: 1, cache: 0];
rec_image = ReadImageWindow(
rec_where) [instance: 1, cache: 1];
WriteImage(
rec_image,
RECfile,
RECformat) [instance: 1, cache: 1];
RECupdateCamera =
UpdateCamera(
camera,
resolution=RECresolution,
aspect=RECaspect) [instance: 2, cache: 1];
Display(
RECRerenderObject,
camera,
where,
throttle) [instance: 1, cache: 1];
RECRerenderObject =
ScaleScreen(
RECRerenderObject,
NULL,
RECresolution,
camera) [instance: 1, cache: 1];
image =
Render(
RECRerenderObject,
RECupdateCamera) [instance: 2, cache: 1];
WriteImage(
image,
RECfile,
RECformat) [instance: 2, cache: 1];
}
main_Image_1_in_1 = "Image_1";
main_Image_1_in_3 = "X24,,";
main_Image_1_in_4 = 1;
main_Image_1_in_5 = [0.0407761 0.608095 3.3903];
main_Image_1_in_6 = [1.05857 -0.449439 16.9762];
main_Image_1_in_7 = NULL;
main_Image_1_in_8 = 640;
main_Image_1_in_9 = 0.75;
main_Image_1_in_10 = [0.0102178 0.996991 0.076841];
main_Image_1_in_11 = 30.0001;
main_Image_1_in_12 = 1;
main_Image_1_in_13 = NULL;
main_Image_1_in_14 = 1;
main_Image_1_in_15 = NULL;
main_Image_1_in_16 = NULL;
main_Image_1_in_17 = NULL;
main_Image_1_in_18 = NULL;
main_Image_1_in_19 = 0;
main_Image_1_in_20 = NULL;
main_Image_1_in_21 = NULL;
main_Image_1_in_22 = NULL;
main_Image_1_in_23 = NULL;
main_Image_1_in_25 = NULL;
main_Image_1_in_26 = NULL;
main_Image_1_in_27 = NULL;
main_Image_1_in_28 = NULL;
main_Image_1_in_29 = NULL;
main_Image_1_in_30 = NULL;
main_Image_1_in_31 = NULL;
main_Image_1_in_32 = NULL;
main_Image_1_in_33 = NULL;
main_Image_1_in_34 = NULL;
main_Image_1_in_35 = NULL;
main_Image_1_in_36 = NULL;
main_Image_1_in_37 = NULL;
main_Image_1_in_38 = NULL;
main_Image_1_in_39 = NULL;
main_Image_1_in_40 = NULL;
main_Image_1_in_41 = "navigate";
main_Image_1_in_42 = NULL;
main_Image_1_in_43 = NULL;
main_Image_1_in_44 = NULL;
main_Image_1_in_45 = NULL;
main_Image_1_in_46 = NULL;
main_Image_1_in_47 = NULL;
main_Image_1_in_48 = NULL;
main_Image_1_in_49 = NULL;
Executive("product version 4 4 4");
$sync
main();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: netcdf-import.patch
Type: text/x-patch
Size: 3978 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/debian-science-maintainers/attachments/20170224/2f63c2c5/attachment-0001.bin>
More information about the debian-science-maintainers
mailing list