NCEPLIBS-ncio  1.0.0
All Namespaces Files Functions
quantize_data_code.f90
1 
5  integer, intent(in) :: nbits
6  real(4), intent(out) :: compress_err
7  real(4) dataMin, dataMax, scale_fact, offset
8  ! if nbits not between 1 and 31, don't do anything
9  if (nbits <= 0 .or. nbits > 31) then
10  dataout = datain
11  compress_err = 0.0
12  return
13  endif
14  datamax = maxval(datain); datamin = minval(datain)
15  ! convert data to 32 bit integers in range 0 to 2**nbits-1, then cast
16  ! cast back to 32 bit floats (data is then quantized in steps
17  ! proportional to 2**nbits so last 32-nbits in floating
18  ! point representation should be zero for efficient zlib compression).
19  scale_fact = (datamax - datamin) / (2**nbits-1); offset = datamin
20  dataout = scale_fact*(nint((datain - offset) / scale_fact)) + offset
21  compress_err = maxval(abs(datain-dataout))