First version of LAM support.

This commit is contained in:
Philippe Marguinaud 2016-09-30 09:53:04 +02:00
parent 9b69b382ff
commit 08ac3b7dc4
30 changed files with 3360 additions and 0 deletions

View File

@ -0,0 +1,11 @@
# La1 - latitude of first grid point
signed[4] latitudeOfFirstGridPoint: edition_specific,no_copy ;
alias La1 = latitudeOfFirstGridPoint;
meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;
# Lo1 - longitude of first grid point
signed[4] longitudeOfFirstGridPoint : edition_specific,no_copy;
alias Lo1 = longitudeOfFirstGridPoint;
meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;

View File

@ -0,0 +1,16 @@
# LaD - Latitude(s) at which the Mercator projection intersects the Earth
# (Latitude(s) where Di and Dj are specified)
signed[4] LaD : edition_specific,no_copy;
meta geography.LaDInDegrees scale(LaD,oneConstant,grib2divider,truncateDegrees) : dump;
# La2 - latitude of last grid point
signed[4] latitudeOfLastGridPoint : edition_specific,no_copy;
alias La2 = latitudeOfLastGridPoint;
meta geography.latitudeOfLastGridPointInDegrees scale(latitudeOfLastGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;
# Lo2 - longitude of last grid point
signed[4] longitudeOfLastGridPoint: edition_specific,no_copy ;
alias Lo2 = longitudeOfLastGridPoint;
meta geography.longitudeOfLastGridPointInDegrees scale(longitudeOfLastGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;

View File

@ -0,0 +1,8 @@
# Orientation of the grid, angle between i direction on the map and the equator
# NOTE 1: Limited to the range of 0 to 90 degrees; if the angle of orientation of the grid is neither 0 nor 90 degrees,
# Di and Dj must be equal to each other
unsigned[4] orientationOfTheGrid : dump ;
meta geography.orientationOfTheGridInDegrees
scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump;

View File

@ -0,0 +1,27 @@
# La1 - latitude of first grid point
signed[4] latitudeOfFirstGridPoint : edition_specific ;
meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;
alias La1 = latitudeOfFirstGridPoint;
# Lo1 - longitude of first grid point
unsigned[4] longitudeOfFirstGridPoint : edition_specific;
meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump;
alias Lo1 = longitudeOfFirstGridPoint;
# Resolution and component flag
# NOTE 1 NOT FOUND
flags[1] resolutionAndComponentFlag 'grib2/tables/[tablesVersion]/3.3.table' : dump;
# LaD - Latitude where Dx and Dy are specified
signed[4] LaD : edition_specific;
alias latitudeWhereDxAndDyAreSpecified=LaD;
meta geography.LaDInDegrees scale(LaD,oneConstant,grib2divider,truncateDegrees) : dump;
alias latitudeWhereDxAndDyAreSpecifiedInDegrees=LaDInDegrees;
# LoV - orientation of the grid
# NOTE 2 NOT FOUND
signed[4] orientationOfTheGrid : edition_specific;
alias LoV = orientationOfTheGrid ;
meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump;

View File

@ -0,0 +1,8 @@
# Projection centre flag
flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump;
# Note our flagbit numbers go from 7 to 0, while WMO convention is from 1 to 8
# If bit 1 is 0, then the North Pole is on the projection plane
# If bit 1 is 1, then the South Pole is on the projection plane
flagbit southPoleOnProjectionPlane(projectionCentreFlag,7) : dump; # WMO bit 1

View File

@ -0,0 +1,17 @@
# La1 - latitude of first grid point
signed[4] latitudeOfFirstGridPoint : edition_specific;
alias La1 = latitudeOfFirstGridPoint;
meta geography.latitudeOfFirstGridPointInDegrees
scale(latitudeOfFirstGridPoint,one,grib2divider,truncateDegrees) : dump;
alias La1InDegrees=latitudeOfFirstGridPointInDegrees;
#meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPointInDegrees,oneConstant): no_copy;
# Lo1 - longitude of first grid point
unsigned[4] longitudeOfFirstGridPoint : edition_specific;
alias Lo1 = longitudeOfFirstGridPoint;
meta geography.longitudeOfFirstGridPointInDegrees
scale(longitudeOfFirstGridPoint,one,grib2divider,truncateDegrees) : dump;
alias Lo1InDegrees = longitudeOfFirstGridPointInDegrees;
#meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,oneConstant) : no_copy;

View File

@ -0,0 +1,10 @@
# LaD - Latitude where Dx and Dy are specified
signed[4] LaD : edition_specific ;
alias latitudeWhereDxAndDyAreSpecified=LaD;
meta geography.LaDInDegrees scale(LaD,one,grib2divider,truncateDegrees) : dump;
# LoV - Longitude of meridian parallel to Y-axis along which latitude increases as the Y-coordinate increases
unsigned[4] LoV : edition_specific;
meta geography.LoVInDegrees scale(LoV,one,grib2divider,truncateDegrees) : dump;

View File

@ -0,0 +1,4 @@
# Projection centre flag
flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump;

View File

@ -0,0 +1,21 @@
# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere
signed[4] Latin1 : edition_specific;
alias FirstLatitude=Latin1;
meta geography.Latin1InDegrees scale(Latin1,one,grib2divider,truncateDegrees) : dump;
# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere
signed[4] Latin2 : dump;
alias SecondLatitude=Latin2;
meta geography.Latin2InDegrees scale(Latin2,one,grib2divider,truncateDegrees) : dump;
# Latitude of the southern pole of projection
signed[4] latitudeOfSouthernPole : edition_specific;
alias latitudeOfTheSouthernPoleOfProjection=latitudeOfSouthernPole;
meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole ,one,grib2divider,truncateDegrees) : dump;
# Longitude of the southern pole of projection
unsigned[4] longitudeOfSouthernPole : edition_specific;
alias longitudeOfTheSouthernPoleOfProjection=longitudeOfSouthernPole;
meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfSouthernPole,oneConstant,grib2divider,truncateDegrees) : dump;

View File

@ -0,0 +1,12 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 3.33001, Lambert conformal for limited area models
include "grib2/template.3.30.def"
include "grib2/template.3.lam.def"

View File

@ -0,0 +1,13 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 3.33002, Mercator for limited area models
include "grib2/template.3.10.def"
include "grib2/template.3.lam.def"

View File

@ -0,0 +1,12 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 3.33003, Polar stereographic projection for limited area models
include "grib2/template.3.20.def"
include "grib2/template.3.lam.def"

View File

@ -0,0 +1,30 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 3.33010, BiFourier coefficients on lambert projection
transient biFourierMakeTemplate = 0;
include "grib2/template.3.bf.part1.def"
include "grib2/template.3.shape_of_the_earth.def";
include "grib2/template.3.bf.part2.def"
include "grib2/template.3.30.part1.def"
include "grib2/template.3.30.part2.def"
include "grib2/template.3.bf.part3.def"
include "grib2/template.3.30.part3.def"
include "grib2/template.3.30.part4.def"

View File

@ -0,0 +1,28 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 3.33011, Bi-Fourier coefficients on Mercator projection
transient biFourierMakeTemplate = 0;
include "grib2/template.3.shape_of_the_earth.def";
include "grib2/template.3.bf.part1.def"
include "grib2/template.3.10.part1.def"
include "grib2/template.3.10.part2.def"
include "grib2/template.3.10.part3.def"
include "grib2/template.3.bf.part2.def"
include "grib2/template.3.bf.part3.def"
# END 2/template.3.33011 ----------------------------------------------------------------------

View File

@ -0,0 +1,29 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 3.33012, Bi-Fourier coefficients on polar stereographic projection
transient biFourierMakeTemplate = 0;
include "grib2/template.3.shape_of_the_earth.def";
transient oneThousand=1000;
include "grib2/template.3.bf.part1.def"
include "grib2/template.3.20.part1.def"
include "grib2/template.3.bf.part2.def"
include "grib2/template.3.20.part2.def"
include "grib2/template.3.bf.part3.def"
# END 2/template.3.33012 ----------------------------------------------------------------------

View File

@ -0,0 +1,7 @@
label "BiFourier coefficients";
constant biFourierCoefficients=1;
codetable[1] spectralType ('3.6.table',masterDir,localDir) = 99 : no_copy;
alias spectralDataRepresentationType=spectralType;

View File

@ -0,0 +1,7 @@
unsigned[4] biFourierResolutionParameterN : dump;
unsigned[4] biFourierResolutionParameterM : dump;
codetable[1] biFourierTruncationType ('3.99.table',masterDir,localDir) : dump;

View File

@ -0,0 +1,22 @@
# Lx - Full domain length in X-direction
unsigned[8] Lx;
meta geography.LxInMetres scale(Lx,one,thousand) : dump;
# Lux - Useful domain length in X-direction
unsigned[8] Lux;
meta geography.LuxInMetres scale(Lux,one,thousand) : dump;
# Lcx - Coupling domain width in X-direction
unsigned[8] Lcx;
meta geography.LcxInMetres scale(Lcx,one,thousand) : dump;
# Ly - Full domain length in Y-direction
unsigned[8] Ly;
meta geography.LyInMetres scale(Ly,one,thousand) : dump;
# Luy - Useful domain length in Y-direction
unsigned[8] Luy;
meta geography.LuyInMetres scale(Luy,one,thousand) : dump;
# Lcy - Coupling domain width in Y-direction
unsigned[8] Lcy;
meta geography.LcyInMetres scale(Lcy,one,thousand) : dump;

View File

@ -0,0 +1,13 @@
unsigned[4] Nux : dump;
alias numberOfUsefulPointsAlongXAxis = Nux;
unsigned[4] Ncx : dump;
alias numberOfPointsAlongXAxisInCouplingArea = Ncx;
unsigned[4] Nuy : dump;
alias numberOfUsefulPointsAlongYAxis = Nuy;
unsigned[4] Ncy : dump;
alias numberOfPointsAlongYAxisInCouplingArea = Ncy;

View File

@ -0,0 +1,37 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 5.60000, BiFourier coefficients data - complex packing
include "grib2/template.5.packing.def";
transient computeLaplacianOperator=1 : hidden;
codetable[1] biFourierSubTruncationType ('3.99.table',masterDir,localDir) : dump;
unsigned[1] biFourierDoNotPackAxes = 0 : dump;
meta _numberOfValues bifourier_truncation(I,J,numberOfValues): read_only;
constant laplacianScalingFactorUnset = -2147483647;
signed[4] laplacianScalingFactor : edition_specific ;
meta data.laplacianOperator scale(laplacianScalingFactor,one,million,truncateLaplacian) ;
meta laplacianOperatorIsSet evaluate(laplacianScalingFactor != laplacianScalingFactorUnset && !computeLaplacianOperator);
unsigned[2] biFourierResolutionSubSetParameterN ;
unsigned[2] biFourierResolutionSubSetParameterM ;
# This is read_only until we support other values
codetable[1] unpackedSubsetPrecision ('5.7.table',masterDir,localDir) = 1 : dump;
alias precisionOfTheUnpackedSubset=unpackedSubsetPrecision;

View File

@ -0,0 +1,55 @@
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
# TEMPLATE 7.60000, BiFourier coefficients - complex packing
constant biFourierCoefficients = 1;
constant complexPacking = 1;
meta codedValues data_g2bifourier_packing(
section7Length,
offsetBeforeData,
offsetSection7,
unitsFactor,
unitsBias,
changingPrecision,
numberOfValues,
bitsPerValue,
referenceValue,
binaryScaleFactor,
decimalScaleFactor,
optimizeScaleFactor,
unpackedSubsetPrecision,
laplacianOperatorIsSet,
laplacianOperator,
biFourierTruncationType,
biFourierResolutionSubSetParameterN,
biFourierResolutionSubSetParameterM,
biFourierResolutionParameterN,
biFourierResolutionParameterM,
biFourierSubTruncationType,
biFourierDoNotPackAxes,
biFourierMakeTemplate,
numberOfValues
): read_only;
meta values data_apply_bitmap(codedValues,
bitmap,
missingValue,
binaryScaleFactor,
numberOfDataPoints,
numberOfValues) : dump;

Binary file not shown.

View File

@ -0,0 +1,193 @@
/*
* Copyright 2005-2015 ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/**************************************
* Enrico Fucile
**************************************/
#include "grib_api_internal.h"
/*
This is used by make_class.pl
START_CLASS_DEF
CLASS = accessor
SUPER = grib_accessor_class_long
IMPLEMENTS = unpack_long
IMPLEMENTS = init
MEMBERS=const char* J
MEMBERS=const char* K
MEMBERS=const char* M
MEMBERS=const char* T
END_CLASS_DEF
*/
/* START_CLASS_IMP */
/*
Don't edit anything between START_CLASS_IMP and END_CLASS_IMP
Instead edit values between START_CLASS_DEF and END_CLASS_DEF
or edit "accessor.class" and rerun ./make_class.pl
*/
static int unpack_long(grib_accessor*, long* val,size_t *len);
static void init(grib_accessor*,const long, grib_arguments* );
static void init_class(grib_accessor_class*);
typedef struct grib_accessor_bifourier_truncation {
grib_accessor att;
/* Members defined in gen */
/* Members defined in long */
/* Members defined in bifourier_truncation */
const char* I;
const char* J;
const char* T;
} grib_accessor_bifourier_truncation;
extern grib_accessor_class* grib_accessor_class_long;
static grib_accessor_class _grib_accessor_class_bifourier_truncation = {
&grib_accessor_class_long, /* super */
"bifourier_truncation", /* name */
sizeof(grib_accessor_bifourier_truncation), /* size */
0, /* inited */
&init_class, /* init_class */
&init, /* init */
0, /* post_init */
0, /* free mem */
0, /* describes himself */
0, /* get length of section */
0, /* get length of string */
0, /* get number of values */
0, /* get number of bytes */
0, /* get offset to bytes */
0, /* get native type */
0, /* get sub_section */
0, /* grib_pack procedures long */
0, /* grib_pack procedures long */
0, /* grib_pack procedures long */
&unpack_long, /* grib_unpack procedures long */
0, /* grib_pack procedures double */
0, /* grib_unpack procedures double */
0, /* grib_pack procedures string */
0, /* grib_unpack procedures string */
0, /* grib_pack procedures bytes */
0, /* grib_unpack procedures bytes */
0, /* pack_expression */
0, /* notify_change */
0, /* update_size */
0, /* preferred_size */
0, /* resize */
0, /* nearest_smaller_value */
0, /* next accessor */
0, /* compare vs. another accessor */
0, /* unpack only ith value */
0, /* unpack a subarray */
0, /* clear */
};
grib_accessor_class* grib_accessor_class_bifourier_truncation = &_grib_accessor_class_bifourier_truncation;
static void init_class(grib_accessor_class* c)
{
c->dump = (*(c->super))->dump;
c->next_offset = (*(c->super))->next_offset;
c->string_length = (*(c->super))->string_length;
c->value_count = (*(c->super))->value_count;
c->byte_count = (*(c->super))->byte_count;
c->byte_offset = (*(c->super))->byte_offset;
c->get_native_type = (*(c->super))->get_native_type;
c->sub_section = (*(c->super))->sub_section;
c->pack_missing = (*(c->super))->pack_missing;
c->is_missing = (*(c->super))->is_missing;
c->pack_long = (*(c->super))->pack_long;
c->pack_double = (*(c->super))->pack_double;
c->unpack_double = (*(c->super))->unpack_double;
c->pack_string = (*(c->super))->pack_string;
c->unpack_string = (*(c->super))->unpack_string;
c->pack_bytes = (*(c->super))->pack_bytes;
c->unpack_bytes = (*(c->super))->unpack_bytes;
c->pack_expression = (*(c->super))->pack_expression;
c->notify_change = (*(c->super))->notify_change;
c->update_size = (*(c->super))->update_size;
c->preferred_size = (*(c->super))->preferred_size;
c->resize = (*(c->super))->resize;
c->nearest_smaller_value = (*(c->super))->nearest_smaller_value;
c->next = (*(c->super))->next;
c->compare = (*(c->super))->compare;
c->unpack_double_element = (*(c->super))->unpack_double_element;
c->unpack_double_subarray = (*(c->super))->unpack_double_subarray;
c->clear = (*(c->super))->clear;
}
/* END_CLASS_IMP */
static void init(grib_accessor* a,const long l, grib_arguments* c)
{
grib_accessor_bifourier_truncation* self = (grib_accessor_bifourier_truncation*)a;
grib_handle* gh = grib_handle_of_accessor(a);
int n = 0;
self->I = grib_arguments_get_name(gh,c,n++);
self->J = grib_arguments_get_name(gh,c,n++);
self->T = grib_arguments_get_name(gh,c,n++);
a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY;
}
static int unpack_long (grib_accessor* a, long* val, size_t *len)
{
grib_handle* gh = grib_handle_of_accessor(a);
grib_accessor_bifourier_truncation* self = (grib_accessor_bifourier_truncation*)a;
int ret = 0;
long I,J,T,Tc;
if(*len < 1) return GRIB_ARRAY_TOO_SMALL;
if((ret = grib_get_long_internal(gh, self->I,&I))
!= GRIB_SUCCESS)
return ret;
if((ret = grib_get_long_internal(gh, self->J,&J))
!= GRIB_SUCCESS)
return ret;
Tc = I * J;
*val=Tc;
if((ret = grib_get_long_internal(gh, self->T,&T))
!= GRIB_SUCCESS) {
if (Tc == -1)
grib_context_log(gh->context, GRIB_LOG_ERROR,
"%s. BiFourier Truncation Type Unknown: %s=%d %s=%d \n",
a->name, self->I,I, self->J,J);
Tc=0;
grib_set_long(gh, self->T,Tc);
} else {
if (Tc != -1 && Tc != T ) grib_set_long(gh, self->T,Tc);
}
if (ret == GRIB_SUCCESS) *len = 1;
return ret;
}

View File

@ -0,0 +1,949 @@
/*
* Copyright 2005-2015 ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/********************************
* philippe.marguinaud@meteo.fr
*******************************/
#include "grib_api_internal.h"
#include "grib_accessor_class.h"
#include "grib_optimize_decimal_factor.h"
#include <math.h>
#include <stdlib.h>
/*
This is used by make_class.pl
START_CLASS_DEF
CLASS = accessor
SUPER = grib_accessor_class_data_simple_packing
IMPLEMENTS = init
IMPLEMENTS = unpack_double
IMPLEMENTS = unpack_double_element
IMPLEMENTS = unpack_double_subarray
IMPLEMENTS = pack_double
IMPLEMENTS = value_count
MEMBERS= const char* ieee_floats
MEMBERS= const char* laplacianOperatorIsSet
MEMBERS= const char* laplacianOperator
MEMBERS= const char* biFourierTruncationType
MEMBERS= const char* sub_i
MEMBERS= const char* sub_j
MEMBERS= const char* bif_i
MEMBERS= const char* bif_j
MEMBERS= const char* biFourierSubTruncationType
MEMBERS= const char* biFourierDoNotPackAxes
MEMBERS= const char* biFourierMakeTemplate
MEMBERS=const char* numberOfValues
END_CLASS_DEF
*/
/* START_CLASS_IMP */
/*
Don't edit anything between START_CLASS_IMP and END_CLASS_IMP
Instead edit values between START_CLASS_DEF and END_CLASS_DEF
or edit "accessor.class" and rerun ./make_class.pl
*/
static int pack_double(grib_accessor*, const double* val,size_t *len);
static int unpack_double(grib_accessor*, double* val,size_t *len);
static int value_count(grib_accessor*,long*);
static void init(grib_accessor*,const long, grib_arguments* );
static void init_class(grib_accessor_class*);
typedef struct grib_accessor_data_g2bifourier_packing {
grib_accessor att;
/* Members defined in gen */
/* Members defined in values */
int carg;
const char* seclen;
const char* offsetdata;
const char* offsetsection;
int dirty;
/* Members defined in data_simple_packing */
int edition;
const char* units_factor;
const char* units_bias;
const char* changing_precision;
const char* number_of_values;
const char* bits_per_value;
const char* reference_value;
const char* binary_scale_factor;
const char* decimal_scale_factor;
const char* optimize_scaling_factor;
/* Members defined in data_g2bifourier_packing */
const char* ieee_floats;
const char* laplacianOperatorIsSet;
const char* laplacianOperator;
const char* biFourierTruncationType;
const char* sub_i;
const char* sub_j;
const char* bif_i;
const char* bif_j;
const char* biFourierSubTruncationType;
const char* biFourierDoNotPackAxes;
const char* biFourierMakeTemplate;
const char* numberOfValues;
} grib_accessor_data_g2bifourier_packing;
extern grib_accessor_class* grib_accessor_class_values;
static grib_accessor_class _grib_accessor_class_data_g2bifourier_packing = {
&grib_accessor_class_data_simple_packing, /* super */
"data_g2bifourier_packing", /* name */
sizeof(grib_accessor_data_g2bifourier_packing), /* size */
0, /* inited */
&init_class, /* init_class */
&init, /* init */
0, /* post_init */
0, /* free mem */
0, /* describes himself */
0, /* get length of section */
0, /* get length of string */
&value_count, /* get number of values */
0, /* get number of bytes */
0, /* get offset to bytes */
0, /* get native type */
0, /* get sub_section */
0, /* grib_pack procedures long */
0, /* grib_pack procedures long */
0, /* grib_pack procedures long */
0, /* grib_unpack procedures long */
&pack_double, /* grib_pack procedures double */
&unpack_double, /* grib_unpack procedures double */
0, /* grib_pack procedures string */
0, /* grib_unpack procedures string */
0, /* grib_pack procedures bytes */
0, /* grib_unpack procedures bytes */
0, /* pack_expression */
0, /* notify_change */
0, /* update_size */
0, /* preferred_size */
0, /* resize */
0, /* nearest_smaller_value */
0, /* next accessor */
0, /* compare vs. another accessor */
0, /* unpack only ith value */
0, /* unpack a subarray */
0, /* clear */
};
grib_accessor_class* grib_accessor_class_data_g2bifourier_packing = &_grib_accessor_class_data_g2bifourier_packing;
typedef unsigned long (*encode_float_proc)(double);
typedef double (*decode_float_proc)(unsigned long);
static void init_class(grib_accessor_class* c)
{
c->dump = (*(c->super))->dump;
c->next_offset = (*(c->super))->next_offset;
c->string_length = (*(c->super))->string_length;
c->byte_count = (*(c->super))->byte_count;
c->byte_offset = (*(c->super))->byte_offset;
c->get_native_type = (*(c->super))->get_native_type;
c->sub_section = (*(c->super))->sub_section;
c->pack_missing = (*(c->super))->pack_missing;
c->is_missing = (*(c->super))->is_missing;
c->pack_long = (*(c->super))->pack_long;
c->unpack_long = (*(c->super))->unpack_long;
c->pack_string = (*(c->super))->pack_string;
c->unpack_string = (*(c->super))->unpack_string;
c->pack_bytes = (*(c->super))->pack_bytes;
c->unpack_bytes = (*(c->super))->unpack_bytes;
c->pack_expression = (*(c->super))->pack_expression;
c->notify_change = (*(c->super))->notify_change;
c->update_size = (*(c->super))->update_size;
c->preferred_size = (*(c->super))->preferred_size;
c->resize = (*(c->super))->resize;
c->nearest_smaller_value = (*(c->super))->nearest_smaller_value;
c->next = (*(c->super))->next;
c->compare = (*(c->super))->compare;
c->clear = (*(c->super))->clear;
}
/* END_CLASS_IMP */
static void init(grib_accessor* a,const long v, grib_arguments* args)
{
grib_accessor_data_g2bifourier_packing *self =(grib_accessor_data_g2bifourier_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
self->ieee_floats = grib_arguments_get_name(gh,args,self->carg++);
self->laplacianOperatorIsSet = grib_arguments_get_name(gh,args,self->carg++);
self->laplacianOperator = grib_arguments_get_name(gh,args,self->carg++);
self->biFourierTruncationType = grib_arguments_get_name(gh,args,self->carg++);
self->sub_i = grib_arguments_get_name(gh,args,self->carg++);
self->sub_j = grib_arguments_get_name(gh,args,self->carg++);
self->bif_i = grib_arguments_get_name(gh,args,self->carg++);
self->bif_j = grib_arguments_get_name(gh,args,self->carg++);
self->biFourierSubTruncationType = grib_arguments_get_name(gh,args,self->carg++);
self->biFourierDoNotPackAxes = grib_arguments_get_name(gh,args,self->carg++);
self->biFourierMakeTemplate = grib_arguments_get_name(gh,args,self->carg++);
self->numberOfValues = grib_arguments_get_name(gh,args,self->carg++);
a->flags |= GRIB_ACCESSOR_FLAG_DATA;
self->dirty=1;
}
static int value_count(grib_accessor* a,long* numberOfValues)
{
grib_accessor_data_g2bifourier_packing* self = (grib_accessor_data_g2bifourier_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
*numberOfValues=0;
return grib_get_long_internal(gh,self->numberOfValues,numberOfValues);
}
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#define MIN(x,y) ((x) < (y) ? (x) : (y))
static void ellipse (long ni, long nj, long itrunc[], long jtrunc[])
{
const double zeps = 1.E-10;
const double zauxil=0.;
int i, j;
double zi, zj;
/*
* 1. Computing meridional limit wavenumbers along zonal wavenumbers
*/
for (j = 1; j < nj; j++)
{
zi = (double)ni / (double)nj * sqrt (MAX (zauxil, (double)(nj * nj - j * j)));
itrunc[j] = (int)(zi + zeps);
}
if (nj == 0)
{
itrunc[0] = ni;
}
else
{
itrunc[0] = ni;
itrunc[nj] = 0;
}
/*
* 2. Computing zonal limit wavenumbers along meridional wavenumbers
*/
for (i = 1; i < ni; i++)
{
zj = (double)nj / (double)ni * sqrt (MAX (zauxil, (double)(ni * ni - i * i)));
jtrunc[i] = (int)(zj + zeps);
}
if (ni == 0)
{
jtrunc[0] = nj;
}
else
{
jtrunc[0] = nj;
jtrunc[ni] = 0;
}
}
static void rectangle (long ni, long nj, long itrunc[], long jtrunc[])
{
int i, j;
/*
* 1. Computing meridional limit wavenumbers along zonal wavenumbers
*/
for (j = 0; j <= nj; j++)
itrunc[j] = ni;
/*
* 2. Computing zonal limit wavenumbers along meridional wavenumbers
*/
for (i = 0; i <= ni; i++)
jtrunc[i] = nj;
}
static void diamond (long ni, long nj, long itrunc[], long jtrunc[])
{
int i, j;
for (j = 0; j <= nj; j++)
itrunc[j] = ni - (j * ni) / nj;
for (i = 0; i <= ni; i++)
jtrunc[i] = nj - (i * nj) / ni;
}
#define scals(i,j) pow((double)((i)*(i)+(j)*(j)),bt->laplacianOperator)
#define for_ij() \
for (j = 0; j <= bt->bif_j; j++) \
for (i = 0; i <= bt->itruncation_bif[j]; i++)
#define calc_insub() \
do { \
insub = (i <= bt->sub_i) && (j <= bt->sub_j); \
if (insub) \
insub = (i <= bt->itruncation_sub[j]) && (j <= bt->jtruncation_sub[i]); \
if (bt->keepaxes) \
insub = insub || (i == 0) || (j == 0); \
} while (0)
typedef struct bif_trunc_t
{
long bits_per_value;
long decimal_scale_factor;
long binary_scale_factor;
long ieee_floats;
long laplacianOperatorIsSet;
double laplacianOperator;
double reference_value;
long sub_i, sub_j, bif_i, bif_j;
long biFourierTruncationType;
long biFourierSubTruncationType;
long keepaxes;
long maketemplate;
decode_float_proc decode_float;
encode_float_proc encode_float;
int bytes;
long * itruncation_bif;
long * jtruncation_bif;
long * itruncation_sub;
long * jtruncation_sub;
size_t n_vals_bif, n_vals_sub;
} bif_trunc_t;
/*
* Total number of coefficients
*/
static size_t size_bif (bif_trunc_t * bt)
{
size_t n_vals = 0;
int j;
for (j = 0; j <= bt->bif_j; j++)
n_vals += 4 * (bt->itruncation_bif[j] + 1);
return n_vals;
}
/*
* Number of unpacked coefficients
*/
static size_t size_sub (bif_trunc_t * bt)
{
size_t n_vals = 0;
int i, j;
for_ij ()
{
int insub;
calc_insub ();
if (insub)
n_vals += 4;
}
return n_vals;
}
static
double laplam (bif_trunc_t * bt, const double val[])
{
/*
* For bi-Fourier spectral fields, the Laplacian operator is a multiplication by (i*i+j*j)
*/
const double zeps = 1E-15;
double * znorm = NULL, * zw = NULL;
int kmax = 1 + bt->bif_i * bt->bif_i + bt->bif_j * bt->bif_j, lmax;
int * itab1 = NULL, * itab2 = NULL;
int i, j, k, l, isp;
double zxmw, zymw, zwsum, zx, zy, zsum1, zsum2, zbeta1, zp;
itab1 = (int *)malloc (sizeof (int) * kmax);
itab2 = (int *)malloc (sizeof (int) * ((1 + bt->bif_i) * (1 + bt->bif_j)));
for (k = 0; k < kmax; k++)
itab1[k] = 0;
/*
* Keep record of the possible values of i**2+j**2 outside the non-packed truncation
*/
for_ij ()
{
int insub;
calc_insub ();
if (! insub)
{
int k = i*i+j*j;
itab1[k] = 1;
}
}
l = 0;
for (k = 0; k < kmax; k++)
if (itab1[k])
{
itab2[l] = k;
itab1[k] = l;
l++;
}
lmax = l;
/*
* Now, itab2 contains all possible values of i*i+j*j, and itab1 contains
* the rank of all i*i+j*j
*/
znorm = (double *)malloc (sizeof (double) * lmax);
zw = (double *)malloc (sizeof (double) * lmax);
/*
* Compute norms of input field, gathered by values of i**2+j**2; we have to
* go through the unpacked truncation again
*/
for (l = 0; l < lmax; l++)
znorm[l] = 0.;
isp = 0;
for_ij ()
{
int insub;
calc_insub ();
if (insub)
{
isp += 4;
}
else
{
int m, l = itab1[i*i+j*j];
for (m = 0; m < 4; m++, isp++)
znorm[l] = MAX (znorm[l], fabs (val[isp]));
}
}
/*
* Compute weights, fix very small norms to avoid problems with log function
*/
for (l = 0; l < lmax; l++)
{
zw[l] = (double)lmax / (double)(l + 1);
if (znorm[l] < zeps)
{
znorm[l] = zeps;
zw[l] = 100. * zeps;
}
}
/*
* Sum weights
*/
zxmw = 0.;
zymw = 0.;
zwsum = 0.;
for (l = 0; l < lmax; l++)
{
zx = log (itab2[l]);
zy = log (znorm[l]);
zxmw += zx * zw[l];
zymw += zy * zw[l];
zwsum += zw[l];
}
/*
* Least square regression
*/
zxmw = zxmw / zwsum;
zymw = zymw / zwsum;
zsum1 = 0.;
zsum2 = 0.;
for (l = 0; l < lmax; l++)
{
zx = log (itab2[l]);
zy = log (znorm[l]);
zsum1 += zw[l] * (zy - zymw) * (zx - zxmw);
zsum2 += zw[l] * (zx - zxmw) * (zx - zxmw);
}
zbeta1 = zsum1 / zsum2;
zp = -zbeta1;
zp = MAX (-9.999, MIN (9.999, zp));
free (itab1);
free (itab2);
free (znorm);
free (zw);
//zp = ((long)(zp * 1000.)) / 1000.; FAPULA rounds Laplacian power to 1/1000th
return zp;
}
static void free_bif_trunc (bif_trunc_t * bt, grib_accessor * a)
{
grib_handle* gh = grib_handle_of_accessor(a);
if (bt == NULL)
return;
if (bt->itruncation_bif != NULL) free (bt->itruncation_bif);
if (bt->jtruncation_bif != NULL) free (bt->jtruncation_bif);
if (bt->itruncation_sub != NULL) free (bt->itruncation_sub);
if (bt->jtruncation_sub != NULL) free (bt->jtruncation_sub);
memset (bt, 0, sizeof (bif_trunc_t));
grib_context_free (gh->context, bt);
}
static bif_trunc_t * new_bif_trunc (grib_accessor * a, grib_accessor_data_g2bifourier_packing * self)
{
int ret;
grib_handle* gh = grib_handle_of_accessor(a);
bif_trunc_t * bt = (bif_trunc_t *)grib_context_malloc (gh->context, sizeof (bif_trunc_t));
memset (bt, 0, sizeof (bif_trunc_t));
if ((ret = grib_get_double_internal (gh, self->reference_value, &bt->reference_value)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->bits_per_value, &bt->bits_per_value)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->binary_scale_factor, &bt->binary_scale_factor)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->decimal_scale_factor, &bt->decimal_scale_factor)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->ieee_floats, &bt->ieee_floats)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->laplacianOperatorIsSet, &bt->laplacianOperatorIsSet)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_double_internal (gh, self->laplacianOperator, &bt->laplacianOperator)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->sub_i, &bt->sub_i)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->sub_j, &bt->sub_j)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->bif_i, &bt->bif_i)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->bif_j, &bt->bif_j)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->biFourierTruncationType, &bt->biFourierTruncationType)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->biFourierSubTruncationType, &bt->biFourierSubTruncationType)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->biFourierDoNotPackAxes, &bt->keepaxes)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_get_long_internal (gh, self->biFourierMakeTemplate, &bt->maketemplate)) != GRIB_SUCCESS)
goto cleanup;
switch (bt->ieee_floats)
{
case 0:
bt->decode_float = grib_long_to_ibm;
bt->encode_float = grib_ibm_to_long;
bt->bytes = 4;
break;
case 1:
bt->decode_float = grib_long_to_ieee;
bt->encode_float = grib_ieee_to_long;
bt->bytes = 4;
break;
case 2:
bt->decode_float = grib_long_to_ieee64;
bt->encode_float = grib_ieee64_to_long;
bt->bytes = 8;
break;
default:
ret = GRIB_NOT_IMPLEMENTED;
goto cleanup;
}
bt->itruncation_sub = (long *)grib_context_malloc(gh->context, sizeof(long)*(1+bt->sub_j));
bt->jtruncation_sub = (long *)grib_context_malloc(gh->context, sizeof(long)*(1+bt->sub_i));
bt->itruncation_bif = (long *)grib_context_malloc(gh->context, sizeof(long)*(1+bt->bif_j));
bt->jtruncation_bif = (long *)grib_context_malloc(gh->context, sizeof(long)*(1+bt->bif_i));
switch (bt->biFourierTruncationType)
{
case 77: diamond (bt->bif_i, bt->bif_j, bt->itruncation_bif, bt->jtruncation_bif); break;
case 88: rectangle (bt->bif_i, bt->bif_j, bt->itruncation_bif, bt->jtruncation_bif); break;
case 99: ellipse (bt->bif_i, bt->bif_j, bt->itruncation_bif, bt->jtruncation_bif); break;
default:
ret = GRIB_INVALID_KEY_VALUE;
goto cleanup;
}
switch (bt->biFourierSubTruncationType)
{
case 77: diamond (bt->sub_i, bt->sub_j, bt->itruncation_sub, bt->jtruncation_sub); break;
case 88: rectangle (bt->sub_i, bt->sub_j, bt->itruncation_sub, bt->jtruncation_sub); break;
case 99: ellipse (bt->sub_i, bt->sub_j, bt->itruncation_sub, bt->jtruncation_sub); break;
default:
ret = GRIB_INVALID_KEY_VALUE;
goto cleanup;
}
bt->n_vals_bif = size_bif (bt);
bt->n_vals_sub = size_sub (bt);
return bt;
cleanup:
free_bif_trunc (bt, a);
return NULL;
}
static int unpack_double(grib_accessor* a, double* val, size_t *len) {
grib_accessor_data_g2bifourier_packing* self = (grib_accessor_data_g2bifourier_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
size_t n_vals_bif = 0;
size_t n_vals_sub;
unsigned char* buf = (unsigned char*)gh->buffer->data;
unsigned char* hres = NULL;
unsigned char* lres = NULL;
unsigned long packed_offset;
long hpos = 0;
long lpos = 0;
int isp;
bif_trunc_t * bt;
long count = 0;
long offsetdata = 0;
double s = 0;
double d = 0;
int ret = GRIB_SUCCESS;
int i, j, k;
if ((ret = grib_value_count (a, &count)) != GRIB_SUCCESS)
goto cleanup;
bt = new_bif_trunc (a, self);
if (bt == NULL)
{
ret = GRIB_INTERNAL_ERROR;
goto cleanup;
}
if (bt->n_vals_bif != count)
{
ret = GRIB_INTERNAL_ERROR;
goto cleanup;
}
if ((ret = grib_get_long_internal (gh, self->offsetdata, &offsetdata)) != GRIB_SUCCESS)
goto cleanup;
if (*len < bt->n_vals_bif)
{
*len = (long)bt->n_vals_bif;
ret = GRIB_ARRAY_TOO_SMALL;
goto cleanup;
}
self->dirty = 0;
buf = (unsigned char*)gh->buffer->data;
buf += grib_byte_offset (a);
s = grib_power (bt->binary_scale_factor, 2);
d = grib_power (-bt->decimal_scale_factor, 10);
/*
* Decode data
*/
hres = buf;
lres = buf;
packed_offset = grib_byte_offset (a) + bt->bytes * bt->n_vals_sub;
lpos = 8 * (packed_offset - offsetdata);
hpos = 0;
isp = 0;
for_ij ()
{
double current_val;
int insub;
calc_insub ();
if (insub)
for (k = 0; k < 4; k++)
{
val[isp+k] = bt->decode_float (grib_decode_unsigned_long (hres, &hpos, 8 * bt->bytes));
}
else
for (k = 0; k < 4; k++)
{
double S = scals (i, j);
long dec_val = grib_decode_unsigned_long (lres, &lpos, bt->bits_per_value);
val[isp+k] = (double)(((dec_val * s) + bt->reference_value) * d)/ S;
}
isp += 4;
}
Assert (*len >= isp);
*len = isp;
cleanup:
free_bif_trunc (bt, a);
return ret;
}
static int pack_double(grib_accessor* a, const double* val, size_t *len)
{
grib_accessor_data_g2bifourier_packing* self = (grib_accessor_data_g2bifourier_packing*)a;
grib_handle* gh = grib_handle_of_accessor(a);
size_t buflen = 0;
size_t hsize = 0;
size_t lsize = 0;
unsigned char* buf = NULL;
unsigned char* hres = NULL;
unsigned char* lres = NULL;
long hpos = 0;
long lpos = 0;
int isp;
bif_trunc_t * bt;
int last;
double max = 0;
double min = 0;
grib_context* c = gh->context;
int ret = GRIB_SUCCESS;
int i, j, k;
int minmax_set;
double d = 0., s = 0.;
if (*len == 0)
{
ret = GRIB_NO_VALUES;
goto cleanup;
}
bt = new_bif_trunc (a, self);
if (bt == NULL)
{
long makeTemplate = 0;
if ((ret = grib_get_long_internal (gh, self->biFourierMakeTemplate, &makeTemplate)) != GRIB_SUCCESS)
goto cleanup;
if (! makeTemplate)
{
ret = GRIB_INTERNAL_ERROR;
goto cleanup;
}
else
{
printf ("Assuming we are creating a template\n");
ret = GRIB_SUCCESS;
goto cleanup;
}
}
self->dirty = 1;
if (*len != bt->n_vals_bif)
{
grib_context_log(gh->context,GRIB_LOG_ERROR,"BIFOURIER_PACKING : wrong number of values, expected %d - got %d", bt->n_vals_bif, *len);
ret = GRIB_INTERNAL_ERROR;
goto cleanup;
}
if (! bt->laplacianOperatorIsSet)
{
bt->laplacianOperator = laplam (bt, val);
if ((ret = grib_set_double_internal (gh, self->laplacianOperator, bt->laplacianOperator)) != GRIB_SUCCESS)
goto cleanup;
grib_get_double_internal (gh, self->laplacianOperator, &bt->laplacianOperator);
}
/*
* Scan all values that will be truncated and find their minimum and maximum
*/
minmax_set = 0;
isp = 0;
for_ij ()
{
int insub;
calc_insub ();
if (! insub)
{
for (k = 0; k < 4; k++)
{
double current_val = val[isp+k] * scals (i, j);
if (! minmax_set)
{
min = current_val;
max = current_val;
minmax_set++;
}
if (current_val < min) min = current_val;
if (current_val > max) max = current_val;
}
}
isp += 4;
}
if (bt->n_vals_bif != bt->n_vals_sub)
{
ret = grib_optimize_decimal_factor (a, self->reference_value,
max, min, bt->bits_per_value, 0, 1,
&bt->decimal_scale_factor,
&bt->binary_scale_factor,
&bt->reference_value);
if (ret != GRIB_SUCCESS)
goto cleanup;
s = grib_power (-bt->binary_scale_factor, 2);
d = grib_power (+bt->decimal_scale_factor, 10);
}
else
{
bt->decimal_scale_factor = 0;
bt->binary_scale_factor = 0;
bt->reference_value = 0.;
}
/*
* Encode values
*/
hsize = bt->bytes * bt->n_vals_sub;
lsize = ((bt->n_vals_bif - bt->n_vals_sub) * bt->bits_per_value) / 8;
buflen = hsize + lsize;
buf = (unsigned char*)grib_context_malloc (gh->context, buflen);
hres = buf;
lres = buf + hsize;
lpos = 0;
hpos = 0;
isp = 0;
for_ij ()
{
double current_val;
int insub;
calc_insub ();
if (insub)
for (k = 0; k < 4; k++)
{
current_val = val[isp+k];
grib_encode_unsigned_long (hres, bt->encode_float (current_val) , &hpos, 8 * bt->bytes);
}
else
for (k = 0; k < 4; k++)
{
double S = scals (i, j);
current_val = (((((val[isp+k] * d) * S) - bt->reference_value) * s) + 0.5);
if (current_val < 0)
grib_context_log (gh->context, GRIB_LOG_ERROR, "BIFOURIER_PACKING : negative coput before packing (%g)", current_val);
if (bt->bits_per_value % 8)
grib_encode_unsigned_longb (lres, current_val, &lpos, bt->bits_per_value);
else
grib_encode_unsigned_long (lres, current_val, &lpos, bt->bits_per_value);
}
isp += 4;
}
if (((hpos / 8) != hsize) && ((lpos / 8) != lsize))
{
grib_context_log (gh->context, GRIB_LOG_ERROR, "BIFOURIER_PACKING : Mismatch in packing between high resolution and low resolution part");
ret = GRIB_INTERNAL_ERROR;
goto cleanup;
}
buflen = ((hpos + lpos)/8);
if ((ret = grib_set_double_internal (gh, self->reference_value, bt->reference_value)) != GRIB_SUCCESS)
goto cleanup;
{
/* Make sure we can decode it again */
double ref = 1e-100;
grib_get_double_internal (gh,self->reference_value,&ref);
Assert (ref == bt->reference_value);
}
if ((ret = grib_set_long_internal (gh, self->binary_scale_factor, bt->binary_scale_factor)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_set_long_internal (gh, self->decimal_scale_factor, bt->decimal_scale_factor)) != GRIB_SUCCESS)
goto cleanup;
grib_buffer_replace (a, buf, buflen, 1, 1);
if ((ret = grib_set_long_internal (gh, self->numberOfValues, bt->n_vals_bif)) != GRIB_SUCCESS)
goto cleanup;
cleanup:
free_bif_trunc (bt, a);
if (buf != NULL)
grib_context_free (gh->context, buf);
return ret;
}

View File

@ -0,0 +1,216 @@
#include "grib_api_internal.h"
#include "grib_optimize_decimal_factor.h"
#include <math.h>
#include <values.h>
#include <string.h>
#include <stdlib.h>
double epsilon ()
{
volatile double e = 1.;
while (1. != (1. + e))
{
e /= 2;
}
return e;
}
static int range ()
{
return (int)(log (DBL_MAX) / log (10))-1;
}
static void factec (int * krep, const double pa, const int knbit, const long kdec, const int range, long * ke, int * knutil)
{
*krep = 0;
*ke = 0;
*knutil = 0;
if (pa < DBL_MIN)
{
*knutil = 1;
goto end;
}
if ((fabs (log10 (fabs (pa)) + (double)kdec) >= range))
{
*krep = 1;
goto end;
}
/* Binary scale factor associated to kdec */
*ke = floor (log2 ((pa * grib_power (kdec, 10)) / (grib_power (knbit, 2) - 0.5))) + 1;
/* Encoded value for pa = max - min */
*knutil = floor (0.5 + pa * grib_power ( kdec, 10) * grib_power (-*ke, 2));
end:
return;
}
int grib_optimize_decimal_factor (grib_accessor * a, const char * reference_value,
const double pmax, const double pmin, const int knbit,
const int compat_gribex, const int compat_32bit,
long * kdec, long * kbin, double * ref)
{
grib_handle* gh = grib_handle_of_accessor(a);
int idecmin = -15;
int idecmax = 5;
long inbint;
double xtinyr4, xhuger4, xnbint;
int inumax, inu, inutil;
long jdec, ie;
int irep;
int RANGE = range ();
double EPSILON = epsilon ();
double pa = pmax-pmin;
if (pa == 0)
{
*kdec = 0;
*kbin = 0;
*ref = 0.;
return GRIB_SUCCESS;
}
inumax = 0;
if (fabs (pa) <= EPSILON)
{
*kdec = 0;
idecmin = 1;
idecmax = 0;
}
else if (pmin != 0. && fabs (pmin) < EPSILON)
{
*kdec = 0;
idecmin = 1;
idecmax = 0;
}
xtinyr4 = FLT_MIN;
xhuger4 = FLT_MAX;
inbint = grib_power (knbit, 2) - 1;
xnbint = (double)inbint;
/* Test decimal scale factors; keep the most suitable */
for (jdec = idecmin; jdec <= idecmax; jdec++)
{
/* Fix a problem in GRIBEX */
if (compat_gribex)
if (pa * grib_power (jdec, 10) <= 1.E-12)
continue;
/* Check it will be possible to decode reference value with 32bit floats */
if (compat_32bit)
if (fabs (pmin) > DBL_MIN)
if (log10 (fabs (pmin)) + (double)jdec <= log10 (xtinyr4))
continue;
/* Check if encoding will not cause an overflow */
if (fabs (log10 (fabs (pa)) + (double)jdec) >= (double)RANGE)
continue;
factec (&irep, pa, knbit, jdec, RANGE, &ie, &inutil);
if (irep != 0)
continue;
/* Check it will be possible to decode the maximum value of the fields using 32bit floats */
if (compat_32bit)
if (pmin * grib_power (jdec, 10) + xnbint * grib_power (ie, 2) >= xhuger4)
continue;
/* GRIB1 demands that the binary scale factor be encoded in a single byte */
if (compat_gribex)
if ((ie < -126) || (ie > 127))
continue;
if (inutil > inumax)
{
inumax = inutil;
*kdec = jdec;
*kbin = ie;
}
}
if (inumax > 0)
{
double decimal = grib_power (+*kdec, 10);
double divisor = grib_power (-*kbin, 2);
double min = pmin * decimal;
if (grib_get_nearest_smaller_value (gh, reference_value, min, ref) != GRIB_SUCCESS)
{
grib_context_log (gh->context, GRIB_LOG_ERROR,
"unable to find nearest_smaller_value of %g for %s", min, reference_value);
return GRIB_INTERNAL_ERROR;
}
long vmax = (((pmax*decimal)-*ref)*divisor) + 0.5;
long vmin = (((pmin*decimal)-*ref)*divisor) + 0.5;
/* This may happen if pmin*decimal-*ref is too large */
if ((vmin != 0) || (vmax > inbint))
inumax = 0;
}
/* If seeking for an optimal decimal scale factor fails, fall back to a basic method */
if (inumax == 0)
{
int last = compat_gribex ? 99 : 127;
double min = pmin, max = pmax;
double range = max - min;
double f = grib_power (knbit, 2) - 1;
double minrange = grib_power (-last, 2) * f;
double maxrange = grib_power (+last, 2) * f;
double decimal = 1;
int err;
*kdec = 0;
while (range < minrange)
{
*kdec += 1;
decimal *= 10;
min = pmin * decimal;
max = pmax * decimal;
range = max - min;
}
while (range > maxrange)
{
*kdec -= 1;
decimal /= 10;
min = pmin * decimal;
max = pmax * decimal;
range = max - min;
}
if (grib_get_nearest_smaller_value (gh, reference_value, min, ref) != GRIB_SUCCESS)
{
grib_context_log (gh->context, GRIB_LOG_ERROR,
"unable to find nearest_smaller_value of %g for %s", min, reference_value);
return GRIB_INTERNAL_ERROR;
}
*kbin = grib_get_binary_scale_fact (max, *ref, knbit, &err);
if (err == GRIB_UNDERFLOW)
{
*kbin = 0;
*kdec = 0;
*ref = 0;
}
}
return GRIB_SUCCESS;
}

View File

@ -0,0 +1,14 @@
#ifndef _GRIB_OPTIMIZE_DECIMAL_FACTOR_H
#define _GRIB_OPTIMIZE_DECIMAL_FACTOR_H
#include "grib_api_internal.h"
int grib_optimize_decimal_factor (grib_accessor * a, const char * reference_value,
const double pmax, const double pmin, const int knbit,
const int compat_gribex, const int compat_32bit,
long * kdec, long * kbin, double * ref);
int grib_use_optimized_decimal_factor ();
#endif

681
tests/lam_bf.c Normal file
View File

@ -0,0 +1,681 @@
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "grib_api.h"
/*
* Test encoding of LAM spectral fields
* philippe.marguinaud@meteo.fr, 02/2016
*/
static double values[] = {
2.75181294152902012e+02, 0.00000000000000000e+00, 0.00000000000000000e+00, 0.00000000000000000e+00, -2.00031443764104797e-02,
2.20986262423002011e-01, 0.00000000000000000e+00, 0.00000000000000000e+00, -6.50831583306859668e-02, 9.56915910153004201e-02,
0.00000000000000000e+00, 0.00000000000000000e+00, -7.69949998097087390e-02, 2.15126568901680588e-02, 0.00000000000000000e+00,
0.00000000000000000e+00, -2.15191777195716909e-02, -1.77751950764027111e-02, 0.00000000000000000e+00, 0.00000000000000000e+00,
-9.03325926869718264e-03, -6.45905357075528350e-03, 0.00000000000000000e+00, 0.00000000000000000e+00, 3.76554930890086407e-03,
4.28150996355022243e-03, 0.00000000000000000e+00, 0.00000000000000000e+00, -4.48334654946085272e-03, -3.24945933688448613e-03,
0.00000000000000000e+00, 0.00000000000000000e+00, -8.33958311735325322e-03, 2.67394757861415906e-03, 0.00000000000000000e+00,
0.00000000000000000e+00, -2.88928782235351811e-03, 1.11276030204927202e-02, 0.00000000000000000e+00, 0.00000000000000000e+00,
-6.89744178202101980e-03, 1.68577225483147806e-03, 0.00000000000000000e+00, 0.00000000000000000e+00, -4.05911636160587782e-03,
-8.63040459605283984e-04, 0.00000000000000000e+00, 0.00000000000000000e+00, 1.77788775751947913e-03, 1.62646256200294588e-03,
0.00000000000000000e+00, 0.00000000000000000e+00, -2.34489308196387896e-04, 6.26464829859012945e-03, 0.00000000000000000e+00,
0.00000000000000000e+00, -1.52923310566158415e-03, 3.51952946092800104e-03, 0.00000000000000000e+00, 0.00000000000000000e+00,
-2.12456107651320296e-03, 7.80855898848169944e-04, 0.00000000000000000e+00, 0.00000000000000000e+00, -1.03218475301503098e-03,
-4.84939736793421616e-05, 0.00000000000000000e+00, 0.00000000000000000e+00, -1.27050726547289815e-03, 6.10515922008610795e-04,
0.00000000000000000e+00, 0.00000000000000000e+00, -4.61636562893467212e-04, 3.78318476621734151e-04, 0.00000000000000000e+00,
0.00000000000000000e+00, -1.90620242437837724e-04, 2.39481618132839210e-03, 0.00000000000000000e+00, 0.00000000000000000e+00,
-1.47687884032438608e-03, 2.42544367345591408e-03, 0.00000000000000000e+00, 0.00000000000000000e+00, -2.46192219258621788e-03,
2.46579511004843988e-04, 0.00000000000000000e+00, 0.00000000000000000e+00, -1.50607540488831206e-03, -3.75857847911556075e-04,
0.00000000000000000e+00, 0.00000000000000000e+00, -7.25805584180000754e-04, 9.78641239992627046e-05, 0.00000000000000000e+00,
0.00000000000000000e+00, -7.80340606647248088e-04, 8.75931120319022039e-04, 0.00000000000000000e+00, 0.00000000000000000e+00,
-1.47851165924441194e-03, 1.17811049164095192e-03, 0.00000000000000000e+00, 0.00000000000000000e+00, -2.08460733839155700e-03,
6.42619155220282463e-04, 0.00000000000000000e+00, 0.00000000000000000e+00, -1.86653178182583090e-03, -1.51572352026370312e-04,
0.00000000000000000e+00, 0.00000000000000000e+00, -1.07549275530616001e-03, -4.44853427976503511e-04, 0.00000000000000000e+00,
0.00000000000000000e+00, -6.33166214776187397e-04, 1.77518665839971507e-05, 0.00000000000000000e+00, 0.00000000000000000e+00,
-7.92028302924727146e-04, 4.38426731572627625e-04, 0.00000000000000000e+00, 0.00000000000000000e+00, -1.36111299097537602e-03,
3.55302636498244784e-04, 0.00000000000000000e+00, 0.00000000000000000e+00, 4.31165906519952527e-02, 0.00000000000000000e+00,
3.80339924146994024e-01, 0.00000000000000000e+00, -6.26107842259959399e-03, 1.64616708332782904e-03, 7.15529452992990245e-03,
-1.86210941905016296e-02, 5.36772367761992244e-03, -3.37215608643290496e-03, -6.27927374167897446e-03, 1.59410804744731308e-02,
-1.10370818380311399e-02, -6.84039900395983468e-04, -7.35117541436946381e-03, -4.87635242059330717e-03, -7.33706364752968569e-03,
6.58538980656067294e-03, -6.56001297130070615e-03, 2.39042653237417005e-04, 4.18393771850396725e-04, -9.83382649555805503e-03,
-4.32676605363364018e-03, -1.10999673219588004e-02, -3.07797564052225605e-03, -2.83896250149829514e-03, 4.23882761382370337e-03,
-2.26439224781546308e-03, -2.32047257122214301e-03, -2.86523743964195400e-03, 1.16753700036647200e-03, -1.96688706621135590e-03,
-5.64532360297308362e-03, 3.86163113000431019e-03, -4.55210116404825178e-03, -2.31820675144046905e-03, -7.54930221713808131e-04,
5.42645956136695879e-03, -1.37359456800822195e-04, -1.41701530146446709e-03, -7.24047803220819299e-04, 2.97282693804422219e-03,
-9.21178724545542739e-04, 2.17304781678062013e-03, 5.02933596226693130e-03, 4.19709065989953400e-04, -2.32808772095879088e-03,
-3.96816140679685759e-04, 1.66528807434054306e-03, -4.34672804984864508e-04, 6.71774253284030125e-04, -9.64395020788669558e-04,
5.60151148527374262e-04, -2.54932855784003589e-03, 2.20163163376581403e-03, 9.04215953722457551e-04, 1.20823533199773401e-04,
-2.59868122477286410e-04, -1.65945495141917997e-04, 1.46538996917019689e-03, -1.68476757946802304e-03, 1.07540452680088500e-05,
5.87513082394260696e-04, -1.24863532530485998e-03, -3.40155704130869251e-04, 5.06914392022354376e-04, 3.59174751231139280e-04,
-6.95434364128791230e-04, 5.31028293884702393e-04, -4.85338794987818855e-05, 9.80353244783757497e-04, -2.73784354447844888e-04,
6.75383024029988280e-04, -5.75995357037249419e-04, 1.90931744053672494e-04, 4.24537699070617045e-04, -4.71947030265784521e-04,
-4.46465504992567892e-04, 3.33337956522936497e-04, -1.27617452248717108e-04, -8.67351806263058525e-05, 1.84741230040785993e-04,
2.68168590454641613e-04, -1.31760079895587510e-05, -1.96141696634310206e-04, 3.15977777045840907e-05, 5.52964000678949098e-05,
-5.68648317683832915e-05, -1.24618526993470704e-04, -1.64319991484120808e-04, 9.90021761468646032e-05, -2.89641341863940680e-04,
1.55648200162975805e-04, -1.61276662168002686e-04, 3.37883315497318677e-04, -3.00041726450727992e-04, 2.26196161548845496e-04,
1.04382192438164800e-04, 4.50994722382257825e-04, -9.02537135361254129e-05, 5.64332474405111417e-05, 2.40936093599355207e-04,
2.94628358869333785e-04, 9.40238863724802596e-05, -1.25490327018252206e-04, 1.13999493763013607e-04, 9.90868525905299344e-05,
2.79939342717346504e-05, -1.21103070944854899e-04, -9.78183419047561525e-05, 7.97907489358191165e-05, -1.56274876625488320e-04,
6.91110956986578159e-05, -1.78274579094107812e-04, 2.35172712320294510e-04, -1.86487667645096914e-04, 1.81359168243560220e-04,
-8.28267034951306894e-05, 3.64422258672049697e-04, -6.00161449209830129e-05, 1.53669854000615012e-04, 5.33940976909759048e-05,
2.71098832854533114e-04, 1.16978179717633208e-04, -7.04014134697032723e-02, 0.00000000000000000e+00, 9.62756934345549015e-02,
0.00000000000000000e+00, -5.01308988644840123e-02, 1.90874724562156602e-02, -2.80953874485262711e-02, 9.94764679201346272e-03,
-2.78516472981488912e-02, -3.06618517103302880e-02, 7.58078492851659708e-03, -4.18797526833174401e-03, -9.28131704978618285e-03,
-1.46423285050521004e-02, -1.12982430235375603e-02, -4.45163187034482329e-03, -8.86607378544559607e-04, -1.37678041188198305e-02,
-3.04744522425032726e-03, 1.40705206691586690e-02, 4.92736702444518219e-03, -5.90514134511184539e-03, -4.54964421596467609e-03,
-8.39159774589658125e-03, -4.46148003495234514e-03, -1.62058199127339503e-03, 5.61408022308887422e-03, 4.49055900394370114e-03,
-1.82071051913615303e-03, -4.09318011341107141e-03, -4.97865560096572360e-03, -3.90714411692000101e-03, -2.72428801010754702e-04,
3.29022970106107040e-05, -3.71301533763268490e-03, 3.48487792329992983e-04, 1.15959669498262694e-03, 4.98979531764007374e-04,
7.26403024471391199e-04, 1.64864318070091407e-03, 5.15149461852990758e-04, -1.86307159089303892e-03, 1.07464821641563204e-03,
1.93916722418667302e-03, 1.78527114422754305e-03, -3.69908045453888525e-03, 1.35978350637315200e-03, 1.97378490377768823e-03,
-1.12077965666117305e-03, 1.89400552511022986e-03, 1.34901499797743002e-03, -7.17376936946564751e-04, 3.77336189237397162e-04,
-8.49455521901115469e-04, 1.76458772526797607e-03, -1.34910889239185107e-03, -8.88652895477685142e-04, -1.56500185302029806e-04,
-8.76093972833636445e-04, -2.00964500803350399e-03, 1.58208594440964988e-03, -4.99776272008587265e-04, 9.21092504090277532e-04,
-9.50973675462412054e-04, 9.34360703323434722e-04, 1.13569489093607798e-03, -2.35584557310445026e-04, -4.38069769484956937e-05,
3.24577435798492555e-04, -1.25354645423132001e-03, 2.23682595620860417e-04, 3.66036513139383663e-04, 1.40216714894795505e-03,
2.27750709584358922e-05, -1.93328972751045800e-04, 2.02025568799330516e-04, -2.74656452169796581e-04, -7.13136078966307191e-04,
-7.74076812485903487e-04, -1.02274882001159593e-03, 5.52829074765155888e-04, -3.68749942830809982e-04, 5.23471145957211991e-04,
-5.11988764810234896e-04, 6.02265891061533310e-04, -2.11327004479523907e-04, 6.41691954883075503e-04, -2.93053466696699415e-05,
5.44704761041802841e-04, -5.66628145474610301e-05, 3.06917641025358854e-04, 2.85907713552362608e-04, 3.77388927634152475e-04,
-3.77819009899353793e-05, -7.23439228551873374e-05, 9.85771074035036001e-05, 3.21327432771281263e-04, -1.59908157634313996e-04,
-6.09095752283840726e-05, -2.76136058709174526e-04, 3.87616442158483353e-04, -2.26542483972600318e-04, 2.54495029230095593e-04,
-4.53136334566828323e-04, 4.85440002953321521e-04, -1.62296622208713188e-04, 5.57461157340177543e-04, -2.18109633528073014e-04,
4.40938655580095133e-04, -2.50802656486350106e-05, 4.94156181908487774e-04, 1.46912930391045014e-04, 3.39995298139647573e-04,
2.31575644258876931e-05, 1.27693888311369109e-04, 2.66757357090615819e-04, 2.81659456088537022e-04, -1.77008256058765415e-05,
-5.59528798333871517e-05, 8.03605031599087131e-05, 2.85552901830860538e-04, -4.53068755612621334e-05, 1.02695668114354909e-05,
-9.52364495838409209e-05, -5.81103624210425537e-02, 0.00000000000000000e+00, -6.11613220936809646e-03, 0.00000000000000000e+00,
4.43140816018786771e-03, -2.60999931564933826e-03, -9.40668310127974576e-03, -1.48661226497603313e-02, -1.36502130860806405e-02,
-2.14796277886411605e-02, -4.29520125994365363e-03, -1.26923474000257205e-02, -7.86135852771467636e-03, 1.28725912652949892e-03,
-6.82233374677557874e-03, 4.39686715387468952e-03, 1.82006684281001488e-03, 1.49296576633828294e-03, -1.98801597839639611e-03,
1.62071513114028917e-03, 5.34277138633573300e-03, 2.01625340607174391e-03, 4.65092297717760190e-03, -4.98019846270408330e-03,
-8.09160267604481370e-03, 3.44643931971669272e-04, -5.89232406165003143e-03, 2.42334465848842917e-03, -8.80352946027558960e-04,
9.84336007576140171e-04, -7.45770687978821595e-03, 4.75822395048473845e-05, 1.47566490371992703e-04, 5.47124159393165554e-03,
1.21021033478159695e-03, 9.69205973697771176e-04, 2.87549817812144098e-03, -3.61852844247361654e-04, 6.44364669700349130e-04,
1.29877596456263100e-03, 9.38391522093622900e-04, -2.22314144452083603e-03, 3.10148815196359916e-03, 5.28716763746763570e-04,
8.26155935032032562e-04, 1.57427796494904104e-03, -7.38296066748109475e-04, 1.14662499560429709e-03, -8.33016875095013713e-04,
-1.55185739616535206e-03, 2.04015157270918393e-03, -9.48182790145658426e-04, -8.81430768705695989e-04, -1.79127396420232423e-04,
-1.10273859532507507e-03, 6.53764928387371141e-04, -7.73895587008780373e-04, 2.68077770038103081e-04, 6.51103785496301673e-04,
-2.71669965700574879e-03, -3.88256693905312568e-04, 7.85903560292053544e-04, 1.18648988600738399e-03, 2.73534309775586828e-04,
-1.60929713471156209e-04, 1.29735976231497405e-03, 1.37988749081522505e-03, -1.59601915859147411e-04, 4.72539428788721608e-04,
-1.63508530969875198e-04, -8.04497515605788580e-04, -5.60952219538972049e-04, 9.62352783411973291e-04, -3.25986940863303451e-04,
-6.62865052534385266e-04, 1.83077290521144301e-04, -6.67815027189929333e-04, -8.20763509623387072e-04, 5.50944728278969943e-04,
-9.18368507559945896e-05, -4.97262747933818947e-05, 1.44527740863390717e-05, 6.02268801895407160e-04, -6.90060856109303935e-04,
-6.61151667662298806e-05, 5.24607915693856908e-05, 8.71389161220942712e-04, -5.22209563697972917e-05, -8.81069372491589524e-05,
6.89674388639323560e-05, 4.89296492873659379e-04, 3.42949950767033190e-04, -1.04594279689411803e-04, 7.88048702858046301e-05,
-4.51080354005282619e-05, 1.92927499298747385e-04, -1.00799248168193510e-04, 8.42070445097134625e-05, -1.15456876718276306e-04,
-3.52801267299761995e-04, -1.17385826010707806e-04, 6.41826840143688848e-05, 3.00430937194893165e-04, -5.88191734441591263e-04,
-9.60097825665722621e-05, 3.24876263135078137e-05, 6.81936922695665707e-04, -2.77700061014415391e-04, -8.20877129250762892e-05,
2.58047697700600437e-05, 6.00380468626232297e-04, 1.78126157739820522e-04, -8.91255866487739501e-05, 1.94618282851708810e-05,
1.70413830952822023e-04, 3.43572086262713874e-04, -7.77228636917948808e-05, -3.36010502648343538e-05, -9.07658016101573108e-05,
6.59277748270443569e-05, -3.98051260408716171e-05, -7.94909595164307867e-05, 7.05083701220457573e-06, -2.12150267214743503e-04,
-7.10752955220507326e-02, 0.00000000000000000e+00, -2.81525293764823895e-02, 0.00000000000000000e+00, -8.89502773245340675e-03,
3.66324267155502007e-03, -1.50462462993148395e-02, -2.63916495927209518e-03, -6.79652165859046149e-03, -1.65529453407753518e-02,
-1.78928182217595808e-02, -3.14303722891423219e-03, -7.11006250769349781e-03, 5.34684474246508237e-03, -1.16327476368806200e-02,
-8.05468546023600102e-03, -1.64149955851847803e-03, -5.35863352681676449e-03, 3.15321608325506422e-03, 6.26277160082160155e-04,
-7.27484684891808748e-03, 2.70646376760276911e-05, 3.62617414329000813e-03, -3.65054682510651410e-03, -1.07696110037195595e-03,
3.53182686525143003e-04, -3.38538738633310885e-03, -7.71206253588103529e-03, 2.05797839658368497e-03, -3.13248774975358191e-03,
-2.15184243056480489e-03, -3.10225639086903707e-03, -3.54796544314458281e-03, 5.24964106894207014e-03, -3.81132388565878430e-03,
1.24107114742582204e-03, 2.71419662078310015e-03, -3.13258905575883794e-03, -9.86678579803712151e-04, 4.35158904158106617e-03,
2.00811015548373484e-03, -2.44534593887737084e-04, 2.98862265427273909e-03, -2.36637278792602287e-03, 3.79010793951217370e-04,
-1.91817673989295003e-03, 2.40904857950564920e-03, -3.68671975810225518e-05, -7.50728259162286669e-04, -9.77411399558630834e-04,
1.12160681390244201e-03, -9.57618916404621382e-04, -8.44772814505887035e-04, 1.60262870617885501e-04, -5.95028162206373166e-04,
-2.17343777372838720e-03, 3.90627040005680354e-04, -4.03549139392471315e-04, 3.97904392302268501e-04, -3.35021587533471910e-05,
4.01596406318290207e-04, 6.19679429553130195e-04, -5.84235894305245641e-04, -6.29586561100089689e-04, 6.85720848834345492e-04,
-5.99546684685926617e-04, 6.48484311900055866e-04, 1.15749079052879009e-04, 5.89928032208336022e-04, 2.56662217500460083e-04,
5.35723750474414269e-04, -3.87102961262356411e-05, 3.59715192754469484e-04, -9.00619185516589576e-04, -3.38206174007513985e-04,
-9.06717141110745728e-04, -1.06691607710405902e-05, -5.73066630815214089e-04, 5.82183667967025014e-04, -6.19647103989654315e-04,
3.46608782632846157e-04, -3.19542958077236765e-04, 3.35326676850777677e-04, -1.19041590268576002e-04, 3.84807935714832959e-04,
-1.52580432572096801e-04, 2.88659162699535080e-04, -2.17457459774854719e-04, 3.15640030614073891e-04, -1.14589683204190809e-04,
3.56359089290164666e-04, -2.36086433127905303e-04, 2.57962183435875032e-04, -1.32919881425900210e-04, 4.21275854832142444e-04,
-1.68637918303468496e-04, 2.60132103423249507e-04, -1.76518696101003004e-04, 3.98510318978629783e-04, -5.55874927229614931e-05,
2.72262300197169426e-04, -1.54791064873725413e-04, 3.23912719054422868e-04, -3.97599407313694884e-05, 2.79412001537185026e-04,
-1.05419347221602004e-04, 2.74788768477940990e-04, -7.92444947406713388e-05, 2.69699801276835011e-04, -7.08821370313268408e-05,
2.98757387283285329e-04, -1.28176226969026500e-04, 2.27528760050574108e-04, -3.45101835866923435e-05, 3.27201675215891879e-04,
-1.03881991208881104e-04, 2.10033165807443418e-04, -8.75501048007582717e-06, 3.14478195541950775e-04, -4.79621649743055035e-05,
1.67328405215387999e-04, 5.84472169559277965e-05, 3.00859150369670600e-04, -4.13684186119337124e-05, -1.21379119254994196e-02,
0.00000000000000000e+00, -3.44462771591686687e-02, 0.00000000000000000e+00, -2.10316876980239705e-03, -7.47964378791162073e-03,
1.40631809424170899e-03, -4.56039796742323082e-03, -9.34831571155880781e-03, 2.15655290496510887e-03, -1.06117832938669408e-02,
-1.70679350958285111e-02, 3.45017088487963204e-03, 3.82119470199968102e-03, -1.04997387285308396e-02, 1.63770792198145408e-02,
-3.26765150921354405e-03, -3.41571868356958797e-03, 4.58286575207184597e-03, 7.06393644576057845e-03, 4.30168798968698536e-03,
2.07824034827653725e-03, -5.00231032938888449e-03, 4.53087742807849192e-03, 2.91006074117702894e-03, -6.79674760908184714e-03,
-4.20731287313864249e-03, 5.57341847431139063e-03, 1.84243144490180903e-03, 1.09041767054943606e-03, 6.02340248129294817e-04,
8.87323969884404020e-05, 4.08856464359921205e-04, -4.12118732042999428e-03, -2.92119223691378500e-03, 2.52960402262236098e-03,
-4.99253509354547322e-04, -2.00114581595349722e-03, 3.31933921536656500e-03, 7.87586653237865768e-04, -1.98777567108299191e-03,
-4.35319605759405999e-04, 1.21890703961077709e-03, -1.74310547912238505e-04, -1.83804873490097005e-03, -6.33286472639934075e-04,
-8.54973407243040696e-04, 8.38731087266057014e-04, 1.96859281933702002e-03, 6.71187690856791001e-04, -1.49680241656290503e-03,
-1.31746694774600721e-04, -5.85150551831325094e-05, -6.08777129793491617e-04, -1.55499350657023103e-03, 4.32423633493066899e-04,
-7.46011357659906449e-04, 5.16518970476651830e-04, 7.33542013514307950e-04, 3.00206273742392163e-04, -5.67707291610191050e-04,
-3.97317356634302660e-04, 2.64927626375300240e-04, 1.32652469615073400e-03, 9.03100594211069126e-04, 7.93215800430159003e-04,
6.39870260721876012e-04, 7.82518537978101281e-05, 3.10263950097946896e-06, -1.26280600703676396e-03, 1.35625753882703392e-04,
5.92621033709781484e-04, 2.51897673756406736e-04, 8.35622028888639260e-04, -6.93190155969104597e-05, -2.47307402787471232e-04,
1.97347646277906523e-04, -1.34291266624796601e-03, 7.04966419754734131e-04, -7.06261498209776703e-05, -5.18409841922224825e-05,
7.90341985335329185e-05, 1.80027806692415588e-04, -3.60528094008153680e-04, -7.56475687345502479e-05, -5.09855582516119030e-05,
3.43362661185179466e-04, 1.61699210709818420e-05, 5.50871102682905156e-06, -1.02545159022227300e-04, 6.00035958822780515e-05,
2.98136883703973015e-04, 1.16044262782009412e-04, -7.17220274644972855e-05, -2.43404673157207726e-04, 1.65311416998437696e-04,
1.41142580311535314e-04, 4.05231207494100349e-05, -2.82502183903395997e-04, -1.58301868094413317e-04, 3.25713204301173530e-05,
8.34399540573364004e-05, -1.26258103319842004e-05, -3.02338835543194398e-04, -3.51598517208215631e-05, 3.05105441207013402e-05,
2.02208048958474806e-04, -1.11880851566251209e-04, -5.75222282747011801e-05, -7.53488797685568308e-05, 1.64740146653522901e-04,
1.55665282582546916e-04, 2.78627075985471035e-05, -8.24982697512496936e-05, -7.68641253913072698e-05, 2.11795439387258810e-04,
1.08497663196070504e-04, -1.30771986857948203e-05, -2.15508188823196713e-04, 5.93088828912528187e-05, 5.92245582038734042e-05,
8.71924479130562830e-05, -1.39371452945136589e-04, -1.15412352616742702e-04, -1.55050056359223414e-02, 0.00000000000000000e+00,
1.08882691507289995e-02, 0.00000000000000000e+00, -4.71011842162717600e-03, -5.87720496469847434e-03, 1.05047777608648796e-02,
4.58059600186255811e-04, -2.00504402837270619e-03, -2.95424720587515992e-03, 4.87799357670548345e-03, 8.35135183044262257e-03,
1.94658690699765899e-03, -2.51595561155665282e-03, -8.21127194754033354e-03, 3.70391436894767405e-03, 6.83120937695324247e-03,
-1.76002874535725103e-03, -8.63390502398148768e-03, -4.10387342301893592e-03, -2.35444581629096900e-03, -4.09310051133190012e-03,
4.22858049368528928e-04, 3.15099824102575005e-03, -1.23657205447147900e-03, -8.10122047065819917e-04, -1.43423373808739592e-03,
1.48713803506179206e-04, -5.85087310259259233e-04, -6.23235356221657727e-04, -1.06063231727299210e-03, 1.80378281336268697e-03,
-9.30282245216480525e-04, -3.76269823446016231e-03, 1.84105606293760693e-04, 3.37515462362718115e-03, -7.38805157796997296e-04,
-9.12877602010101418e-05, -1.02645186453899405e-03, 3.16915550462153802e-03, 8.21937753793873418e-05, 1.25314454345307408e-03,
-5.88422124427039972e-04, 4.22118976254676735e-04, 3.62450580886171467e-04, 4.90060323653639541e-04, -1.34998872593530199e-03,
-6.25809469695063941e-04, 1.07186821528799502e-03, 7.90345047493609437e-04, 2.06073300326440516e-03, 4.16554698971398525e-04,
1.00476579342678512e-03, -5.22637914683046919e-04, -1.81017262357454885e-04, 6.19944137220488213e-04, 3.63742289398431666e-04,
-1.10527646027455098e-03, -1.42755618597237006e-03, -3.07067139655041281e-04, 5.03169289358491628e-04, -6.13386797343335724e-04,
-1.37656831881363109e-04, 1.21565460886625997e-03, 1.93210758951368198e-04, -7.27388822794831111e-04, -1.21911187459386103e-03,
2.29157486346871021e-04, 6.67416548838800248e-05, 4.51521060719632748e-04, 4.64612988038229510e-04, 4.44675281930900941e-04,
-4.22961891024955822e-04, -2.87267784296158901e-04, 9.37302358619733185e-04, -2.37795974551285302e-04, -1.61418528524817423e-04,
3.59975251107788624e-05, -1.57709648390207509e-04, 7.99467773702482827e-04, 4.21146651409620644e-04, -4.26833911251724520e-04,
-5.21716154653551769e-04, 4.97628543500075742e-04, 5.69987976708835435e-04, -1.00118566849244998e-04, -6.64319064977684495e-04,
1.05701411709688202e-04, 3.40518869723608394e-04, 1.38903605427121693e-04, -3.87886151334127351e-04, -1.95775443050584909e-04,
5.96229633518891928e-05, 7.96570701940503198e-05, -5.60593924645873246e-05, -1.03370927417524607e-04, 6.36583825020037681e-07,
-2.04477272097361299e-04, -3.83914221304656642e-06, 2.13649300126834708e-04, 2.31094008501680310e-04, -3.30860288794278951e-04,
-2.30463924421211216e-04, 3.94263693122693575e-04, 4.08880948289188305e-04, -1.53040820632931304e-04, -5.12662237394530674e-04,
2.24113090569518506e-04, 3.65643596805839092e-04, 7.58146844467415010e-05, -4.58187196559824389e-04, -9.80416207378538508e-05,
1.46100253250197316e-04, 1.33893857135371198e-04, -1.85809415470792585e-04, -2.14519862579163896e-04, 2.04062649947744427e-05,
3.80782834009347831e-05, 6.10446036778424544e-06, -5.41890344947285041e-05, 7.34556813889813786e-05, -4.83384314725215133e-05,
-2.59332653570620112e-05, 9.78677118932030546e-05, 7.19857997319553727e-03, 0.00000000000000000e+00, 3.32311287830635389e-03,
0.00000000000000000e+00, 1.29016889639107005e-03, 2.60642731444820416e-03, -5.79342819017824098e-04, 5.30553834626121441e-03,
-4.68788965044094827e-03, 2.08217120134517215e-03, 3.06452640436348598e-03, 5.58776901253584674e-03, -2.07323557931271898e-03,
-2.51258894621679899e-03, -3.85306585928035317e-03, 2.82848860506730321e-03, 1.90040888967029416e-03, -1.58852311515139590e-03,
-1.76310573539159793e-04, 5.21842268138928713e-04, 3.67316069752267500e-03, -6.98195275610524226e-03, 1.22648241960540911e-03,
-3.85429235509009193e-03, 1.91566146354165903e-04, -1.33552008300326001e-04, -2.39186538029803998e-03, 2.63157630488062991e-03,
6.36877311590974615e-05, -3.36814172885773399e-03, -3.97233550032412720e-03, -1.23589782939034797e-03, -1.42523994062913190e-03,
8.72837867417999738e-04, 3.32205772971433909e-03, 2.07205784967486126e-03, -1.63524299563669795e-03, -2.98899158700940103e-03,
-2.93061091875026396e-03, 2.44095189396288485e-03, -7.33561682360080094e-04, 2.19256835525849004e-04, -1.37923737441638804e-03,
4.74155589490909838e-04, 5.50343470600480364e-04, 1.00710104262438410e-03, 7.63755994840873711e-04, 3.52120109902711968e-04,
-4.30626975626065701e-04, -1.05186955567569901e-03, 3.11980751557737598e-04, 6.58461838349606908e-04, 6.30925164678347626e-04,
6.91309027775518218e-05, 1.47672053042282301e-03, 1.92736773096099717e-03, 3.53213480182088489e-04, 1.06216068629913702e-03,
3.41679775713064481e-04, -6.50019951649382938e-04, -4.56695902171019223e-04, 3.93151598436330794e-05, 1.04036608397413606e-03,
-1.18660622982701093e-03, 1.15800807328811394e-03, -7.09182118909679562e-04, 1.90406623619408615e-04, -6.86534881354838433e-04,
3.74063714066177986e-04, 2.87317791919599233e-05, -1.16732558544984798e-03, -1.10231759344286994e-03, -1.45057348478687506e-04,
-5.57631367297447612e-04, -1.26396191893281599e-03, 9.56518764874356837e-04, 2.31333566436199502e-04, 9.41915043002358412e-05,
-3.56903031585823878e-07, 1.70374203686440915e-04, 4.97443740660158911e-05, 5.02386869340809095e-05, -8.05492641090750411e-05,
2.03150152926000996e-04, -2.65367060549427609e-05, -1.39929371447721412e-04, -1.81910288097425200e-04, 3.94364895467108318e-06,
1.36003216887327697e-04, -2.46687639381463130e-04, -4.25147549979305140e-05, -8.12611885612382043e-05, 3.02172089350402477e-04,
-1.81936841170158323e-04, 3.92697525610298230e-05, -5.64000622052212617e-05, 2.99517040483845130e-04, 1.13720483995726007e-05,
5.49904859412459219e-05, 3.88977423049413005e-05, 1.38947205623771099e-04, 1.02861024666216704e-04, -2.71713077848858631e-05,
7.39149761082318377e-05, -2.13569983855703405e-06, 1.95773483474666312e-05, -8.34252306505384720e-05, 1.68968172956159728e-05,
5.64292102822087512e-05, -1.35096864921712995e-04, -7.11597471040555693e-05, -2.52508230251673836e-05, 1.83000199944189002e-04,
-1.56863264288969296e-04, -2.39818567491244685e-06, -3.74840941875673682e-05, 2.52668447454548132e-04, -7.34450727330187984e-05,
2.95967272053869410e-05, -5.33444905612428026e-06, 2.22014749180963908e-04, 2.93310494637914723e-05, 5.44126157522075029e-05,
3.76250220322146280e-05, 2.78416115424583296e-03, 0.00000000000000000e+00, 1.26854722193290095e-02, 0.00000000000000000e+00,
-9.47804839873612852e-03, -4.45215591850271764e-03, -2.28388657889899401e-03, -3.32276281845919792e-03, 5.62482041639104599e-04,
-2.53847581390776594e-03, 1.34408286936057005e-04, -1.61357826059901704e-03, -2.84333470827229182e-03, -3.22367666765658104e-03,
-3.07078967414139861e-04, -1.05330262451769005e-03, 1.51227891659255200e-03, -2.70213282972538897e-03, 2.02388698147050521e-04,
2.20186932966095301e-03, -3.46483641839626620e-03, 1.55788110436725713e-03, 1.30282918690895205e-04, 3.74261542464799681e-03,
-3.16046541370569589e-03, 1.31143131345886309e-03, -3.08399041187059568e-04, 5.99037253132680470e-04, 8.62250737785963677e-04,
-1.73930881785822793e-03, -5.02626684595700274e-04, -1.60752061144315206e-03, 7.20944097052917190e-04, 8.65412307424915685e-04,
-3.32776058197007101e-03, 2.18561816312586005e-04, -1.22068813598305397e-03, 8.37000871453652122e-05, 2.89630578538259539e-04,
4.82163205454582029e-03, 1.58867890981335318e-03, -6.22401809893891717e-04, 1.73896479816057600e-03, -5.20439782855769287e-04,
1.14168473800226804e-03, -7.20558866174143202e-04, 8.74793001198065205e-04, 1.64170074485570604e-03, -7.27026482331195574e-04,
1.04357444655336007e-03, 4.59221225965631406e-04, 4.24503050387132737e-04, 8.77028221914163226e-04, -6.33662223335107683e-04,
5.80098072084693720e-07, -1.94429183743168813e-03, -2.73977550274014515e-04, -1.22197633314669800e-03, -3.66274805050316758e-04,
-1.18302708414683407e-04, 4.83059391503256827e-04, -7.07985315638565041e-04, -7.25686338634964055e-04, 7.23020017804716305e-05,
-6.42241235767167500e-04, 9.07713195018969711e-04, -2.93369116036286404e-04, 1.04773232584438295e-03, -3.97340087708606071e-05,
-4.37058278643554128e-05, 8.83966961412785890e-04, 1.21999205784775700e-03, 8.94789314789739523e-04, -8.52167205194715740e-04,
7.03592776492062985e-04, -1.02021757762579498e-03, 7.16083852460278780e-05, -2.48733302885627229e-04, -1.70335565690782711e-04,
-2.20660416975401708e-04, 1.87004473663415186e-04, -2.36331832688707318e-04, 1.15639534404308602e-04, -2.09475188880555710e-04,
2.99683684796347039e-04, -1.29855910005338915e-04, 1.75091368398453285e-04, 3.55882792130287544e-05, 2.34718856730567211e-04,
1.51728148824903899e-05, 2.54166504458850315e-05, 1.64049233181359300e-04, 9.01549142149536497e-05, -1.71648594910176101e-06,
-1.59944524407326617e-04, 1.19348548726544397e-04, 7.85268336308512794e-05, -1.03800844517790107e-04, -1.81405986799001117e-04,
-5.13845974642025707e-05, 1.63365999753164808e-04, -1.42106018914941090e-04, -1.00097984965546201e-05, -1.62863659689661610e-04,
2.30666095969170819e-04, -8.81570200580615110e-05, 1.38332264647423106e-04, -7.84715508241847002e-05, 2.14089085919024407e-04,
-9.69562479731096954e-07, 1.16669648028640911e-04, 9.26066168070304737e-05, 1.42929551657034615e-04, 4.86176193502030807e-05,
-3.75360180136114031e-05, 1.36175658034411997e-04, 8.05716768732491124e-05, 1.91707714907214908e-05, -1.27718856709836399e-04,
2.04269030182744926e-05, -1.03334865816164002e-02, 0.00000000000000000e+00, 2.69365088408525391e-03, 0.00000000000000000e+00,
-6.21250475397177519e-04, -1.35909955444097702e-04, -1.27945203373861101e-03, 1.90953207115528200e-03, -2.77850442376668429e-03,
1.82862043928144194e-03, 2.66233674928770606e-03, -1.72532539859110087e-03, -1.01000873702640102e-03, 4.43243166778230311e-03,
5.00370125591865882e-04, 6.35632869696106575e-03, -1.95259500854165317e-03, -1.87608290871500000e-03, 6.66882212379246231e-05,
1.13997830429131398e-03, 2.26573181023742316e-03, 3.31913493881087112e-03, 7.10866341422408785e-05, 1.03399524854338207e-03,
-2.88342179376523534e-04, -7.57173461251488050e-04, 1.36785880414229898e-03, 1.77020330499936900e-03, -3.23746337552742285e-03,
-7.51329696680427665e-04, -3.11037507343977409e-03, 1.40367482810333389e-03, 2.03570909239716123e-03, 1.75365599912788613e-03,
-7.08325905403631834e-04, 1.68119206080417092e-03, 8.48077650551798824e-05, -2.99705652529596103e-04, 2.99009451038331677e-03,
2.85542960442462627e-03, 1.23578474740311409e-04, -6.38235388827023439e-04, 1.51611990460678208e-03, 4.61776934587180546e-04,
-1.33829897826344001e-03, -3.75584022082175160e-04, 2.48101123647880809e-04, 3.85122657189657569e-04, 5.51670773382135333e-05,
-1.85882436015654090e-04, 4.87174768902445344e-04, -1.83533572841154896e-03, -1.27644194171767705e-03, 8.68015753068456745e-04,
-1.31905566544782702e-03, 7.65379040425717737e-04, -2.19797395477818716e-04, 3.88332435901323088e-04, 3.13034401313501485e-04,
-8.59762290013867548e-04, 1.13994740546106998e-03, 1.72994716473204605e-03, -1.89307846611188403e-04, 6.98495755050348890e-04,
3.01973282939228989e-04, -7.74094999922277186e-05, 1.16378030420384910e-04, 1.29967573750049191e-04, -5.72500693830566416e-05,
-8.22972732968274339e-04, -3.12276374844850854e-04, -1.08545016715341010e-04, 4.78239995403885131e-05, -6.14717757473743454e-05,
-2.23684510111112999e-04, 6.04283674132463503e-05, 9.19527187931604801e-05, 2.31593535142378412e-05, -2.03967753321729318e-04,
-1.35370345643743119e-04, 1.14790539148631810e-05, -1.74220441476465203e-05, 1.82429012417977831e-05, -6.38348667371286822e-05,
-2.70462292805629515e-05, -6.86210087098047746e-05, 5.65492551243059147e-05, 8.81166356637452818e-05, 5.29353466250463340e-05,
-9.92223055798126811e-05, -8.05966223176598730e-05, 1.61920504601891299e-04, 8.00282427584589920e-05, -6.22535596383927311e-05,
-1.77477592715217017e-04, 1.06509181968351499e-04, 6.66734941894863201e-05, -1.20710760285688811e-05, -1.89746906538367400e-04,
-2.94151505612680823e-05, 4.31300335916989639e-05, 6.23352108610686946e-06, -6.80348953995890205e-05, -9.08766889893978445e-05,
-1.29721911177051616e-05, -1.67407832425932389e-05, 4.30275146318171822e-05, -2.82181843060568528e-05, -7.85956166541929683e-06,
-2.93591647656230893e-05, 4.59262032554511328e-05, 1.02171357029562308e-04, 3.63911400851528937e-05, -4.73433551198325242e-05,
-7.05174086134095903e-05, 1.12859884248809006e-04, 8.44054700606726937e-05, -1.95691919855953615e-05, -1.32409500860587216e-04,
1.07325320429094103e-05, -3.85655230757970310e-03, 0.00000000000000000e+00, -5.39979047907412739e-03, 0.00000000000000000e+00,
5.60193598745740377e-03, 1.34496931366289698e-03, 1.84053007999470698e-03, -3.07922098017868098e-03, 1.39726178798314999e-03,
4.39676641449973649e-03, -1.68890814938530798e-03, 1.07275962852819507e-04, 9.37596905032942862e-04, 3.29160028373130104e-03,
-1.93176530108272017e-03, -3.82389751326079903e-03, 3.28111585382161977e-04, 1.35165071421654509e-03, -2.44934605063826206e-03,
-1.01374060585952093e-03, 1.90315179056236802e-03, -1.16243792021998994e-03, -2.23449354109382789e-03, -1.37390419356787702e-03,
2.67043029813209421e-04, -2.46387317504163407e-04, 1.27404158449048992e-03, -3.11409821004060127e-03, 1.42054350882327412e-03,
8.50945067451520584e-04, -2.18139096460945791e-03, 5.37585425556584451e-06, 7.70672126369275528e-04, 1.47205746609291919e-05,
-2.27122252035303826e-03, 2.73471086137731237e-04, -1.71770098939768396e-03, 1.79548953791325598e-03, 1.07201759382979695e-03,
8.00872631239443744e-04, -6.93421194978720073e-04, -9.30281393379723794e-04, -6.30390648496625906e-05, -5.82231422949086564e-04,
-8.46299597976315013e-05, 9.00081479610586330e-04, 1.17059400966708599e-04, -1.17657919631858798e-03, 3.80463130954153492e-04,
5.94799888416260611e-04, 1.37458545422499095e-03, -8.65911436633437981e-04, 4.03986631244411239e-04, -3.68569836363924258e-04,
-1.37212853610761101e-03, -3.54583726830509790e-04, 8.18394448681560531e-05, -6.41741245488995269e-05, -1.10730062409925695e-03,
-3.87839975193070567e-04, -1.49797684923353618e-03, 2.76129210001028514e-04, -2.21530592066440717e-04, 3.67206383764497469e-04,
-1.63449552926589903e-04, 1.33340756263806808e-04, 1.37461576726487196e-04, 9.37402543812214275e-04, 9.35976623153734815e-04,
1.09446608551640808e-03, 6.60314338498173671e-04, 7.41023267300118505e-05, 1.96356821062653686e-05, 3.34462678969324925e-06,
9.07111562029388140e-05, -8.59497626179119625e-05, -6.54182748356717204e-05, 3.18023886151265879e-04, 1.24059973148808592e-04,
1.29131408350483987e-06, -2.85001271494982804e-04, 2.98328205348700711e-04, 7.22351177834776889e-05, 2.65141433646711721e-05,
-3.79703799498017980e-04, 1.00891724908919100e-04, -5.67380361354338442e-06, -1.33785413564818402e-05, -2.54723362593513693e-04,
-9.25645051781121415e-05, 2.47768104742008215e-05, -6.62764910229686775e-05, -5.69736192888645860e-05, -3.41068237011527789e-05,
8.09156539163736121e-05, -5.62162696420001598e-05, -3.43941083506186279e-05, 1.33619279220014320e-04, 9.09933194450521986e-05,
1.10025788491296402e-05, -1.41269448084213606e-04, 1.97425730308574887e-04, 4.13949297778524444e-05, 2.28029456020616418e-05,
-2.51957187227819538e-04, 1.07087421267623703e-04, 2.01951240903083911e-05, 2.16232156916533599e-06, -2.34732325786082114e-04,
-3.44848725799019331e-05, 1.02322264729879813e-05, -2.95808799705676908e-05, -1.27372633332256295e-04, -1.01181675232029001e-04,
2.43965285934001316e-05, -1.56339350729979790e-05, -3.10666087069938407e-06, -6.48565764324702686e-05, 5.66240428071342533e-05,
-4.80947203208227109e-06, -3.27434987496428307e-03, 0.00000000000000000e+00, 1.94001371970481206e-04, 0.00000000000000000e+00,
-4.22146600015671676e-03, 1.85560412822053321e-04, 5.91960667993999233e-03, 3.46745751020892997e-03, -1.49624542277282911e-03,
-7.46997420480836351e-04, 2.71956837568511616e-03, -2.00362589759237692e-03, 2.84403667909016201e-03, 1.38522786944513302e-03,
-5.36253982302081788e-04, 8.98944385900057180e-04, 9.45948316279443557e-04, -1.10724429141635401e-03, 3.46491308247556264e-04,
1.71076868721512518e-03, -2.83621464332214999e-03, -1.04214110182014098e-03, -3.29843443238391268e-04, 1.16249263818666692e-03,
-1.51263971259868598e-04, -5.12095086650722468e-04, -4.43868928176068683e-03, 1.09452571151002305e-03, -1.95905282494774008e-03,
-7.16502823696713313e-04, 1.80703181275910802e-03, 3.08021488597660107e-03, 7.63416447485232405e-05, -2.40820896115498200e-04,
-5.42123846874502098e-04, 2.79921673263123887e-03, 9.56711213597357204e-04, 9.12734617363823698e-04, 1.18329385902973100e-03,
2.70548437862810518e-03, -7.56421605209681158e-04, -1.10451578857403000e-03, -4.68535394733205607e-04, 1.19301359831118807e-03,
2.28790726615612307e-04, 1.01465655922533307e-04, 4.07810849728176426e-04, 2.37329397140924927e-05, 1.67118007317343706e-04,
-1.85034347043011804e-04, 2.39043782577092709e-04, 1.07377907210822799e-03, -5.05008157646158105e-04, -3.03557662440200656e-04,
-5.24421474456220906e-04, 7.10470807822329150e-04, -2.65441489219161812e-04, 1.86528767525131816e-04, 1.18768236344364813e-04,
2.73773866769723212e-04, -1.37336329257661718e-04, 4.25102267178067332e-04, 3.61425250084589772e-04, 9.31561412223019954e-04,
9.00923909497920207e-04, -6.91244956332927194e-05, 6.81184644780815534e-05, 4.94292460722651344e-04, 5.57832768280572605e-05,
-1.78247906031541014e-05, -5.39356541770310516e-05, 1.12847683543339510e-04, 6.97768161894662503e-05, -1.28801112173031391e-04,
-1.36258124552730511e-04, 7.52752984009248194e-05, 1.80478192845277815e-05, -1.41645378129016193e-04, -2.57661323644306191e-04,
1.41172970367211290e-04, 1.68446669744071312e-04, -1.43510684701046498e-04, -2.49605693568589191e-04, 2.09270025912965222e-04,
1.73380332203807320e-04, -4.31528168315061845e-05, -2.69385649188820129e-04, 1.44262017722768493e-04, 1.21410391924219496e-04,
-2.07613658141512274e-06, -2.75471606365465440e-04, 7.75847983715348654e-05, 6.67669015816173777e-05, -3.47205197316259882e-05,
-2.20564258990204199e-04, 6.79078647130726426e-05, 5.59892631528520842e-05, -7.15773427619622281e-05, -2.01846729733602123e-04,
8.12540527443827596e-05, 8.67509042232947450e-05, -9.40223467407713106e-05, -2.10067860124576197e-04, 9.90070868211715723e-05,
1.27019435552551516e-04, -5.23811311183937698e-05, -2.22191208252392599e-04, 8.42154234690965325e-05, 1.31078778198552006e-04,
5.85256321380583660e-06, -2.20106146426574611e-04, 3.43903585322539085e-05, 8.17679926137757117e-05, 3.57696523905280228e-05,
-1.71306620715922918e-04, -1.69639454518841103e-05, 3.60183337728328407e-03, 0.00000000000000000e+00, 1.21002498222732104e-03,
0.00000000000000000e+00, -5.31067389607137001e-04, -2.22812727852063006e-03, -8.94992413192695607e-04, 3.02492958377452523e-03,
4.52889634571147846e-04, 7.04024195597577774e-04, -1.76994018522177218e-03, -2.78698760786973490e-03, 8.84419486352532524e-06,
-1.60114345443433800e-03, -1.79602328856612098e-03, 1.69645827046587699e-03, 1.22263306124923104e-03, -1.38672671784444796e-03,
-1.81715401816120699e-03, 1.12291672961585505e-04, -1.74014595698025396e-03, 3.00638238969133014e-03, 5.38769342023656716e-04,
1.01168286456173001e-03, 1.25835738989465897e-03, -2.14855111778818704e-03, 1.94025636506503399e-03, 1.60138198682476798e-03,
3.04996716051287957e-04, 1.51347934909390003e-04, 5.21670106763438379e-04, 1.75693890008179202e-04, -2.26149697116798717e-03,
-2.18303710192580295e-04, -1.51398914585641406e-03, -1.58816215964855886e-03, 1.55927169355978798e-04, -4.94225640241941215e-04,
8.36202145908589763e-04, 4.73292588125403895e-04, 1.06473894198859907e-03, 2.09611117891008196e-03, 3.25952685546390664e-04,
-1.01655912251420307e-04, -5.18107271101577132e-04, -3.16226537170489612e-05, -6.51602000247405327e-04, -3.27558099950500984e-04,
1.17758636912919704e-03, -2.12360966362415822e-04, -3.87091188014523164e-04, -9.60683801574256695e-05, -1.30698707823795617e-04,
-9.27708167827058093e-05, 4.67257929136822116e-04, 5.26735365201713777e-04, 8.67242094192128112e-05, -7.67583181024485969e-05,
2.96172266445650628e-04, 1.17659790932125708e-04, 7.92032613046985052e-04, -4.73512687405615112e-04, -1.16486541346945304e-05,
-4.35223289100590137e-04, -4.07299279253803910e-04, 3.52623807285629663e-04, -5.29775841676903103e-04, -4.05973013715962621e-04,
3.01167171669751194e-05, 4.49564889859656861e-05, 4.98072315856021145e-05, -4.68575668174601442e-05, -4.26129773365465023e-05,
2.68927754707826733e-05, 4.85345234325915614e-05, 5.01423283319458619e-05, 3.74641852071465678e-05, -1.15116648622984601e-04,
-6.37275438469799910e-05, 4.80550144767946612e-05, 1.06992536936288300e-04, -1.04196940176600408e-04, -7.16075071301549481e-05,
2.43099112315813413e-05, 1.17741921950054504e-04, -3.77547890067578420e-05, -9.10460029082267824e-05, -9.11504130315538267e-06,
4.97971810224103162e-05, -1.58264998536182614e-05, -4.29621030846360960e-05, -1.14992848529921406e-05, 1.54112443854980599e-05,
5.70264442689391733e-06, 1.07379249356645216e-05, -2.07929050873082623e-05, -5.79162054506014299e-07, -1.78040733197804610e-05,
2.89084424773166903e-05, 2.71190365929275905e-05, 5.58295705560797958e-05, -6.04971618174102746e-05, -3.76119450581838938e-05,
5.89902787458344548e-05, 9.92815613917080503e-05, -4.15442049260147703e-05, -9.02971715609474616e-05, 3.14235053266474025e-05,
1.01079611905228811e-04, 4.68143507524649596e-06, -6.77319129898850883e-05, -1.82988584621209425e-05, 5.02189403381184127e-05,
1.73189683402960021e-05, -4.66784771895106733e-05, -2.66409942440282929e-05, -1.34728524105830606e-03, 0.00000000000000000e+00,
3.12714909306053895e-03, 0.00000000000000000e+00, 1.18306606932572895e-03, 6.05240992502963007e-04, 1.88764954821659086e-04,
5.42596575385474313e-05, 2.38749601975439107e-03, 1.22954432709531194e-03, 1.48925894226772590e-03, -2.20463386750377596e-03,
-1.18702352618399401e-06, -1.90558390450811617e-03, 1.14020421473847301e-03, -2.28729301768068621e-04, -1.88094245511257613e-03,
-2.01084137143882813e-04, 1.32488933882795711e-03, 1.18616181726357499e-03, 1.29398001359800913e-03, -2.71207856984953012e-03,
8.19803578829499032e-05, -6.65644985171580774e-04, 8.75321220674210219e-04, 1.84074218759263395e-03, 4.06738204865472806e-04,
4.38901299441693939e-04, -2.67651935970348621e-03, 6.81954479043894637e-04, 6.68960422943894986e-05, -9.81998477803277181e-04,
1.20805174682736713e-05, -2.81493824936257227e-04, 6.95809492034823291e-04, 4.19125664581867304e-04, 1.75523867792575210e-03,
7.32292775253121737e-04, -2.82641400905200510e-04, -1.46138290430873900e-03, 5.75321504003394740e-04, 2.86865541338693028e-04,
4.34876815609579008e-04, 7.83080633245084208e-04, 4.94068325342467878e-04, -8.49557197723212068e-04, -8.31842546134029881e-04,
5.34145624564779644e-04, -6.14076102583219338e-04, -9.72964231627292640e-04, -1.43721827729833109e-04, 2.01814576789058711e-04,
7.67106614249287539e-04, 7.90377521464399315e-04, 4.14567584917532341e-04, -1.99241162791407225e-05, -1.66330553501719002e-04,
-1.39824103009899810e-03, -4.42117898608442521e-05, 5.84579711485059780e-04, 5.75612275643427223e-04, 2.74664173075564607e-04,
2.65715923566144636e-05, -4.21666909316897534e-05, -1.19734102816029612e-05, -1.94256110037154401e-04, 1.01515434301023007e-04,
2.67927527956691980e-04, 1.21374022529998612e-04, -3.81182434679552928e-05, -3.99384457032958676e-05, 1.67162746294344109e-04,
6.14866880150712615e-06, -3.85414892397567823e-05, -1.12966523933537806e-04, 6.34552866927493963e-05, 1.93741280076219993e-07,
4.10563732161052979e-06, -1.26284088177673306e-04, -7.55315779155755080e-05, 1.92745758019108296e-05, -1.13406998393739012e-05,
4.07566430480326360e-05, -4.48671856566166020e-05, 5.14430653688213020e-07, -4.07333593756617344e-05, 8.00104941396855918e-05,
5.41507565868616441e-05, 3.98494652648809884e-05, -2.07914223765169624e-05, -1.25512252041928818e-05, 1.41940036871691613e-04,
7.32425589110114811e-05, -2.51512828443974635e-05, -1.19512272253876809e-04, 9.67416793113340325e-05, 5.82166703146601216e-05,
-6.26370433431184249e-06, -1.09923499775177200e-04, -2.87744323783186204e-05, 2.54233406189743207e-05, -2.10691302726592179e-06,
-3.12188949662077221e-05, -5.86605172857020092e-05, 1.89560583816991700e-05, -1.04040428617575500e-05, 4.44595633021011336e-05,
-1.56251824021060200e-05, 3.41616520292055713e-05, -1.52515501601725206e-05, 2.31782612290289723e-05, 4.54765941433281945e-05,
3.70353965639083326e-05, -2.48628648484161422e-05, -3.78366768210461839e-05, 6.18128780983269579e-05, 1.00801012570994608e-03,
0.00000000000000000e+00, 3.47342291476345876e-04, 0.00000000000000000e+00, 7.91801506949049000e-04, 2.41648709536439622e-03,
2.75878765148988314e-05, -1.42178280189469899e-03, 9.03240112720424823e-04, -1.56794445064509409e-03, 2.94565430782157717e-04,
1.18232427518331494e-03, 2.50420503753315303e-03, 7.18942036700169896e-04, -5.36395691591266192e-04, -1.86258200998779509e-03,
3.29548349853266565e-04, -5.13252882376217934e-05, -1.94254317541928687e-03, 2.18830456667285195e-04, -9.60854372387139272e-04,
-1.16624243286916505e-03, -7.85552741685865383e-05, -1.32933508428586297e-04, 3.09585668826129650e-04, -7.10966795883627824e-04,
-8.71756659030432663e-04, -2.27897207039004610e-04, 1.61772288010974315e-03, 7.16790313587811995e-04, -5.01650554121614123e-04,
9.71216763704305639e-04, -1.22884709652954904e-03, -1.46349407630147108e-03, 3.77995433273275170e-04, 1.17850182886075107e-03,
-8.07524644944247099e-04, 5.47488208982875005e-04, -2.83179916648217922e-05, 3.22551697665504763e-04, -1.09287117692114400e-03,
-9.25209472688941724e-05, 1.55444562488144710e-05, -7.54245519189904352e-04, -1.14660162251744202e-03, 7.48883115386481937e-04,
1.71732250142289308e-03, -1.47036164048469710e-05, 4.51407428437879436e-04, 1.18680813584906390e-03, -6.72638438381541063e-04,
-6.97316848749536490e-04, -3.08263583383085790e-04, 5.65595983350456626e-04, -5.59797981166573668e-04, -4.26396998746973431e-05,
5.98503817888803680e-04, 1.13018384155006801e-03, 7.22319902981317995e-04, -4.73045270082827313e-04, -9.90990376668181587e-05,
1.31642491991061888e-04, 1.56034616915051694e-04, -1.14773260272165305e-04, 2.03221727850923800e-07, -3.50912025092656228e-05,
1.32230955962657016e-04, -1.98452567834938321e-05, 1.05361071131588310e-05, -3.98500767524021935e-06, 2.79257280511491612e-05,
-8.26066314796087718e-05, 3.94515619184286295e-06, 1.43449934940676807e-05, 7.28684565532049394e-06, -2.02274386187340809e-05,
-5.80238351293255621e-06, 6.41043912182615570e-05, 4.18971091022072242e-05, -1.17256699183353403e-04, -1.80114114610353696e-05,
2.98002704400505139e-05, 6.00549650472916225e-05, -7.26624164000236908e-05, -5.08022754955713893e-05, 2.12961246777251218e-05,
8.15905788537672430e-05, -5.24679151035354737e-05, -4.72793083387787640e-05, -1.00706341258723311e-05, 7.85407806503067980e-05,
-1.67426868521839296e-07, -1.53964885518920599e-05, -1.73452868932099002e-05, 5.41309373643272800e-06, -7.78796169440987244e-06,
4.24209004120176683e-06, 1.31103899532218097e-06, 9.03134330516295739e-06, -5.47716075715314646e-05, -1.75259416817880711e-05,
3.39369459010566274e-05, 4.45394216516285720e-05, -6.33645059964500198e-05, -4.53989029125374428e-05, 2.30499073301049214e-05,
7.01930476332635278e-05, -3.70740476127565899e-05, -3.95730802289417580e-05, -1.28283101994449709e-05, 5.13649901186186223e-05,
1.62222452549143097e-05, -3.95332838575619596e-03, 0.00000000000000000e+00, 9.73971711510582564e-04, 0.00000000000000000e+00,
-1.63334095657213601e-03, 2.47566297975661915e-03, -4.61067854034823989e-04, 1.00227945503756797e-03, -8.98849702359479129e-04,
-9.89062784124243724e-05, 4.16612817020121440e-04, 1.69845399686099387e-04, 1.40704833076194490e-03, 1.58608145473462586e-03,
-1.91534747392348593e-03, -1.50556041518790020e-04, -7.41177503466006714e-04, 1.80077341737210116e-03, 1.82148333058896402e-03,
-2.36480063043344104e-04, -6.69607791546209994e-04, 1.45142101651430299e-03, 1.73832130576143714e-04, 8.93804851118562668e-04,
5.14804835010676596e-04, -8.60802883056195796e-04, -1.49094753190589895e-03, -5.49339444448599160e-04, -9.43782543463274435e-05,
6.78581866352359793e-04, 2.40555226995407996e-03, 5.50420320933374310e-04, 1.06689345052416503e-03, 1.11546355912698204e-03,
-2.51654815915527226e-04, 1.05362642615015507e-04, 1.51342669550902598e-04, -1.18709605961395514e-05, -3.48687623727660372e-05,
2.66172462883273715e-04, 1.22640520127150393e-04, -3.53049495511274401e-04, 2.10819480972762000e-04, -1.32719882022899207e-03,
-2.68288818956041589e-04, -2.09821739624757906e-04, 4.54672184206733891e-04, -1.85821605909427607e-04, -6.69258067322836808e-04,
4.19466498351806936e-04, 5.98458432727136413e-04, 3.41464685789424362e-04, 3.08215819645630260e-04, -2.95548945659434843e-04,
-7.24507159240115662e-04, -1.69082755504923292e-03, -1.93520904983491714e-05, 1.35191372580951795e-04, -2.56397811086976233e-05,
2.33630592103984520e-05, -3.87116937938718973e-05, 7.81921474464154553e-05, -6.33964727838977121e-05, -2.12567160577475314e-05,
-9.42215352607953948e-05, 5.33226219041193637e-05, -2.21376049296527211e-05, 6.92024697881541171e-05, -1.20697375237608106e-05,
-5.29224653986627494e-05, -5.69801791450185759e-06, -3.27120027041702426e-05, 2.85749659021073320e-05, -4.20546764722071632e-05,
1.98781427031484195e-05, -5.38405801763815410e-06, -3.60922281559310912e-05, 2.75190032543574721e-05, -2.65219063811620724e-05,
3.90728273668446096e-06, -4.56887670342133939e-05, 1.64537934490613995e-06, -4.85903112312865320e-05, 4.24402246231590422e-05,
-4.13561365234884525e-05, 8.75373073637312674e-06, -1.21030282885749017e-05, 6.58122011178998717e-07, -4.77810740958057329e-05,
7.18444564697379224e-06, -1.26287955993816603e-05, -4.19957851422694573e-06, -3.40668636228985117e-05, -1.81427746122776006e-05,
-1.29807277238031617e-05, 1.52633508008959505e-05, -9.32846106770538938e-07, -8.25199093839484345e-06, -1.53075654575231387e-05,
1.90849812166562513e-05, -1.94244976250517904e-05, 2.30351054519609033e-05, -8.12019352100231694e-06, 1.41254032313609714e-05,
-5.15379624616807793e-05, 2.10763449534356613e-05, -3.20853263814959310e-06, 8.77168653988632320e-06, -2.58071167847657522e-05,
-7.75701334972038760e-06, -9.93028892835044389e-06, 1.38436251757236696e-06, -5.72249229404819815e-03, 0.00000000000000000e+00,
-6.32581087658179333e-04, 0.00000000000000000e+00, 1.61767889408735797e-03, 2.19778973626455487e-03, 1.96918718115947095e-03,
-2.65739741538310219e-03, -4.02877235435324934e-04, 1.82841358339318606e-03, -1.98190948111654397e-04, 1.84031700925872818e-04,
9.14586352256133118e-04, 3.19426607242560368e-04, -2.39250809083575884e-03, 5.81493000541998505e-04, 3.77857679493603688e-04,
-6.86936120110013377e-04, -2.82807248390244833e-04, -6.70701771087373505e-05, 1.05241439367069302e-04, 4.46545395702673144e-05,
1.68820664009942988e-03, 1.18800350711883193e-03, -6.58313265148805686e-04, 1.17053380848879200e-04, -7.17271890677809485e-05,
1.85577007448963415e-03, 6.56520849846081700e-04, 8.06017465774315294e-04, -1.93797726968085720e-04, -1.75313812654149300e-03,
9.27674844695662668e-04, 1.17445496798684705e-03, 9.54690738368271698e-04, 6.09946281790876106e-04, -1.02725245012973807e-04,
-1.03470126681415200e-03, 2.71870677502123641e-04, 1.01664056791575709e-04, 1.40092211191593103e-04, -7.42827786391725441e-04,
2.54015410108206197e-04, 4.62154858422488414e-04, 4.73601196282340514e-04, 8.36667553932069407e-04, -4.24839064668559993e-04,
-1.18580662211388403e-03, 5.53470270383688029e-06, -7.12069686521007972e-04, -3.12850226308962768e-04, -6.28311957809785690e-04,
-8.30599693854902740e-05, 1.55928940929191389e-04, -1.60018398001453190e-04, 1.85250076757384821e-04, -1.57732838480953709e-05,
2.95813088176528736e-05, -2.23827148064990915e-04, 4.80249509368113500e-05, -5.82639775077897334e-05, 7.00915612005133102e-05,
-1.77709281195849987e-05, 9.54475479352618022e-05, -1.06501231685877503e-04, -2.52725768132289197e-06, -2.87163499743147541e-05,
2.39634619540592104e-04, -7.01848644852101600e-05, -1.07730520602342608e-04, -9.15501307042449695e-05, 5.55930835071830897e-05,
7.65236411313137280e-05, 3.78463407174196132e-05, -8.20428675414204951e-06, -5.70295554976857978e-06, 1.26162015242596914e-05,
1.10521120895615412e-04, -6.19508662898057469e-05, 3.94284099299287429e-05, -1.06451388614695302e-04, 7.47878473709218306e-05,
-5.21118007184475231e-05, 5.90512347485764542e-05, -9.31374583187064725e-05, -1.76537540334046529e-05, -7.82954623428642381e-05,
6.31966793043861619e-05, -3.36067601811582521e-05, -5.23997892308786733e-05, -6.79521363541582459e-05, 3.05704464569093182e-05,
2.23407406348362189e-06, -1.17716210222080909e-05, -5.41817760084240387e-05, 2.65837093897156702e-05, 9.77892152361844917e-06,
3.98189921094368982e-05, -4.68398123377187695e-05, 2.83937454235591119e-05, -2.31712065750914126e-05, 5.78505330157043243e-05,
-6.07388476988686199e-05, 2.80495746496069133e-05, -7.16977469524132671e-05, 3.06211359179215205e-05, -4.91673798626069715e-05,
2.17809145436793205e-05, -1.20189266317283195e-03, 0.00000000000000000e+00, -1.24444005867499095e-03, 0.00000000000000000e+00,
1.73864859937527096e-03, -2.10016679995760200e-03, 1.28097965557804499e-03, -9.37869122558217835e-04, 1.23244624215056511e-03,
4.29296709581100113e-04, -1.39876407807240904e-03, -1.77139693497456300e-03, -1.75368292696427997e-03, -1.88220407037240512e-03,
-5.97882747390380697e-04, -3.20840209140584487e-04, 1.07829902637683606e-03, 3.48422576558867793e-04, -4.98399522356942812e-04,
4.85015946638849439e-04, -7.40868022399493063e-04, 3.89788722352541486e-05, -1.50683679721151501e-03, -5.68710376996097691e-04,
-1.17794557282445807e-04, -6.69071298330275012e-04, -1.54243277037009394e-03, 3.93673397135044668e-04, 5.02542184595859242e-04,
-1.06141332845498607e-03, -4.68541722612586032e-04, 8.09111430645225208e-05, -5.50488474901892027e-04, -1.76232702790926301e-04,
1.17927273469369909e-04, 8.80531874629222823e-04, -3.17470244298062771e-04, 4.64126640010351500e-04, -5.84186413684128505e-04,
-1.42019871106746317e-04, 1.14102906216628905e-03, -1.13422500815021313e-03, -4.40136070204560524e-04, 7.81230568059088971e-04,
-7.48231811144619272e-05, 2.70624883281615704e-06, 7.77629329803327529e-06, -4.64890263687434737e-05, 1.29456925148187810e-04,
-8.26415855695131331e-06, -1.35796182420071221e-04, -1.13417756509377808e-04, 4.71475937122163948e-05, -1.35640896999089205e-04,
-1.77588284877164021e-04, 4.44527488443097229e-05, 3.61597554605081118e-06, -8.57653366949178396e-05, -1.04773375499409501e-04,
1.67387410624966980e-06, 3.27745304038831628e-05, -7.35752623470212766e-05, 9.67836329131315262e-06, 1.24611546920806011e-04,
-2.07100197446184124e-05, -4.74290184099852226e-05, -6.27778738001704550e-06, 1.14722525535037299e-04, 9.15928222588590575e-06,
-5.24769508651932535e-07, -2.64488074208383205e-05, 1.89369901667540120e-05, -9.02543609331752848e-06, 5.05981564857997049e-06,
1.50033852168410511e-05, -3.22506474294869728e-05, 1.69892618976147802e-05, -1.22510414201922799e-05, -1.72479602440841401e-05,
-5.38753752232114648e-05, 3.82701797625889268e-05, -2.52126883145274404e-05, -2.72655360701411011e-06, 2.38136850519584826e-05,
3.89460713712125724e-05, -1.44085864133448205e-05, -1.99183168836612192e-05, 1.40299281945465198e-05, 3.41954900402774203e-05,
-3.38967848729448998e-06, -3.34956295772950317e-05, -8.08169691723178865e-06, 1.75633301603197390e-05, 5.66459538142349871e-06,
-2.32417858834375024e-05, -2.61422397808690076e-06, 1.61959819366858825e-05, -1.41749825797410821e-05, -1.69536160529109602e-05,
-1.31441549108300885e-06, 1.56297638295987488e-05, -1.11585138806505809e-05, -1.65126158152218315e-05, 9.87884239323989340e-06,
2.03783651816531221e-03, 0.00000000000000000e+00, 2.96441215597000821e-03, 0.00000000000000000e+00, -1.20692298413791507e-03,
-1.67976475604672201e-03, -5.55507989859292846e-04, 2.41084152649467202e-04, 1.56009441290519001e-03, 1.29451122431705899e-03,
-7.34843389900259429e-04, -1.14363222895938195e-03, -1.04558576783006095e-03, -1.36385048193016396e-03, -1.40388960701079294e-03,
6.47371830280723940e-04, -7.50606293589330164e-04, -8.54271538689986695e-04, -4.38830402088630537e-04, 5.99525655311079764e-04,
-1.78097452143089407e-04, -2.74859279931684324e-05, 4.58302159015211809e-04, 6.96953952070895151e-04, -9.09138958706189721e-04,
1.00859289053476311e-03, 1.03420094281303607e-03, 6.06923899074255464e-04, 1.89553126330842806e-04, 1.07961345910163406e-04,
1.22474291555961902e-04, 8.97871951519685265e-04, -2.03363015143865218e-04, -2.90422734859094615e-04, -1.16390797079040211e-03,
-4.07437136982752909e-04, -3.33759313478539392e-05, -4.13217846735850717e-04, 6.11501445766974655e-05, 2.30660848037552498e-04,
-1.65860197748338308e-04, 7.32838125453208456e-05, 3.05772451206082208e-05, -5.86058550125370254e-06, -1.00712626716708905e-04,
-1.16636328519362104e-04, -4.39030870540731342e-05, 2.85746939544883230e-05, 1.21787965357839705e-04, 3.46888941913913528e-05,
1.02679377633142107e-04, 4.05996014113190428e-05, 2.30543771929583613e-04, 5.14945396569508813e-06, -1.65368020862696715e-05,
9.04748986364313894e-06, 2.93878012034917504e-05, -7.94825676720516274e-05, -3.80497824239483319e-05, 7.03625355594050394e-05,
8.98471420453423214e-05, -2.80862342068120786e-04, -8.14566101491249101e-05, 3.25979861574083376e-05, 1.06156949242827603e-04,
-1.32132181275301412e-04, 1.27583620705697613e-05, -5.79628880366303540e-06, 2.43199623878137608e-05, -3.60126018132162520e-05,
6.15951019505404804e-05, -3.99183515734159737e-06, -1.76186429787627617e-05, -4.49466237943879815e-06, -9.63231232761454656e-06,
2.20206236945611825e-05, 4.64279356163652205e-05, -8.18007824948389131e-05, -1.75678833941443713e-05, 1.16166757075860911e-05,
8.50503368640412397e-05, -5.73112362586235122e-05, -3.02595465759658291e-05, 2.43223590855599709e-05, 9.00167115746459403e-05,
-4.42196883338474652e-05, -4.77861166708995849e-05, 1.47871285798455200e-06, 6.46850476250585682e-05, -2.84469853186260997e-05,
-4.06690705935917952e-06, -1.52285477243602015e-05, 5.34350029362040406e-05, -2.36525750629738904e-05, 1.79723054916162533e-05,
-9.66549826127890040e-06, 5.63345183102968898e-05, -2.80051432389576894e-05, 3.21773388999549127e-06, 1.50608941802879105e-05,
5.60896638506370299e-05, -2.17105368788846218e-05, -1.18764180976179311e-05, 7.83174918154457391e-06, -3.60332041478658661e-04,
0.00000000000000000e+00, 3.49318793191280520e-03, 0.00000000000000000e+00, -4.69558634437114002e-05, 7.74460196242976196e-05,
-1.72713645917304507e-03, 9.25559109923871173e-04, 2.70769786797511226e-04, 1.31867157982758915e-03, 8.27630755758396825e-04,
-9.10032934212391328e-04, 1.05207266211394096e-03, -8.61162790483724626e-05, 5.89935325723504357e-04, 9.44401798870870619e-05,
-5.30424580391579309e-05, 6.46005187543645225e-05, -1.38406487947310611e-04, 7.71434788940860436e-04, 5.73812403577386287e-04,
9.96893494257266189e-04, 1.03367888609143905e-03, -6.48856607584904002e-04, 1.75666860474048509e-04, 3.15758899087953469e-04,
8.50083079068923893e-04, 3.13659018423505167e-04, 1.51559585553799191e-04, 1.51467162868235410e-04, -1.29431785041904613e-04,
-2.39797674845940504e-04, 2.33549706236320912e-04, -3.00841368338772394e-04, -7.95062782924988755e-05, -2.07935910158562009e-04,
-3.92408950341176794e-05, -3.35406314150178588e-04, -1.45057999540062810e-04, -1.56325561593936710e-04, -2.13483774208381123e-05,
1.23660725477051607e-04, -4.52126231413514295e-06, 1.23543299691240512e-04, -2.02273348603037631e-05, -1.12762498094144112e-05,
1.29264958426136413e-05, 1.42217450806022812e-04, 4.33277313716177756e-05, -8.88754036309822399e-05, -4.52579094020371517e-05,
1.53952587710451221e-04, 1.49223702486409108e-04, 1.89769705761112033e-05, 8.79407357783015825e-05, -2.42581624364586902e-05,
-2.09538727115885126e-05, 3.19715400980995704e-06, 2.93210815056320497e-05, -9.82593484599446274e-06, 3.54911921458880570e-05,
-1.01403207835097905e-04, 4.75557097499886204e-05, -5.15654800601184123e-05, 2.56187188204641513e-05, -4.40789852288279039e-05,
9.02715865368834106e-05, -6.39625122936784616e-06, 3.91163204254141270e-07, -1.43497473262268803e-05, 1.48738995955006900e-05,
7.10059543838856299e-05, -1.44858422217440211e-05, -2.29202291658015780e-06, -4.74320720877375356e-05, 2.16688715314149923e-05,
3.19024146278115502e-05, 6.65770850586241554e-06, -2.52674351434578406e-05, -5.95618473210036723e-05, 1.85160634771636908e-05,
-1.66385627558361417e-05, 3.01536532216370809e-05, -2.34318990675550609e-05, 1.99994047973059210e-05, 1.20799934486498588e-06,
4.68905539792476611e-05, -4.05199614593984003e-07, 2.15121745493054430e-05, -9.06512486920190993e-06, 1.60091575368399188e-05,
4.26017345086028326e-05, 2.60811047294765523e-05, -6.95236528206229650e-06, -1.14411704502663105e-05, 2.15010636838700904e-05,
1.45470558851883310e-05, -6.07212258084767841e-06, -3.22028438478360636e-05, -3.17933241488657482e-07, -2.53151479665288202e-03,
0.00000000000000000e+00, 1.12967622013809398e-03, 0.00000000000000000e+00, 5.16439235336714790e-04, 9.13502172529712803e-04,
-1.10885916513099808e-04, -5.87650332004382970e-04, -3.10824645598157688e-04, -2.04340181774912815e-04, 1.50058658499531005e-04,
-6.27762758616644544e-05, 6.34086998122845619e-04, 1.62611213591308410e-04, -2.58000457753021289e-04, -2.28405829315187425e-04,
-2.41752383261545410e-04, 3.87195735267530246e-04, 1.31350888922379520e-04, -1.29243632867355305e-04, -1.86027850373812504e-04,
2.69006585922663719e-05, 5.31648558458435233e-05, -2.81913823664273785e-04, 6.12596182709963886e-05, -1.99722422596107518e-04,
1.65292373762217508e-04, 1.93923419729845505e-04, 2.75862370177224576e-04, 2.77743170358154992e-04, -2.42249854023419709e-04,
-2.36920920177450216e-04, 1.24587860121446999e-04, 1.12559537025789104e-04, -8.91336246402938640e-05, -1.40571914192917500e-04,
9.69331183964188236e-05, -1.44820965513538111e-04, -1.28839828734424514e-04, -5.82527231861141738e-05, 4.37826620002375143e-05,
-7.67180354379144502e-05, 5.74861437218499151e-06, 5.02678298138450438e-05, -5.91313323346461106e-05, -1.08838366163098205e-04,
6.49284469111140313e-05, 1.76727711960057211e-04, -6.84530490306975691e-05, -1.42567887910064205e-04, -3.17538645802270311e-05,
6.82633542136118585e-05, -2.69908329748347014e-05, 1.98739426028434396e-05, 7.54438074321606313e-05, -6.35141527967402148e-05,
1.72478873877519024e-05, 6.65218946661316610e-05, 5.90351225582636660e-06, -5.29346479560344747e-05, -6.09586847041837740e-05,
5.77794329008206426e-05, 5.15519395345650716e-05, -5.66799896792458604e-05, -7.73712507640684068e-05, -4.08972980683335022e-05,
6.47698884178398945e-05, 2.56965476906213634e-05, -1.07169096508788499e-05, -3.11367084296445586e-05, 2.64692802759765304e-05,
4.09729157302286519e-05, 3.11189278864267132e-05, -5.78741270881866221e-06, -1.16942216776686414e-05, -1.41167610522350718e-05,
2.77421966670059834e-05, 3.43719238319505278e-05, -1.16804942644560203e-05, -6.12184985312735501e-05, -2.94284212452698707e-05,
3.96388866360877800e-05, 3.78998547828979167e-05, -4.92209043992790452e-05, -5.40755588507646826e-05, 2.16255420278872399e-06,
4.63317120113593031e-05, 6.94969244998754276e-07, -1.75200269820160494e-05, -3.06430625697614833e-05, 3.43536241910082486e-05,
1.58233835524091911e-05, 1.81976913278585211e-05, -1.12638695311979910e-05, -1.18290933055904215e-05, 1.54065347512193402e-05,
-1.97457057792955592e-03, 0.00000000000000000e+00, -6.17903706175687285e-05, 0.00000000000000000e+00, 2.39974191600898101e-04,
1.09676205964747407e-03, 2.66073294575686298e-04, 8.97726904827368986e-05, -4.21704772986081135e-04, -2.82186869262147694e-04,
-1.97386162412418906e-04, -4.55182257600979224e-04, 6.90018589665085673e-04, 4.30022425770627912e-04, -4.13602752490345210e-04,
5.26412358602485543e-05, -2.99605019324083717e-04, 3.36147203973198865e-04, 5.35288011923700297e-05, 1.19957570327492498e-04,
-1.36669491045843299e-04, 1.94136007080692206e-04, 2.01776429817749806e-05, 4.22807143534335079e-06, -9.29802360975042527e-05,
-1.55693138695467696e-04, -2.64935701201438924e-04, 3.83809379110780418e-05, 3.68315910254809705e-04, 2.22675272309271816e-04,
-8.40837046939708617e-05, -1.26650144654841398e-04, 2.75725685385756389e-04, 2.08514653482221111e-04, -1.32192752900868492e-04,
2.67546735251402909e-04, -1.46951286818532412e-05, -9.51276528158519121e-05, 1.12515159008266409e-05, 1.65126940488277810e-04,
-1.05096096778006392e-06, -1.48931894867637118e-04, 3.88335645430680542e-05, -6.79220808847396388e-05, -5.68333508117840373e-06,
-1.13497193495425101e-04, 4.40865395213776718e-05, 5.81689000146885115e-05, -1.07304496192630510e-04, -1.09553109663381809e-04,
-7.36678296651362596e-05, 3.05076035218356775e-07, -7.14562184723935252e-05, -2.17689602162982504e-05, -8.86635043731916103e-05,
1.55830079922932419e-05, 8.53188645751188393e-06, 1.27616620265669114e-04, -3.07660183064505199e-06, 1.77693877526996815e-05,
-1.21881433351298308e-04, 9.70820239258155421e-05, -6.88477447173295197e-06, 8.35812145959487023e-05, -7.08861142732914167e-05,
-1.95410408058430200e-05, -2.99815675113649160e-06, 5.30146506678979022e-05, -1.17983237948369116e-05, -4.06521074556727538e-05,
-1.35928793450611709e-05, -2.69206670526964770e-06, 2.37405849777586631e-05, 1.41027369716773706e-05, 2.38608811716672410e-05,
-1.04093815988561802e-05, 2.94018573099677933e-05, 4.79097717318764199e-05, -3.04484990645996103e-05, -7.41822772705316389e-06,
-4.31780968615617526e-05, 6.00484819457901999e-05, -2.16148968238596922e-05, 2.63326485734068621e-05, -6.98149485535926799e-05,
6.37673262907134300e-06, -1.49451539851202210e-05, 5.16763312907252601e-06, -3.01509621222700420e-05, -3.38437301504128696e-05,
-3.09602298739826106e-06, 1.17686850815125304e-05, -1.46172096654267804e-03, 0.00000000000000000e+00, -1.04257220251350712e-03,
0.00000000000000000e+00, 3.37601615679230670e-04, 3.62179244244991653e-04, 4.66516969872935697e-04, 2.20896945250713200e-04,
-1.14856098350701606e-04, 3.71733378208419078e-04, -4.56528102625122800e-04, -5.00478119862720716e-04, 6.08268940632159427e-04,
-3.32928662560408225e-05, -5.59187320611888869e-04, 4.24940469217676927e-04, -1.54626662460820405e-04, 1.53803155025080491e-04,
1.42877804893037906e-06, 6.98532531440891971e-05, -2.98746773248649629e-05, 1.35471141341737106e-04, 6.98092718847611736e-05,
3.63862564501528970e-04, 1.77889982501028103e-04, -1.05830904220531507e-04, -5.61018978334430437e-04, -2.70461507638364820e-05,
2.69731733460872600e-04, 6.85854381210795444e-05, 3.93859632863456042e-05, -3.31099850163778212e-05, 3.15642194180260993e-04,
-8.55565884347129894e-05, -8.81178757452353422e-06, 4.14099579966528220e-04, -1.18125841112851310e-04, -1.58864732692415517e-04,
3.00173248333441702e-05, 2.77190872568433815e-04, -2.56765255788473531e-05, -1.57033171768035395e-04, -3.32959711484975829e-05,
-9.63927667599435235e-05, -2.54742433883303236e-05, -6.50765457697475766e-05, 5.04018352818951719e-05, -3.43950512225536629e-05,
-6.17363546212169873e-05, 5.10273923307524849e-06, -5.84607735450458815e-05, 1.64379737466675901e-05, 1.29734901817078911e-05,
-3.92696914882976447e-05, -1.64041530160981709e-04, 1.42915901318080097e-05, 4.48109662215338665e-05, 6.40760478636463835e-05,
-4.00827654443697601e-05, 5.23179794399272952e-05, -2.72653980923539735e-05, 4.13038148568586624e-06, -6.86097916757893300e-05,
1.53031279669278410e-04, -3.76813873437484393e-05, -6.06148813378603305e-05, -6.39726082097255067e-05, 9.97952163664085433e-05,
-8.05566844538046094e-07, -1.79349356201000397e-05, -2.64035614102093801e-06, -2.27319992387671927e-05, 2.44803623725549528e-05,
-4.92446408524156795e-06, 1.69097417534366305e-05, -2.02331969300959902e-05, 2.23257754347340127e-05, 2.79953564079958715e-05,
-2.77971641526118441e-05, 5.31337018758826847e-05, -1.51685357707728206e-05, 1.21185601596955313e-05, -5.54255754132544848e-05,
3.39800800142221935e-05, -1.37705220101120503e-05, 1.17026527332457494e-06, -4.84099736084911341e-05, 1.72580930219210916e-05,
-3.67873286266726476e-04, 0.00000000000000000e+00, -9.71856035308778688e-04, 0.00000000000000000e+00, 3.68001000603857041e-05,
-1.80366306297578393e-04, 5.95465838399280006e-04, -9.73074587525231199e-05, 4.33035509414850597e-04, 8.68813550017956382e-04,
-3.55604219599788853e-04, -2.09149810167836517e-04, 6.05497606635874435e-04, -4.44285688213212702e-04, -4.96326090016681234e-04,
2.76200191743740885e-04, 1.05594362050475299e-04, -7.31746111760187581e-05, 5.25437405368234128e-05, -7.03636533238632066e-05,
-7.04810658251703114e-05, -2.21448446357462613e-04, 8.40919434072135200e-05, 3.61285642497185589e-04, 4.63859693039894900e-04,
9.95447465281579533e-06, -3.90334836566050476e-04, -7.15137273935237281e-05, 1.58344253289186405e-04, -9.66561524647479064e-06,
-2.88464063028901239e-05, 3.20394934323419382e-05, 2.27870727298711814e-04, -3.85003894403811674e-04, 3.95453114218767795e-05,
2.52344815518091095e-04, -1.28109809597042892e-04, -3.13591750088317250e-04, 4.95361157057811461e-05, 1.52566847685289017e-04,
-4.65342429065181135e-05, -4.37630316986734248e-05, -2.94250258841729114e-05, -2.88828323869860414e-05, 3.73909881626153694e-06,
2.72162890905132315e-05, -2.00735783121399998e-06, -8.45647849999474224e-05, 1.21455512759758114e-05, -1.54519685732128702e-05,
-4.95728310623586458e-05, 4.23491907495121640e-05, 1.22893175677633306e-04, -2.68419786355757812e-05, -9.60596847652382831e-05,
3.08820983081861631e-05, 5.83890486469687431e-05, -3.73708698488206477e-05, -5.19159241357444848e-05, 3.66386671593869911e-05,
5.07658846861618521e-05, -1.07304750005830703e-04, -2.83663556542631599e-05, 9.28807206358021626e-05, 3.70104011521805719e-05,
-8.34551268891536098e-05, -3.14113155589142528e-05, 6.63182318337119205e-05, 1.60213917824094198e-05, -3.52794936491844085e-05,
-1.59225419093221418e-05, -8.34046194147479916e-07, -9.65280581409041511e-06, 5.07677914813006063e-06, 2.03902166810200127e-05,
-1.25974535618156500e-05, 3.67496199937445797e-05, -1.69153230944175091e-05, -3.29180959908194180e-05, 2.52964761838148521e-05,
2.14550118421411021e-05, -2.55984106137294917e-05, -2.09892146802813526e-05, 1.45091691712559505e-05, 1.05889292279405406e-04,
0.00000000000000000e+00, 6.96557645777117211e-04, 0.00000000000000000e+00, -3.20653240139645156e-04, -3.06664898492693173e-04,
-1.30135967286087193e-04, -3.43685687318228197e-04, 6.99243111115629935e-04, 1.00931484720404399e-03, 2.27872845646686414e-04,
5.60556585522428805e-05, 5.06668770409637393e-04, -5.61098753829031857e-04, -1.77788812269638309e-04, -9.26838818560580326e-05,
4.80704370686056920e-05, -3.94480920452870476e-05, 1.13743624415380402e-04, -1.95593364550650988e-04, -8.22385939115209569e-06,
-2.22550243804433797e-04, 3.83433777349945372e-05, -6.14113903833953543e-05, 5.65029175348560203e-04, 1.64254592755116099e-05,
6.44997102970363238e-05, 6.58176612450044410e-05, 1.26948782028661410e-04, -6.85633288983039511e-05, -1.17595095165860504e-04,
-5.90185476888272837e-05, 1.31585913470637410e-04, -4.56978252250974911e-04, -1.00958846936701602e-04, -1.25259617920235096e-04,
-1.04798018922154108e-04, -2.72545293701832833e-04, 4.86208256378739653e-05, -4.49465427200034320e-05, -5.65278962179857657e-05,
5.46913188228785663e-06, -7.25997168582917762e-05, 1.14384344901122901e-04, 1.12924097562157112e-05, 3.68523306125718506e-05,
-1.58208335465920613e-05, 1.20613043672090303e-05, 5.27346073833204513e-05, -3.86529074265486920e-05, 4.46597253672119545e-05,
4.49755028762217115e-05, 1.30762541454545214e-04, -2.23656324639177317e-05, 3.19275114821177829e-05, 4.05961036565850809e-05,
5.72814922207066132e-05, -6.32001323493957027e-05, -2.11556776338600419e-05, -5.16301940103973931e-05, 4.71248075383639623e-05,
-1.16687520784574999e-04, 3.37705783718914737e-05, -3.55213809620370029e-05, 2.36245507648186426e-05, -9.39852209287609514e-05,
4.18229647627686027e-05, 2.05795533565095200e-05, 2.95759782556888409e-05, -1.11460217666459313e-05, 5.56781374858055805e-07,
1.61083673677120723e-05, -8.87804840750498273e-06, 4.69737707507023012e-06, -1.46943693829812711e-05, 8.96017347561271887e-07,
2.31898944912936817e-05, -5.75437116150547476e-06, -1.04050964809673511e-05, -2.31844808370536218e-05, -1.24228889211622706e-03,
0.00000000000000000e+00, 1.91447976012779097e-03, 0.00000000000000000e+00, 1.86361784351676802e-04, 1.22099836958390012e-05,
-7.18563451828412871e-04, -5.44913205591266835e-04, 2.62429988030197430e-04, 7.46591568526208975e-04, 5.58329937558502609e-04,
1.73536073229491603e-04, 3.28522185630468282e-04, -1.86008732903326717e-04, -5.28015697290392397e-05, -2.60360888337061416e-04,
3.38623159395887096e-06, 3.98523056007639166e-05, 9.85712987849502202e-05, -1.84923290917329212e-04, -7.71217348849064299e-06,
-5.95492370208864554e-06, 9.80226288250609149e-05, -2.85565844690997426e-04, 2.03773487125666412e-04, -7.62700465832047414e-05,
2.74605378426968504e-04, 1.01722822597336303e-04, 1.72888937367956423e-04, 6.14980529476756761e-05, -1.65564582674629617e-04,
-1.03937770636500405e-04, 1.79433136537534101e-04, -2.08448758771769422e-04, -1.89466752673463220e-04, -3.16495343152525463e-04,
-4.65119297713267725e-05, -1.06418923164135207e-04, 2.92133315556121309e-05, -6.26522370914165365e-05, -3.80204692959265470e-05,
-3.19351411420031736e-05, -2.69623453745025131e-05, 1.37371381422677307e-04, -2.75022603732538636e-05, -8.32319716531201625e-05,
-1.83373351979320508e-05, 5.83418131216442243e-05, 3.02271302751488504e-05, -4.98112931491525709e-05, 9.55320075053375307e-05,
5.27885328323068648e-05, 1.74669745949123195e-05, 7.07665598251270749e-06, 7.65295271797020177e-05, -2.16827317655175404e-06,
2.56158486391027717e-05, 3.90319152054964128e-06, 1.09187600520226411e-05, -7.09932774164822179e-05, -3.10808798303788108e-06,
-1.99276187654574111e-05, 6.66283232503938456e-05, -9.53193663619292649e-05, -1.38192357228852599e-05, -5.06310999643882654e-05,
5.41699610443037853e-05, -3.01513898130062012e-05, 7.50384806164352122e-06, -2.46089181875213920e-05, 2.59233801595598333e-05,
3.61281563025534099e-05, 1.03245043482577200e-05, 1.06651433549918202e-06, -2.36670929937189898e-05, 1.18133123540063415e-05,
-2.37752112057859405e-03, 0.00000000000000000e+00, 9.79902373011075313e-04, 0.00000000000000000e+00, 6.24243707435149868e-04,
5.32552953373556688e-04, -3.43350821058730849e-04, -2.74480805820874235e-04, -2.27192880699002904e-04, 2.78499590851373610e-04,
2.16286114391411107e-04, -1.60014133917291410e-05, 3.34567174557116290e-04, 1.63861606954495299e-04, -7.32105805604817811e-05,
-2.75173445122268732e-05, -1.63823844717904518e-04, 1.54240508845202994e-04, 2.27247826319914723e-05, -1.25891429989861308e-04,
-7.50300602967604688e-05, 2.19336099049784612e-04, 5.12062944564588537e-05, -1.20931381190694310e-04, -3.93305054302574525e-05,
-1.85764088661301817e-04, 1.26452686799904506e-04, 8.28267314219328091e-05, 1.70060420266698105e-04, 1.85986806711261124e-04,
-1.26597460571993109e-04, -6.99927087500373682e-05, 2.43504463420420004e-04, 8.90929191691563495e-05, -1.08361903761964912e-04,
-1.22129315467521012e-04, 3.69685678194193193e-06, -9.76853026011532927e-06, 2.31262017597801630e-05, 1.13627595483176917e-05,
-4.73528940188713203e-05, -6.48206454745550508e-05, -1.22100888451138691e-06, 7.56468638352087683e-05, -2.53416560145800336e-05,
-1.38940053681318499e-04, 7.20623765471817058e-06, 3.21809048129001281e-05, -2.21024328556184202e-05, -6.64125089630887160e-05,
3.94708805911000318e-05, 9.71077583953939775e-06, -3.54527000430615696e-05, 3.69577787600789033e-05, 2.78095735286460204e-05,
-5.72103304090500763e-06, -2.29889369505701688e-07, 4.82107116030443131e-05, -2.41508628637585772e-06, -2.63405093477893100e-05,
-5.39352079240862240e-05, 5.49021393227147052e-05, 1.62938702966068904e-05, -3.35135604887079182e-05, -5.53241700444050103e-05,
-3.74072324766078626e-06, 4.09192387408724616e-05, -1.27958514490034509e-05, -1.86071122399451600e-03, 0.00000000000000000e+00,
-4.75292082404548451e-04, 0.00000000000000000e+00, 3.68780932191134698e-04, 5.54191148812023461e-04, 2.46565766805826323e-04,
3.31614351952607561e-04, -1.71631555193545323e-04, 1.53116472177868300e-04, -3.93962061732021601e-04, -4.67407565386735021e-04,
3.81580763254471577e-04, 2.04730687941415503e-04, -1.01606503900109209e-04, 2.85959959364757792e-04, -1.79032452140105822e-04,
1.92416359225170601e-04, -7.84680634606176557e-05, 1.27965049428417914e-04, -8.79129716389746087e-05, 1.11181217880199307e-04,
9.05309967637526850e-06, 1.00254047693470205e-04, 4.69931316356031836e-05, -1.26891478535794204e-04, -2.36948343468677716e-04,
-4.48140930566895122e-05, 1.56053941255461314e-04, 1.62691879050438606e-04, -3.04275795445205909e-05, 2.34900095260012922e-05,
1.89834915726008312e-04, 4.41324083801779445e-05, -2.43723672445334893e-06, 2.63792044876342115e-04, 4.15153428121390933e-05,
-1.05194441751740605e-05, 3.07488334573277619e-05, 1.10224518899548499e-04, -4.91642006568435838e-05, -6.09507607897971724e-05,
2.34553756526172398e-05, -5.48126075903642140e-05, -1.20368960697293707e-05, -1.24150118293778319e-04, -1.48408936527305184e-06,
-2.32711453314438716e-05, -2.44128815133471698e-05, -8.80086425816799928e-05, -6.20023416923870383e-05, 1.39888880163119112e-05,
-2.63313922516788706e-05, 2.90497335887282418e-05, -5.35969666694607321e-05, 7.45670074227807885e-06, 6.05689174479715297e-06,
4.71747810724217328e-05, -7.45009495718939600e-06, 5.00189732462369597e-05, -4.37607562907335924e-05, 4.81409963763506648e-05,
-2.77590927613943195e-05, 4.52414041552540728e-05, -5.31259473640927006e-04, 0.00000000000000000e+00, -8.52598896055884966e-04,
0.00000000000000000e+00, -1.34885197765120801e-04, 3.96653458139192421e-05, 3.79863748404974581e-04, 4.72379949916368639e-04,
3.10022768658648959e-04, 5.69786980729471452e-04, -5.32004027356815690e-04, -5.51946785340620108e-04, 4.75232705602061337e-04,
-1.43688936593265289e-04, -1.34145640806652110e-04, 3.50186859951718285e-04, -9.73995300596363001e-05, 3.44420910592402329e-05,
-7.18080185080251102e-05, 1.60789183521345793e-04, -2.22624413329587016e-05, -1.28193723235865101e-04, -5.86367985071233234e-05,
1.73808458946174806e-04, 3.30813591969955861e-04, -2.71856805616303913e-05, -3.78174032231158770e-04, -5.90252957383779106e-05,
8.26749071828692322e-05, 4.95775684062529633e-05, 5.44580124316286832e-05, 4.66596997412812434e-05, 1.38805718688968211e-04,
-2.33571291413536304e-04, 1.03732179389248707e-05, 3.60726661880703256e-04, -1.47507354615690205e-05, -1.19512727220272909e-04,
1.74914259207988697e-05, 1.47486413543964701e-04, -3.32823665073807436e-05, -1.22842848319823202e-05, 1.43169594952067807e-05,
-7.76973814947431698e-05, -3.88223282922580738e-06, -6.06833041894285847e-05, 1.69396426346393996e-05, -1.68622586139392799e-05,
2.13089649442872411e-05, -4.32134801386761130e-05, -6.80517923313584582e-05, -7.35601065807071865e-06, 5.38945357647690934e-05,
-1.80635421990123584e-05, -7.24410824853465490e-05, -8.49791200553206016e-06, 2.38648729302909319e-04, 0.00000000000000000e+00,
-1.21834637822591509e-04, 0.00000000000000000e+00, -3.35292268503080285e-04, -2.25765584210752207e-04, 1.20333852013061409e-04,
8.76160017921376148e-05, 5.77938304508217315e-04, 7.60972878504902238e-04, -1.82272425178899499e-04, -1.60779267929980014e-04,
5.35448065399970162e-04, -3.79066952306616653e-04, -8.56199550095533123e-05, 6.92585641489698963e-05, -1.77063677568286815e-07,
-6.19787069144851961e-05, -4.12494051966487958e-06, 9.23467471398991294e-06, 2.20656813337354222e-05, -2.68841353591363623e-04,
-4.41569566824339039e-05, 9.39704392249946418e-05, 5.05686186431699705e-04, -1.34069787456886217e-05, -1.24401821560768692e-04,
-3.57022391309666403e-05, 3.18289650058353326e-05, -4.55877181661160831e-05, 1.88308936718896921e-05, 1.10332673498877904e-05,
8.26712109978732347e-05, -3.60749199807011971e-04, 1.66345821208051797e-05, 1.38102500835173112e-04, -5.00940250071407793e-05,
-1.95402563658848610e-04, -3.17286321063148396e-05, 1.79777030274422993e-05, 7.63370547491521362e-06, -1.10396898961960510e-05,
3.33369496271408800e-05, -3.04264250781569691e-05, -1.57216726797123306e-04, 0.00000000000000000e+00, 6.59370968572886660e-04,
0.00000000000000000e+00, -1.58158308265806205e-04, -1.39270436780774621e-05, -1.30148387599806405e-04, -1.89881255738238400e-04,
3.53165617144957002e-04, 5.52476715941731993e-04, 1.62507460835903910e-04, 1.96382682741124315e-04, 4.95030561024928590e-04,
-2.51538337834093535e-04, 1.01358288830775107e-04, -2.31117761155268212e-04, 1.61393344792953511e-05, 2.99917826599387518e-05,
7.51186147023420687e-05, -9.84683991244665293e-05, -3.13331160710574486e-05, -1.62522943150101489e-04, -1.23500835514879590e-06,
-1.33566023652081705e-04, 3.97104494240615893e-04, 5.35531200087193626e-06, 2.03178932800896107e-04, 2.04733048314890730e-05,
1.65109198739017411e-04, 3.56627616721475523e-05, 2.11796830261870299e-05, -2.55894236371568098e-05, -1.17754597691724491e-03,
0.00000000000000000e+00, 8.07133621695610274e-04, 0.00000000000000000e+00
};
#define ILCHAM 3128
#define NSTRON 10
#define NSMAX 31
#define NMSMAX 31
int main (int argc, char * argv[])
{
grib_handle * h;
size_t len;
GRIB_CHECK (((h = grib_handle_new_from_samples (NULL, "lambert_bf_grib2")) == NULL), 0);
GRIB_CHECK (grib_set_long (h, "centre", 85), 0);
len = strlen ("lambert_bf");
GRIB_CHECK (grib_set_string (h, "gridType", "lambert_bf", &len), 0);
GRIB_CHECK (grib_set_long (h, "biFourierResolutionParameterN", NSMAX), 0);
GRIB_CHECK (grib_set_long (h, "biFourierResolutionParameterM", NMSMAX), 0);
GRIB_CHECK (grib_set_long (h, "biFourierTruncationType", 99) , 0);
GRIB_CHECK (grib_set_double (h, "latitudeOfFirstGridPointInDegrees", 67.9372009520603), 0);
GRIB_CHECK (grib_set_double (h, "longitudeOfFirstGridPointInDegrees", 25.1580207144963), 0);
GRIB_CHECK (grib_set_long (h, "latitudeOfSouthernPoleInDegrees", 0), 0);
GRIB_CHECK (grib_set_long (h, "longitudeOfSouthernPoleInDegrees", 0), 0);
GRIB_CHECK (grib_set_double (h, "LoVInDegrees", 26.6400000000000), 0);
GRIB_CHECK (grib_set_double (h, "Latin1InDegrees", 67.3600000000000), 0);
GRIB_CHECK (grib_set_double (h, "Latin2InDegrees", 67.3600000000000), 0);
GRIB_CHECK (grib_set_long (h, "projectionCentreFlag", 0), 0);
GRIB_CHECK (grib_set_long (h, "bitsPerValue", 16) , 0);
len = strlen ("bifourier_complex");
GRIB_CHECK (grib_set_string (h, "packingType", "bifourier_complex", &len), 0);
GRIB_CHECK (grib_set_long (h, "biFourierResolutionSubSetParameterN", NSTRON), 0);
GRIB_CHECK (grib_set_long (h, "biFourierResolutionSubSetParameterM", NSTRON), 0);
GRIB_CHECK (grib_set_long (h, "biFourierSubTruncationType", 77) , 0);
GRIB_CHECK (grib_set_long (h, "biFourierDoNotPackAxes", 1), 0);
GRIB_CHECK (grib_set_long (h, "unpackedSubsetPrecision", 2), 0);
GRIB_CHECK (grib_set_long (h, "LxInMetres", 2000), 0);
len = ILCHAM;
GRIB_CHECK (grib_set_double_array (h, "values", values, len), 0);
GRIB_CHECK (grib_handle_delete (h), 0);
return 0;
}

13
tests/lam_bf.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/sh
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
. ./include.sh
exec $test_dir/lam_bf

894
tests/lam_gp.c Normal file
View File

@ -0,0 +1,894 @@
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "grib_api.h"
/*
* Test encoding of grid-point LAM fields
* Test FA conversion to grib_api
* philippe.marguinaud@meteo.fr 02/2016
*/
static double values[] = {
276.857846883478, 276.794176778727, 277.181087123710, 277.271328891367, 277.738150007595,
277.811501271569, 277.782801498740, 277.720243049346, 277.697362352800, 277.645937156907,
277.434690429892, 277.479415166828, 277.480779740851, 277.470370683483, 277.466233617218,
277.519636477424, 277.546507075768, 277.533196530853, 277.638535538066, 277.660223799155,
277.516239354148, 277.435042994882, 277.233848743540, 277.204873528392, 277.217411121384,
277.145056043542, 277.359707505178, 277.563426568591, 277.359606573371, 277.302689400583,
277.135925984483, 277.013670202527, 277.249004656066, 277.362196243717, 277.472882266866,
277.551374864505, 277.332048151829, 277.879973060166, 277.925942918285, 278.260846010953,
278.144732099878, 278.206939585072, 277.936934540523, 278.025569678971, 278.307756924958,
278.369318574429, 278.609267078466, 278.634490902502, 278.686706704875, 278.328553888493,
278.418908930386, 279.060194431430, 279.114168787979, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 276.922836958812,
276.932069336471, 277.225397205068, 277.545476457484, 277.807111956190, 277.768185575062,
277.713814690105, 277.662213334460, 277.653334089351, 277.591821807616, 277.519290878870,
277.499671640950, 277.471580060430, 277.398162354734, 277.371544952255, 277.453879058484,
277.474032112632, 277.458747675572, 277.588871038908, 277.540124772655, 277.464264615292,
277.039835665510, 277.050815441941, 277.165791541588, 277.284327024201, 277.353876090779,
277.399785414714, 277.512330802008, 277.438449711794, 277.419894070553, 277.165764618769,
277.034846715507, 277.230872118099, 277.277310155004, 277.272952146249, 277.486209474088,
277.453656185210, 277.613143953527, 278.070672412350, 278.079989482462, 278.338031969208,
278.163685044856, 278.214343856183, 278.255744502346, 277.941149161137, 278.165921759503,
278.022894706983, 278.499780589025, 278.158397461806, 278.611643581705, 278.438079674786,
278.816122996613, 278.628190436440, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.048057829677, 277.280372081890,
277.423859756998, 277.465672699176, 277.728939006340, 277.726575834584, 277.688480429396,
277.635385647721, 277.626062350091, 277.604239400215, 277.556926439833, 277.519394378669,
277.425044031161, 277.318865067295, 277.309205651263, 277.348943116883, 277.361861210203,
277.430978988228, 277.477408565654, 277.638923535542, 277.418799606607, 277.017513285449,
276.976808425920, 277.159242736589, 277.315106840602, 277.327868258207, 277.390541905514,
277.608373786211, 277.473011211489, 277.578037079299, 277.353975261579, 277.253195520645,
277.219244477693, 277.303161046293, 277.197720889628, 277.568280002996, 277.565774183730,
278.056333010069, 278.360857981015, 278.182020399473, 278.393376099219, 278.363774312832,
278.203283980677, 278.146185013281, 278.348861342242, 278.330399393385, 278.059284960522,
277.920499351734, 278.030061320993, 278.226766351540, 278.217750387710, 278.516389162421,
278.535938385310, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.255920436446, 277.480949345724, 277.444597425498,
277.647882845088, 277.496111688818, 277.670322939349, 277.765213822002, 277.666760657851,
277.656928637994, 277.678906056191, 277.667906868059, 277.539641562735, 277.369487702737,
277.285648882293, 277.326341650870, 277.351600146853, 277.359573895370, 277.493766228910,
277.649003177440, 277.460872384943, 277.243514998577, 277.056578101319, 277.226617780177,
277.271740370610, 277.294132332584, 277.308093611741, 277.378433184955, 277.570114302521,
277.548859645865, 277.723889890260, 277.429263433352, 277.272737053512, 277.398599847739,
277.309448997716, 277.328344724582, 277.207058029377, 277.696248070705, 277.835043755662,
278.062452681475, 277.850550227440, 278.265559859820, 278.272872090840, 278.465229599008,
278.217031341802, 278.386132964535, 278.224365564792, 278.232702192636, 278.099733855522,
278.082038386312, 278.064057694079, 278.385342869231, 278.700953905968, 278.673157999290,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.459327717938, 277.559547836427, 277.422638507574, 277.572825627337,
277.571463907280, 277.548694860479, 277.544037804342, 277.524653326012, 277.693130140178,
277.706143234839, 277.497931516767, 277.349914202908, 277.161676307980, 277.258114023397,
277.410663587516, 277.481076538026, 277.519833710823, 277.631696408897, 277.418308903785,
277.304804629716, 277.259147844963, 277.382350427133, 277.299040041596, 277.256710875078,
277.280373232168, 277.342518042564, 277.164290846344, 277.428166532894, 277.401545619979,
277.739369780501, 277.395945166703, 277.460368035024, 277.476322888924, 277.493513518766,
277.351824398612, 277.358401183558, 277.509306514214, 278.029530363332, 278.214265489018,
278.152451178774, 278.452249056059, 278.282135844771, 278.031146456185, 278.126155437803,
278.340924990343, 278.274408568623, 278.095792700955, 278.045155910991, 278.044971189736,
278.227690671411, 278.277414153890, 278.322932576059, 278.574745416009, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.352885697217, 277.465676965878, 277.313718088585, 277.571636446583, 277.752813057885,
277.876072319293, 277.600399390414, 277.629804333290, 277.509786900336, 277.350032286595,
277.710697230771, 277.302689293788, 276.964102591939, 277.129868245471, 277.506377821286,
277.620243311629, 277.670677617944, 277.590396381881, 277.259332104000, 277.282466682171,
277.510494889930, 277.420372093899, 277.372440940559, 277.334025248344, 277.133405320679,
277.432373537602, 277.458193421654, 277.573994485106, 277.560836748035, 277.504546294795,
277.722963359918, 277.429148743501, 277.415671650080, 277.296250262619, 277.426094729653,
277.013478567167, 277.173619712680, 277.722720050144, 278.152541665310, 278.471048817117,
278.595955610324, 278.466217631891, 278.437646585921, 278.321089675788, 278.198112904595,
277.952153564447, 278.065664545600, 278.357066253341, 277.965448681613, 278.124513612433,
278.162667811909, 278.277405316586, 278.574537792479, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.390479450263,
277.345673673084, 277.364302907561, 277.605928275352, 277.789929872344, 277.903984493908,
277.966933216759, 277.912882971090, 277.703988459187, 277.351015681331, 277.674063100141,
277.408395530420, 277.007259003699, 276.877336007904, 277.057623772846, 277.601455267293,
277.323874590069, 277.238673158792, 277.337325747808, 277.439493917521, 277.541788857115,
277.749810750892, 277.278504087019, 277.414256185858, 277.429899941764, 277.493551649852,
277.511929075685, 277.190651115649, 277.443504438646, 277.605668250438, 277.771466436681,
277.767262688689, 277.716100034677, 277.618374865972, 277.415460290735, 277.086306373890,
277.176226842383, 277.650329975958, 277.765271071796, 278.463221024006, 278.702998001410,
278.624355987396, 278.467009674144, 278.568028046137, 278.284237092204, 278.456297664446,
278.609188468591, 278.571107283134, 278.248413926530, 278.155161517380, 278.404700226527,
278.246987177160, 278.091060834030, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.419054703888, 277.313454081577,
277.427414463702, 277.682584699189, 277.791193561005, 277.837885785253, 277.920062626646,
277.919899324178, 277.689677224346, 277.410500912168, 277.630756408261, 277.629189004816,
277.397411408199, 277.319060037245, 277.402102256687, 277.322768000649, 277.822242558531,
277.887351499372, 277.454007146918, 277.676721339532, 277.602004218075, 277.714201570065,
277.566677175978, 277.587799289763, 277.530615330753, 277.556498697055, 277.452480002766,
277.522252203614, 277.645085515486, 277.845531596217, 277.946658451859, 277.602481754126,
277.727335587639, 277.560791900289, 277.284230600351, 277.484662737021, 277.763836962967,
277.845000815162, 278.010847594804, 278.693344887027, 278.809251065654, 278.723035732378,
278.424896815390, 278.623465372965, 278.347354282196, 278.788885219380, 278.765666653428,
278.053095427463, 278.334108537083, 278.163143059112, 278.791210402345, 278.564612083899,
278.156097707067, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.260418446226, 277.335071352700, 277.491938938790,
277.691206395263, 277.704209378278, 277.669286596309, 277.754719412166, 277.870079071509,
277.502780644528, 277.754473095834, 277.727974436459, 277.557807112427, 277.336457025286,
277.383919705566, 277.656951776528, 277.778531969694, 277.546679431981, 277.433886594239,
277.849054763829, 277.827905512882, 277.852324775739, 277.715592971272, 277.705949179344,
277.784233780020, 277.513796321220, 277.651505656888, 277.679417351708, 277.712133821933,
277.640023428435, 277.845573550891, 277.939074922095, 277.983471194163, 277.686692172136,
277.654194453924, 277.864032570137, 277.868319164885, 277.949388853803, 278.090141829888,
278.064378565379, 278.473111038064, 278.567543171754, 278.829326294043, 278.294846275015,
278.860106433048, 278.796593070403, 278.824386010090, 278.760223015153, 278.048034602279,
278.456786976534, 278.270707527732, 278.883481216381, 278.331828953117, 278.594265837323,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.265976322594, 277.170431045594, 277.485489657589, 277.518150163777,
277.594346099824, 277.525106574839, 277.660446242218, 277.653585064744, 277.344627321906,
277.549004645704, 277.850802344347, 277.583257392330, 277.353933834212, 277.483162324227,
277.802093742320, 277.620873269675, 277.778845766219, 277.705264213562, 277.541346709049,
277.429472445857, 277.832567758240, 277.874496054447, 277.713531133238, 277.960569830321,
277.669206881492, 277.755260958946, 277.586916719101, 277.841135564379, 277.718811273917,
277.786742393662, 277.829134182740, 277.760954990401, 277.727290357312, 277.802718821044,
277.926844650633, 277.940517920966, 277.860498676370, 277.948632515039, 278.482136788291,
278.576025918865, 278.759903750249, 278.682290037298, 278.803929269590, 278.813600952805,
278.879253548731, 278.646151177629, 278.776315233178, 278.693319468861, 278.379375494188,
278.648541321932, 278.852157864598, 278.997643614525, 279.027698942229, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.366680878019, 277.381150787692, 277.486313780854, 277.312232782158, 277.401101882668,
277.567697032357, 277.761418956830, 277.631564641376, 277.355216207498, 277.579622423646,
277.946803922538, 277.745864795866, 277.554670208171, 277.653554412702, 277.886277698790,
277.865648942958, 277.749235588755, 277.653323813329, 277.549350491474, 277.771809470937,
277.894339690909, 277.969462462647, 278.118951046477, 278.108173032796, 277.923612184096,
277.725656808996, 277.917004359488, 278.013510348155, 277.903413295852, 277.848269398192,
277.837731396906, 277.733960635088, 277.766101554254, 277.546687146201, 277.856867293302,
277.905478550194, 277.736223835135, 278.472986192106, 278.717220540209, 278.760841954155,
278.638659440517, 278.681901711759, 278.363012975511, 278.807884722018, 278.838462052377,
278.928798765744, 278.952453872397, 278.865733112592, 278.729566964511, 278.884998970494,
278.942907006798, 278.960762454434, 278.688569887665, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.591550421937,
277.499030877279, 277.305275168613, 277.541796080983, 277.195139366615, 277.331665964937,
277.445626505916, 277.215335680856, 277.530907774801, 277.843341282378, 277.963214149135,
277.927219319293, 277.797424178773, 277.813442210719, 277.933664495794, 277.858047474598,
277.696277323311, 277.361473125741, 277.479932829295, 277.389415841575, 277.553020377427,
277.924940171380, 278.159459379598, 278.037019105043, 277.914055069608, 277.647200588818,
277.916937939818, 277.909534469069, 277.749633166238, 277.904591816623, 277.826866398276,
277.903480594745, 277.699082807175, 277.688363481753, 277.605172407277, 277.842865865160,
278.021216292518, 278.414517122505, 278.681556989763, 278.680320091635, 278.574125022233,
278.370197434153, 278.734504756703, 278.493143759543, 278.779235286269, 278.935546444982,
278.663643683160, 278.899996705338, 278.900791563301, 278.879832866026, 278.858705900529,
278.815825789004, 278.824798215775, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.567216721718, 277.522475814565,
277.303456918119, 277.208997427907, 277.424224609638, 277.567326891009, 277.516826173608,
277.498907180864, 277.469773038402, 277.832555441150, 277.982833034908, 278.034185232461,
277.939076079863, 277.902634532238, 277.970739026974, 277.895772802147, 277.735591951345,
277.571305898374, 277.401061840836, 277.802603400487, 277.964968147081, 278.120946309288,
278.120357306337, 278.027951015641, 277.674224913903, 277.745718315661, 277.676284056601,
277.869144896292, 277.970562609159, 277.897871250900, 277.988896836592, 277.828464108029,
277.787944526233, 277.592034339979, 277.887975166605, 277.726333366592, 278.031409362000,
278.341449368467, 278.429430372404, 278.651974989787, 278.066148305173, 278.615426251337,
278.658109595447, 278.764842621618, 278.797171571925, 278.930322025553, 278.589836306622,
278.878563250804, 278.928365819420, 278.890061138998, 278.711334675770, 278.384119162997,
278.646351915830, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.663311094642, 277.507469698425, 277.389870268662,
277.406179041586, 277.420737084474, 277.458518864884, 277.735139471721, 277.538528827908,
277.851206036120, 277.883910964943, 277.957774069964, 277.977068942386, 277.944430734847,
277.548495261116, 277.973300201287, 277.918203113366, 277.766347699266, 277.602195991588,
277.779284913253, 277.876179934937, 277.970720881483, 278.083009243663, 278.104572434708,
277.809070170494, 277.861807626314, 277.891365545407, 277.598480819644, 277.808955771559,
277.877037325444, 277.848094780278, 277.931719704904, 277.914973085381, 277.584619210738,
277.926657140828, 278.195616408992, 278.085463190691, 277.980335449674, 278.380371866981,
278.427298049019, 278.662228114450, 278.596051250816, 278.616744598565, 278.803046455795,
278.791647475311, 278.497809355494, 278.866809060531, 278.869411961323, 278.852587248998,
278.873678034993, 278.840736102112, 278.718548564065, 278.079520049554, 278.242255144442,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.663037557399, 277.570818671989, 277.407747457760, 277.335813345664,
277.408696086859, 277.372137478768, 277.687262360450, 277.795853080682, 277.908241927909,
277.869637561962, 277.892224175058, 277.606701811400, 277.922429208801, 277.536273731865,
277.514854228159, 277.491556490133, 277.238066098239, 277.372640648916, 277.841348851264,
277.929444260057, 277.976213790096, 278.044032057611, 277.835719155503, 277.767503822122,
277.843943315539, 277.920171435982, 277.647907981291, 277.916193738411, 277.839013360636,
277.803033017271, 277.864319377224, 277.746027317625, 277.651770176824, 278.063583343182,
278.140685366536, 278.122090447834, 278.051809880199, 278.142408676546, 278.306266717218,
278.732451854741, 278.748488287575, 278.749619678915, 278.800360568621, 278.706276462243,
278.492046737934, 278.862935429038, 278.836729260372, 278.789661732480, 278.792523085067,
278.785266852082, 278.004813712433, 278.206206534037, 278.268595922962, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.655861325454, 277.470105519071, 277.399821904234, 277.079715748819, 277.206531740859,
277.468381791645, 277.363994499400, 277.823385911566, 277.933105323249, 277.866664229846,
277.852775583871, 277.877579704086, 277.963875663629, 277.928717010393, 277.828398792983,
277.296954832861, 277.401013285608, 277.627465823518, 277.658221668447, 277.774377222669,
277.868027943365, 278.023351410815, 277.746712993709, 278.009216578254, 277.993159001656,
277.680853664988, 277.661928822189, 277.876061141195, 277.861750611024, 277.598049579725,
277.828212743813, 277.655101339813, 277.951762031896, 277.838019817885, 278.179159164042,
278.237226454496, 278.178567686687, 278.271357845148, 278.743948910507, 278.860705502890,
278.683448271915, 278.784519721920, 278.823631988977, 278.720806055127, 278.798185740840,
278.751147075398, 278.657468304086, 278.445253830843, 278.647530368995, 278.649158962300,
278.320344550426, 278.521904549617, 278.418647841440, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.402768933310,
277.337648751023, 277.288997139047, 277.307430980466, 277.273543109168, 277.307022035080,
277.641453325741, 277.844770093515, 277.953627149863, 277.942556409526, 278.215884948157,
277.975149183501, 277.975145850398, 277.900981141501, 277.505402827533, 277.362760181571,
277.548236940679, 277.664353875572, 277.502568484867, 277.584445002441, 277.713270317726,
277.965355998582, 277.690792988212, 278.006179713121, 278.001384579859, 277.828691144649,
277.561216736042, 277.889988864492, 277.754326137754, 277.904050492162, 277.709121972134,
277.690236890821, 278.007302124024, 278.153784599132, 278.279221305941, 278.375074001404,
278.132932590898, 278.527166347114, 278.731939115244, 278.786940471844, 278.668914201410,
278.548949997938, 278.592784358004, 278.703220908555, 278.607776530910, 278.504228677905,
278.163645789480, 278.248484564569, 278.501193898172, 278.642560007634, 278.370053886907,
278.408249992376, 278.403262082509, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.207648756580, 277.331137219044,
277.479780517975, 277.377551184413, 277.272600399963, 277.500350726646, 277.705863349177,
277.864606993211, 277.966389026012, 278.042544067771, 278.322542195089, 278.031457007641,
277.941373758310, 277.636410155692, 277.858031016031, 277.252349029484, 277.532160327080,
277.374767480318, 277.358447349268, 277.596000095572, 277.677202591650, 277.510417183120,
277.771541403309, 277.999812504068, 277.710912956346, 277.651416447672, 277.782845548063,
277.920184623648, 278.100817677521, 277.830890386789, 277.549163570987, 277.924816153170,
277.939889612067, 278.226842544695, 278.334446154499, 278.384165815707, 278.595962695245,
278.279446869139, 278.639495704751, 278.773812076980, 278.436948614430, 278.920203762416,
278.841422131634, 278.427836855974, 278.741570912682, 278.508545454593, 278.339874209391,
278.557063084230, 278.416922724100, 278.706534660227, 278.334083779964, 278.643830203774,
278.639844363161, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.374416670460, 277.500945802563, 277.426407890967,
277.396874709479, 277.318086237064, 277.616856624914, 277.899994797892, 277.698238913389,
277.977172419143, 278.341279558064, 278.388060688379, 278.293360918814, 277.904418999468,
277.876108809024, 277.943923864864, 277.721133375911, 277.442202818399, 277.253739466136,
277.509607250232, 277.667492305596, 277.591852155885, 277.835292482825, 277.968936425109,
277.955535101385, 277.936720370208, 277.583707892174, 277.868800957519, 277.945079514213,
278.033236526786, 277.903343895031, 278.056619912872, 278.157071041598, 278.283239136885,
278.176795659042, 278.214399736990, 278.377534497257, 278.505800329270, 278.397309694119,
278.669295404261, 278.768294086585, 278.677030612244, 278.800406330589, 278.667560270694,
278.786628105936, 278.570032149640, 278.492115471478, 278.447513823625, 278.631423391505,
278.397821811388, 278.495161908060, 278.272485916042, 278.556447973070, 278.677966110168,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.317281721922, 277.505968584604, 277.114499942864, 277.204273695860,
277.333957324466, 277.623957317731, 277.644603479615, 278.000151120404, 277.641642354499,
278.324675421874, 278.417063688056, 278.331839246209, 277.968470256881, 277.964794190107,
278.037060222090, 277.649723985672, 277.168203186638, 277.143187050201, 277.273553266251,
277.552393261269, 277.634517104997, 277.802271465379, 277.881739212292, 277.940910603072,
277.879001692426, 277.745720318329, 277.913410218013, 278.101729803357, 277.802314274772,
277.915739600581, 278.217977656900, 278.416638900017, 278.379485432682, 278.328422581059,
278.343399135787, 278.412171676156, 278.436343517073, 278.543604914389, 278.063377717316,
278.540875146925, 278.533646068312, 278.735677942685, 278.780712168233, 278.761366160987,
278.038154721897, 277.866532120266, 278.165321893048, 278.680388296020, 278.573200036194,
278.586831345728, 278.488241868816, 278.717947283378, 278.836911122056, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.480116247201, 277.368756132519, 277.384832941860, 277.308509322704, 277.345442414908,
277.590676884641, 277.990539450091, 278.008983298761, 277.523442305010, 277.718274275941,
277.715931444292, 277.879291396559, 277.831199273422, 277.864571039565, 277.936717108059,
277.383879543378, 277.479777256307, 277.499848020363, 277.547859827789, 277.305533315021,
277.482950172282, 277.774397519738, 277.898868170053, 277.817079364159, 277.711025079660,
277.980058933637, 278.099658611097, 278.100938650431, 278.142922246411, 277.996704723186,
278.305020752925, 278.407688919361, 278.163649151564, 278.023096003471, 278.332110722164,
278.268480918882, 278.421591670262, 278.546119434891, 278.568382938671, 278.587036101537,
278.647194694244, 278.632463274801, 278.809178187614, 278.560416104309, 278.581259006153,
278.321975280033, 278.397446094076, 278.464681382615, 278.596423306474, 278.667946458021,
278.738020433360, 278.814420875995, 279.011631604617, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.428218736626,
277.508626172290, 277.415642785172, 277.326956949725, 277.422044581352, 277.628551397821,
278.032568055647, 277.613158572540, 277.713901836099, 277.885738420719, 277.917749048996,
278.013884830796, 277.837463066963, 278.076080916673, 277.808832386222, 277.917564486129,
277.577955670404, 277.241692902309, 277.577689403392, 277.226372942221, 277.416783611213,
277.772320420235, 277.599211176025, 277.836487250781, 277.809253831983, 277.951052110206,
278.127684219100, 277.805451324327, 278.205782665344, 277.865170697282, 278.375832904428,
278.485020997838, 278.294257990030, 277.778871781181, 278.041861178526, 278.230259905805,
278.579538089333, 278.512225093511, 278.620858449128, 278.484717004610, 278.559119647309,
278.617542855681, 278.820763331162, 278.736385000030, 278.489854683578, 278.188909713201,
278.004895490409, 278.007836877641, 278.638253545765, 278.730478954238, 278.787710783790,
278.859125519494, 279.227392202470, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.393891145112, 277.465694686045,
277.467507921517, 277.411878635866, 277.504059151580, 277.630651160882, 277.879970074861,
277.995167439470, 277.902552985162, 277.839877260391, 277.886479575329, 277.964201298207,
277.748472501319, 278.029116825528, 278.009583787838, 277.934526840383, 277.918798670404,
277.415532843179, 277.226805056122, 277.387098345780, 277.370489382575, 277.592402088486,
277.700296833394, 277.892605230371, 277.891485508185, 278.129626663091, 278.237884596150,
278.280404041963, 278.283057722739, 278.176984809500, 278.428645957507, 278.109976506484,
278.299865428307, 277.995343116520, 277.977547389843, 278.172188036825, 278.514038655551,
278.675018218984, 278.625249773115, 278.608351762487, 278.536197132141, 278.726854763747,
278.805234471385, 278.674105241850, 278.663153403020, 278.298350908914, 278.124861199903,
278.252964651486, 278.482059693182, 278.696680548966, 278.654309837275, 278.837647755382,
278.841089485443, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.328655950263, 277.427619472960, 277.487446231366,
277.482177271494, 277.494902394691, 277.591252248805, 277.971747475921, 278.009447854320,
277.958400013211, 277.920394743774, 277.910344201103, 277.904280958818, 277.937158186883,
278.076707899491, 278.062378531395, 277.668974757625, 277.800233651596, 277.541009600309,
277.635857852503, 277.317816179233, 277.324195107430, 277.304573477618, 277.583966858675,
277.801468375244, 277.858184963214, 278.015052891651, 278.279565568836, 278.150440976593,
278.333103904681, 278.001182976533, 278.378488809734, 278.398697539971, 278.106032442229,
277.965961371387, 278.143415892015, 278.377058446346, 278.574510298617, 278.436449113920,
278.556672883167, 278.474960861679, 277.671139137360, 278.608670196079, 278.823152806552,
278.860633331916, 278.712151986816, 278.295366943143, 277.973512496151, 278.147084138199,
278.272905044223, 278.608690016513, 278.742172545861, 278.836415342435, 278.950088390739,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.310255947307, 277.438715269565, 277.535027802511, 277.514844555789,
277.462658101701, 277.525339149085, 277.905885035111, 278.029200074722, 278.012440418427,
277.996696426728, 277.957260620693, 277.882273913448, 277.923722117905, 278.057432597146,
278.044128097293, 277.761271445925, 277.825323905342, 277.691879001328, 277.446628829196,
277.285529192993, 277.207992853587, 277.564191085190, 277.712353241969, 277.873266532172,
278.065423477158, 278.272705886866, 278.158741722804, 278.295227598450, 278.196699266996,
278.353184502646, 278.349997851807, 278.141054038599, 277.886475692701, 277.859485979835,
277.988073922406, 278.056957014442, 278.165448109257, 278.437202004743, 278.532793916627,
278.729865755553, 278.336824160806, 278.305882985596, 278.713096825648, 278.851216364801,
278.766735587507, 278.187401602110, 277.936089073750, 278.098752788839, 278.239953058972,
278.622711192950, 278.843801280644, 278.884179584854, 278.970925282742, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.333993153785, 277.421151644708, 277.494771266272, 277.504859778772, 277.471450172707,
277.495380050697, 277.897156708496, 278.087047727013, 278.045437799738, 278.056224065926,
278.016178427298, 277.909517544432, 277.875464078132, 277.670207024597, 277.846114070057,
277.728674807606, 277.481683080213, 277.678434290214, 277.452220611572, 277.118933743421,
277.289809580767, 277.553585984918, 277.846040916297, 277.958533555517, 277.851453386475,
277.929222688602, 278.241588928175, 278.028359727517, 278.357330703968, 278.540247369890,
278.402603488606, 278.262877702620, 278.294646895428, 278.106029411922, 277.786973188420,
277.901937357612, 278.009410152606, 278.354845055124, 278.644262693781, 278.840216526960,
278.726204045146, 278.600937232653, 278.803160024776, 278.814239641429, 278.406107089989,
278.204915060477, 278.086114594041, 277.967943887986, 278.030839062421, 278.631386341730,
278.299910112812, 278.884560848832, 278.886180066033, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.403818020342,
277.385736612011, 277.419079763626, 277.484883608931, 277.520716730724, 277.513550730617,
277.891587970187, 278.087015712643, 278.064211437361, 278.083756882686, 278.081608204113,
278.004930191931, 277.667983116988, 277.465515703008, 277.770465817560, 277.486273012311,
277.812487190729, 277.521348154187, 277.263007792215, 277.559643310698, 277.428266858300,
277.713431147430, 277.934927582205, 278.100297973144, 278.141264584283, 278.086993250781,
278.379658327306, 278.359962783622, 278.333521305086, 278.570844647226, 278.406928088404,
278.423636196882, 278.392152949565, 278.201452070097, 277.856477990354, 277.873435248789,
278.096769778375, 278.407680402316, 278.908043981651, 278.827575506572, 278.712139062362,
278.769591044403, 278.756261553376, 278.826156376636, 278.419163229658, 278.090389246096,
278.124356160438, 278.035593626588, 278.254910218263, 277.366924718560, 278.253233151469,
278.902280750162, 279.023193013234, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.489905843838, 277.288144403828,
277.451382178926, 277.543372549140, 277.562640697184, 277.535439380058, 277.787699174599,
277.995109516110, 278.012353528589, 278.018214990669, 278.026842232206, 278.025758889394,
278.001468911932, 277.958981418954, 277.934824068020, 277.751018859661, 277.513289938194,
277.478190521822, 277.696713037172, 277.504466132445, 277.486066884529, 277.853056781128,
278.077295875773, 278.234774297493, 278.327662456752, 278.433621081338, 278.296684198791,
278.342578057961, 278.285379040344, 277.983925074627, 278.248926266098, 278.525007446921,
278.445876128392, 278.104398493173, 277.910536085917, 277.940945008878, 278.081826796893,
278.529637105590, 278.698715957456, 278.794762804276, 278.861716433298, 278.335244079482,
278.692137237630, 278.680804581213, 278.556629862749, 278.398770705898, 278.455259276313,
278.292491405216, 278.409341863253, 278.567127873446, 278.775114227671, 278.952795140027,
279.084767747687, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.524648375830, 277.496311267119, 277.564912458774,
277.619013556894, 277.606746819707, 277.595920519719, 277.854151971529, 278.023987432708,
278.002073841870, 277.986021680999, 278.024941876269, 278.000914649286, 277.592433020840,
277.681860660305, 277.885631704720, 277.778259318705, 277.871014021210, 277.876428015559,
277.788723284443, 277.787820645805, 277.938530551964, 277.864376078717, 278.173275923391,
278.289334853041, 278.451226379450, 278.501430038586, 278.374869508469, 278.453566275875,
278.262940769041, 278.201339865362, 278.504357434437, 278.550458514972, 278.415280015529,
278.309083469218, 278.099364666955, 278.034272070086, 278.181290664566, 278.418559586295,
278.627322595506, 278.729885168807, 278.788171788983, 278.676468137618, 278.430465953748,
278.583736392926, 278.738818934276, 278.497103463576, 278.513281650723, 278.121679354076,
278.516294602332, 278.829577561129, 278.956682360007, 279.057955060579, 279.348107461088,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.474572686648, 277.620526101819, 277.579876191216, 277.360462826964,
277.549474136816, 277.588274409193, 277.894949427885, 278.083728110620, 277.555347984217,
277.733247247895, 278.015445953589, 277.664549184972, 277.226566090387, 277.319835583899,
277.669759532369, 277.815087621214, 277.874161852679, 278.107783063761, 278.140316595456,
278.161088443851, 278.102908173169, 278.119213950167, 278.224356967513, 278.368545269317,
278.424386685907, 278.174769159603, 278.434721663051, 278.475700763337, 278.510069020504,
278.551175436030, 278.571361830045, 278.638092447369, 278.646605205673, 278.513270253124,
278.141327144780, 278.115950680075, 278.337373363097, 278.274464616686, 278.499148651879,
278.595423351542, 278.569133302757, 278.443504364184, 278.470116786663, 278.405474202063,
278.476174607142, 278.351734796539, 278.057044240619, 278.525864307774, 278.636236054564,
278.673533956426, 278.958480628853, 279.107513277297, 279.177226197697, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.580570122543, 277.634318472725, 277.659616485035, 277.618057346549, 277.522030659488,
277.362267071782, 277.372186333198, 278.055229170801, 277.784391394722, 277.537574683026,
277.784340466299, 277.547947537627, 277.451990151210, 277.480643933265, 277.666856164943,
277.711808172746, 277.673179528355, 278.161015825933, 277.956039470577, 278.147107822033,
277.923934558538, 278.104047544295, 277.992356939665, 278.206672410603, 278.508947854374,
278.256305068195, 278.356204246512, 278.556714187128, 278.604795250140, 278.664440436865,
278.766423700238, 278.736535640997, 278.720042846867, 278.499145050840, 278.185061618328,
278.500779492250, 278.288933571022, 278.296811610179, 278.411719697789, 278.517980608444,
278.463145591579, 278.387209307015, 278.498542676419, 278.586457379716, 278.312529862807,
278.273753392221, 278.452376606509, 278.515187531602, 278.424686213262, 278.745884182673,
279.143006916710, 278.919075152226, 279.321139034238, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.662378493687,
277.678435934163, 277.662375895032, 277.591158494953, 277.510569010252, 277.571350359624,
277.754121208130, 277.990973977522, 277.757628494100, 277.561287021943, 277.486634316690,
277.525042945477, 277.532619439937, 277.572471674363, 277.443489464657, 277.644319445620,
277.665981899947, 278.128702193914, 278.134993079919, 277.939643867877, 277.829674444778,
277.920407262541, 278.225109521812, 278.454420846245, 278.335636048648, 278.439755866968,
278.556282205556, 278.641783528936, 278.681789272875, 278.705946366072, 278.807551296203,
278.775139246657, 278.816740548483, 278.723779732785, 278.140623274423, 278.551611396458,
278.438468292334, 278.371046387243, 278.432387336449, 278.271114366293, 278.280713350360,
278.328592293660, 278.509010393596, 278.315046309223, 278.168349319322, 278.279893722304,
278.388489929202, 278.028546414610, 278.067008312878, 278.735603677916, 278.875197099938,
278.916380807791, 279.081185555734, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.675564771386, 277.635443490043,
277.555593388636, 277.474215655524, 277.508785537502, 277.559272826965, 277.898963108355,
278.160478537993, 277.698446328836, 277.535506294291, 277.650670399939, 277.713715654254,
277.734628640441, 277.634344419146, 277.955083825013, 277.839312734512, 278.032298048669,
277.878980044522, 277.940977547635, 278.228734022884, 278.183322722407, 278.317956053497,
278.223938712345, 278.281454807630, 278.286552318883, 278.286369796342, 278.414024043537,
278.659360323843, 278.716814326172, 278.768624030203, 278.839142757595, 278.825723621249,
278.854881582904, 278.492476448520, 278.560515417031, 278.575788272122, 278.498507193087,
278.406864865871, 278.466947148140, 278.325092661631, 278.469051212641, 278.408787619500,
278.661902048190, 278.661367318075, 278.459305901808, 278.222284106910, 278.377818887784,
277.959327267209, 278.623834307258, 278.738685964726, 278.800554549259, 278.851954436327,
278.995254298110, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.584969222118, 277.627926693726, 277.432600717237,
277.459047042982, 277.597393070604, 277.234297430406, 277.627802486716, 277.768761653507,
277.858521156621, 277.718058564950, 277.536424253963, 277.886264022321, 277.953425182639,
277.898146408245, 277.845543290783, 278.043517097872, 278.101299101003, 278.285342963779,
278.272056517909, 277.993274994819, 277.857694108392, 278.387036994248, 278.124588570184,
278.166963674206, 278.394923902234, 278.402876708228, 277.959213287923, 278.570898673058,
278.714369994443, 278.790925545959, 278.865460063705, 278.887653108598, 278.925165577904,
278.445683950808, 278.454662353423, 278.661881572607, 278.503970146357, 278.416849170500,
278.313604733026, 278.551157387306, 278.536725681615, 278.621164456571, 278.693420303848,
278.659085456184, 278.410157301715, 278.248100222314, 278.068519937287, 277.489258886793,
278.582901560003, 278.758730417454, 278.753965383538, 278.760787016072, 279.095432709613,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.617881541072, 277.711309115784, 277.528121492641, 277.692656014265,
277.729855515134, 277.324286569399, 277.806867446539, 277.771307124788, 277.941974315568,
277.793422663721, 277.560140843400, 277.640329086171, 277.719016393704, 277.775996718354,
277.776543735559, 278.069109429862, 278.047555848040, 278.042547866743, 277.879970814221,
278.078945404616, 278.172068463404, 278.338754643149, 278.107330216076, 278.112910048865,
278.445453513808, 278.413972889685, 278.281435948761, 278.688102249953, 278.748755950831,
278.825775954851, 278.864385587829, 278.887954649503, 278.923518570963, 278.497911197741,
278.577311671993, 278.567434824410, 278.538279003744, 278.579915443113, 278.528959489854,
278.497061723077, 278.590410175821, 278.685518588178, 278.714343026087, 278.633658175898,
278.394357807741, 278.239312017157, 278.085722164932, 278.380059590956, 278.739705486505,
278.694694263682, 278.672923745762, 278.696715687286, 278.853484672915, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.864490745271, 277.943292827263, 277.719654098130, 277.620485639589, 277.472319039130,
277.693129006556, 278.133689973093, 277.965457344363, 278.104287602920, 277.823621279948,
277.618839688350, 277.615190026184, 277.755976640115, 277.813120706528, 277.967931066943,
277.982623081629, 277.997140146694, 277.975617671251, 278.039568336506, 277.889611169291,
278.218105661708, 278.124968954386, 278.376454955636, 278.278665136291, 278.301183298592,
278.397428714062, 278.196778796572, 278.746656377329, 278.846907930532, 278.786561698973,
278.841304821452, 278.874397654021, 278.909276839009, 278.143937356126, 278.097256838341,
278.545815137404, 278.494309833488, 278.700417405390, 278.612579318198, 278.560830208376,
278.548054206682, 278.619008303868, 278.609079484424, 278.483923041726, 278.208681314237,
278.090402297370, 278.747716499947, 278.515614144343, 278.526325760542, 278.605377647849,
278.717274877437, 278.819420463325, 278.599577926182, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 278.068675398310,
277.997973826578, 277.749167591392, 277.971702730095, 277.895766091276, 277.766323744104,
278.114006780512, 278.215465587629, 277.865744497808, 277.621846139857, 277.619176720160,
277.665176866961, 277.892488116900, 277.825831734535, 277.991463449834, 277.928833353682,
277.746440198884, 277.792686927302, 277.910135077567, 277.533121937113, 278.131357931757,
278.388181942261, 278.402417692803, 278.227304284300, 278.415814342073, 278.378254025897,
278.601248279164, 278.758242092388, 278.847426423313, 278.280248973563, 278.725834255314,
278.842186363034, 278.868778923155, 278.494225795144, 278.020128379151, 278.679498884784,
278.912318616850, 278.814308937895, 278.701152379232, 278.573422817796, 278.532102069194,
278.542072630317, 278.495785291661, 278.388540928046, 277.931685199925, 278.182962322534,
278.499946233316, 278.539211829192, 278.586336069633, 278.553089371418, 278.596056981041,
278.533478404021, 278.457299600740, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 278.084632811174, 277.820012443785,
277.847308696263, 277.849503278643, 277.798568623574, 277.797575835420, 278.095663099731,
278.176160746854, 278.055153965908, 277.658857926577, 277.600990658349, 277.654026836536,
277.704990323093, 277.793048321917, 277.910121578336, 277.820873697740, 277.745501713345,
277.917800418041, 277.944391515021, 278.049145512055, 278.043694650275, 278.359223099294,
278.070771695770, 278.214994954607, 278.330759821265, 278.205028068094, 278.559361787443,
278.733217829340, 278.744268100279, 278.596208016795, 278.640483841563, 278.694916381717,
278.907613386036, 278.818024141397, 278.832740735832, 278.864929258857, 279.066035941021,
278.954370093400, 278.808689512194, 278.608053707239, 278.495744514278, 278.455081259502,
278.372791655716, 278.141900258419, 278.157538472382, 278.129509127672, 278.226019505944,
278.517786152116, 278.439174014992, 278.709414812548, 278.622228174999, 278.479038464346,
278.411419063810, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 278.059317675418, 277.775909541424, 277.981685147100,
277.820433102725, 277.757691649352, 277.791125337952, 278.114244862593, 278.017847302545,
277.739587601083, 277.595204498445, 277.444481155752, 277.508867798333, 277.654580807842,
277.801555631030, 277.946216001618, 277.717518898982, 277.766353468943, 277.682654248428,
277.981754049258, 278.135151366502, 278.237042418896, 278.307870507241, 278.340706625625,
278.321035354200, 278.320273358697, 278.158571181206, 278.405855009476, 278.698752162175,
278.489714021957, 278.447399946515, 278.208281541154, 278.274999857765, 278.742819250719,
278.267292067544, 278.472633364801, 278.954199073712, 278.507525942737, 278.740647038251,
278.712056316088, 278.578495872832, 278.539513494423, 278.291124747294, 278.285971725264,
278.217669844021, 278.204961536595, 278.111539468452, 277.987196715585, 278.301219174750,
278.308770143463, 278.450474529455, 278.387913656980, 278.345354979068, 278.308192795967,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 278.078766967738, 278.054694472586, 277.996546131957, 277.478107514078,
277.498293431515, 277.439272646630, 278.170812997380, 278.031766350648, 277.926719630068,
277.660631490707, 277.405466505229, 277.448131221500, 277.639980374018, 277.771980499881,
277.699632610951, 277.872363280302, 277.869398539167, 277.927769742648, 277.856196077938,
278.052767006803, 278.215030316361, 277.961917700862, 278.291818910231, 278.337805197442,
278.117323423329, 278.455733028684, 278.701018948664, 278.676322213600, 278.350822146256,
278.266243351366, 278.328051517560, 278.614915559626, 278.558300997375, 278.813314535584,
278.881108562772, 278.123693523522, 278.802821050470, 278.781438747715, 278.621781876457,
278.564387365762, 278.583461368131, 278.350036130682, 278.383351889379, 278.383019058144,
278.217555758541, 278.167422809838, 278.238477919987, 278.226153636247, 278.084761209123,
278.088484041540, 278.083492218972, 278.205027655804, 278.230216899737, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
278.045557859900, 277.849040307617, 277.906197759880, 277.593465692124, 277.699758481137,
277.871410461793, 278.058125626538, 278.204525836660, 277.952696685466, 277.738482364071,
277.391817333672, 277.414211293355, 277.713291394110, 277.795254016927, 277.757654239367,
277.707136929518, 277.820516499087, 277.833903133206, 277.958888974124, 277.727592050621,
277.979297315556, 278.041516057377, 278.241728050372, 278.352662301885, 278.378421828891,
278.668011089711, 278.720413573120, 278.293463018845, 278.471858803908, 278.456120759094,
278.451834597551, 278.400966141086, 278.228702595541, 278.199778173421, 278.229599019782,
278.763504882934, 278.797467161442, 278.406340958912, 278.639263357618, 278.738466024170,
278.356147734832, 278.377301134964, 278.324739430270, 278.365219303220, 278.277074392752,
278.246691447173, 278.325438536989, 278.410510194260, 278.004569449865, 277.972537483973,
277.956821946510, 278.172942728027, 278.345344049598, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.996969175390,
277.862497775047, 277.649762377272, 277.559149409384, 277.580356760509, 277.718009367429,
278.068756822897, 277.878009666029, 277.969360198421, 277.610090666218, 277.828347857057,
277.544325721216, 277.732583265551, 278.116016214294, 277.972299696618, 277.687262934771,
277.957182102556, 277.863999567218, 278.051999720662, 278.158060596001, 278.155762387840,
278.127890904723, 278.223511374158, 278.356916537157, 278.639719890896, 278.714037786705,
278.558389050067, 278.315362526995, 278.636748281842, 278.421360309160, 278.615746331257,
278.298886265158, 278.533659911339, 278.333792298766, 278.643055170670, 278.858025832867,
279.020835079354, 278.870273814320, 278.740600676717, 278.482283444293, 278.534910048501,
278.346778954967, 278.353117018506, 278.419908994646, 278.281125729824, 278.285144148911,
278.365767158905, 278.333351670498, 277.972629892376, 277.989686782478, 278.095826308077,
278.302698360631, 278.382668003966, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.875713517719, 277.634128413762,
277.832973471346, 277.448621515103, 277.593144967346, 277.620070785560, 278.022268231048,
277.650661530718, 277.728550931249, 277.789574269136, 277.607135652596, 277.558983827518,
277.867823445271, 277.980868124118, 278.152155038418, 277.872425545108, 278.032213134824,
278.055596269546, 277.794984263919, 277.846180947964, 278.137493702594, 278.095071965260,
278.130969913741, 278.103726648322, 278.796162214483, 278.772300848655, 278.550498461136,
278.394793765962, 278.623206154742, 278.611024899396, 278.578628218960, 278.276590748045,
278.468413343561, 278.450779339504, 278.554459701664, 278.806252974651, 279.013699273923,
278.748514001816, 278.788419863602, 278.642315613660, 278.454524896995, 278.491218667764,
278.463773729676, 278.435969444734, 278.300796479766, 278.136749416946, 278.373140364489,
278.132948804942, 278.027912210990, 278.148274414281, 278.336173789580, 278.280453796923,
278.416601405752, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.958466871634, 277.914274026264, 277.771935237925,
277.604840373088, 277.681191841525, 277.734814857704, 277.836253334677, 277.790546207519,
277.679698274453, 277.762322999726, 277.735323729530, 277.547356221084, 277.724659181931,
278.062792028695, 277.919073079645, 277.773076074541, 278.020996741625, 278.022325061818,
277.919346621275, 277.950865675377, 278.008524131751, 278.023480753982, 277.924336723588,
278.332258375312, 278.736366682898, 278.523695501482, 278.502092576710, 278.225439092820,
278.256232776798, 278.449499552010, 278.137549943998, 278.422050300432, 278.431511965178,
278.274661992411, 278.431568551580, 278.753808621318, 278.761885574921, 278.415607975957,
278.555121959527, 278.654993170504, 278.544139116180, 278.520795378936, 278.533770309691,
278.547957275597, 278.407434870158, 278.298762571130, 278.487164079960, 278.392357298054,
278.268034972770, 278.187199824354, 278.276694644393, 278.256517908057, 278.378067854440,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.976299775529, 278.042031136275, 277.464188145920, 277.771621894762,
277.784361473567, 277.859883815950, 277.814022087487, 277.852386883815, 277.843778414429,
277.700529593730, 277.720782097285, 277.895752429155, 278.233578251075, 278.276392982912,
277.953661711230, 277.591545218148, 277.985804556808, 277.938997069968, 277.916409711425,
277.888611552732, 277.925456871836, 277.977042887254, 278.082218353152, 278.472003946117,
278.646240659087, 278.404855822350, 278.163989456392, 277.954560473176, 278.556236453466,
278.296451614769, 278.277688882445, 278.374637286269, 278.332791290590, 278.203289210287,
278.562584129166, 278.329198281083, 278.823530241748, 278.763160870026, 278.543114999088,
278.556718492736, 278.657498589218, 278.499789731658, 278.592487422433, 278.649244580966,
278.669257850905, 278.201148346028, 278.586350077861, 278.457878133903, 278.245990792454,
278.112034510986, 278.055946777769, 278.159436781041, 278.294828313829, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
278.055463728037, 277.938769906207, 277.908616747506, 277.697182984726, 277.767438599440,
277.618954673948, 277.849284086165, 277.888500733412, 277.803726801356, 277.887984809149,
277.963831684250, 278.063254030007, 278.264222060266, 278.247209209771, 278.010146150856,
277.737515908542, 277.889412006510, 277.981344866797, 277.913904542254, 277.836061245756,
277.808859499689, 277.970758433246, 278.239527080226, 278.275624726729, 278.397363141215,
278.343527616747, 278.259845839951, 278.368292580968, 278.583172394714, 278.290379278148,
278.385955212872, 278.352217326569, 278.420090515247, 278.134725529508, 278.418675419067,
278.363034465810, 278.431779148022, 278.438454682849, 278.264539348808, 278.429698158323,
278.607118714023, 278.464672697985, 278.443469155020, 278.604002661624, 278.807929770258,
278.629594459038, 278.763699668360, 278.301897413578, 278.088831652212, 277.971815866599,
277.908876996953, 277.949580119805, 277.929385688745, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 278.164247814763,
278.017634128271, 278.126496201983, 278.041275562602, 277.963103307992, 277.882098915321,
277.832817052899, 278.194630071008, 277.940734107132, 278.028855985157, 277.589337692257,
278.007707016965, 278.159356263938, 278.097452374726, 277.964902829032, 277.890310856301,
277.995095341973, 277.660207908446, 277.786361546086, 277.815119589775, 277.914655235766,
278.276761510933, 278.028707200239, 278.334143087463, 278.232784850170, 278.182589303626,
278.197293256951, 278.305926587915, 278.318792747211, 278.484167044288, 278.357400768639,
278.328509261854, 278.448253183213, 278.163374893923, 278.104866385859, 278.044914087322,
278.173224770928, 278.338413210359, 278.380896912261, 278.730673471804, 278.450424564609,
278.503155223128, 278.491430165703, 278.474964969620, 278.246765035551, 278.931615118388,
278.559599207653, 278.156636961710, 278.008740658705, 277.932135871154, 277.822627679854,
277.736249285180, 277.878138412578, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 278.082480645173, 278.043241069493,
277.697041095551, 277.989863518743, 277.717897740312, 277.701839125518, 277.861708621096,
278.280953208980, 277.804372502188, 277.704826013697, 277.596403430525, 277.712365023901,
278.034041843709, 277.947346670070, 277.846022907482, 277.820870191912, 277.874461715493,
277.769161099427, 277.750268832592, 277.850701911325, 277.878534019060, 278.027904999404,
278.090516114696, 278.109187477565, 278.190939004850, 278.278788556568, 278.380627825278,
278.407390272678, 278.511725032938, 278.506674787575, 278.442874478011, 278.405398330435,
278.395518040659, 278.357905587250, 278.210737031126, 278.122068999623, 278.170689655080,
278.152435924905, 278.236404166308, 278.676963499355, 278.364031374287, 278.396399598455,
278.375591815009, 278.342047071761, 278.407524619964, 278.529076426794, 278.148144221518,
278.042521318864, 277.942078734795, 277.821562712711, 277.728530388654, 277.736969229001,
277.907471093473, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 277.819603551272, 277.828647314803, 277.754535652466,
277.824122707543, 277.762454320427, 277.748628587305, 278.031167797444, 277.857054897891,
277.780437750936, 277.673341198976, 277.580777138276, 277.728655867446, 277.897137734936,
277.750051876006, 277.442585133617, 277.536109280911, 277.666042104756, 277.637084619762,
277.954517294964, 277.933011800326, 277.638355177335, 277.771459546012, 277.907366166404,
278.038032680944, 278.223370782900, 278.077760957702, 278.513395348027, 278.519194273139,
278.542309039934, 278.482080267916, 278.340394482155, 278.341759181533, 278.301704207586,
278.255804929780, 278.195762993763, 278.152065600453, 278.109495057418, 278.225701450697,
278.493902456915, 278.637437629165, 278.359832350456, 278.305034727926, 278.296015493113,
278.356150546679, 278.036917652359, 277.636846916859, 278.031252957091, 278.053317552121,
277.856967881711, 277.828489726312, 277.819981618468, 277.859938918796, 277.956551311373,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 277.884653219230, 277.884698802114, 277.844277877433, 277.934802186492,
277.864463150351, 277.803952962222, 277.862512817816, 278.030331030810, 277.751952165263,
277.680464702272, 277.585446567641, 277.958894193742, 277.524642689383, 277.589772555767,
277.547487191290, 277.553287779719, 277.547903182893, 277.780326455565, 278.007585878669,
277.822118711121, 277.682976359764, 277.843136947080, 277.894178961775, 277.954909292289,
278.221226702389, 278.236512222249, 278.471628587781, 278.517076530718, 278.553486136797,
278.548068978131, 278.394215898281, 278.289120256620, 278.234843510822, 278.157199428167,
278.206792433064, 278.242705298579, 278.226263767876, 278.437906673139, 278.580162411397,
278.567277080119, 278.296662334949, 278.275257848275, 278.404346162035, 278.002008395328,
277.160000000000, 277.422452606158, 278.124308422995, 278.212576318432, 278.016005178567,
277.861666847072, 277.831807919342, 277.987901581353, 278.061939469824, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
277.932091130649, 277.951064758320, 277.839412458507, 277.841315615141, 277.806577252520,
277.842248927079, 277.988730868827, 277.881229491595, 277.827771128070, 277.852117171922,
277.977131550724, 277.890734880932, 277.363447936035, 277.674357318546, 277.874045802482,
277.619616361043, 277.959695749966, 278.034434774544, 278.011503092349, 277.792532523158,
277.883473108928, 277.906659808602, 277.859039495732, 277.950830457718, 278.150472303852,
278.280666827875, 278.497788485655, 278.510726053483, 278.601565268380, 278.496480151954,
278.430095137542, 278.316738350851, 278.171640925745, 278.099215960220, 278.139092052815,
278.217292849195, 278.260283772674, 278.395024109814, 278.411196388457, 278.432581257165,
278.381536736126, 278.363111710685, 278.429680484566, 277.793989872273, 277.160000000000,
277.160000000000, 278.256273592222, 278.264019723457, 278.140777061859, 277.960057434051,
277.915191160621, 277.936547331889, 278.099249337367, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.917465588048,
277.806536213298, 277.829468329766, 277.894769654517, 277.878874487338, 278.213198285885,
277.882881751217, 277.892374439465, 277.858339532912, 277.923051748953, 277.681370662730,
277.510761769121, 277.346031782172, 277.635591850736, 277.505752171465, 277.838565919297,
278.145230449989, 278.110256581579, 277.857261961129, 277.892771986443, 277.933046869362,
277.858290703051, 277.761688955039, 277.868954215183, 278.100209314485, 278.316913494119,
278.444218906419, 278.557360529658, 278.561171208143, 278.461978486569, 278.557371359122,
278.268552022994, 278.168263392393, 278.004287261093, 278.100378738598, 278.174276275285,
278.571381129483, 278.432024829889, 278.351912980210, 278.426658874171, 278.422291931680,
278.425551948989, 278.455607158869, 278.142898669707, 277.160000000000, 277.160000000000,
278.358691525700, 278.271973931751, 278.175217065772, 278.113413453687, 278.060115945570,
278.072147299547, 278.221325526498, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 277.947472331137, 277.986181501038,
277.984568003653, 278.110290656444, 277.897470824458, 277.874164089902, 277.898939913517,
277.902875083266, 277.889547948396, 277.798750008214, 277.895056427821, 277.559027635660,
277.397787394390, 277.415750853834, 277.795000812736, 278.022111292969, 278.209968407002,
278.081682250882, 278.091845240573, 277.941999949457, 277.909072268308, 277.784844781870,
277.659181293741, 277.950679245143, 278.025258482602, 278.291405558634, 278.461051894477,
278.543413260710, 278.637341256470, 278.536026584681, 278.345094023061, 278.314548843661,
278.141679812436, 277.941455855832, 278.086647453443, 278.112323026882, 278.109913998848,
278.098115462881, 278.381213778877, 278.424512212838, 278.401413477507, 278.394564786766,
277.894149214730, 277.375874807682, 277.160000000000, 278.149965464308, 278.077148773966,
278.225807651780, 278.284892879974, 278.351353534523, 278.240233215773, 278.349246487147,
278.349466760844, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
288.000000000000, 288.000000000000, 279.240455299468, 279.223818551588, 279.285849037670,
279.376293488344, 279.461192356391, 279.551808319930, 279.628646083334, 279.652829397263,
279.616525840893, 279.502069589155, 279.291108765522, 279.053106080215, 278.902689297837,
278.875704607117, 278.947740010309, 279.107704342158, 279.293681458493, 279.389614320839,
279.411224941796, 279.444212582782, 279.386698602138, 279.136632845345, 278.940936666674,
279.114221831018, 279.555753115819, 279.953434278201, 280.226196904095, 280.405256334886,
280.410401720828, 280.251580808077, 280.098019623178, 279.974301676744, 279.757509415710,
279.521564884780, 279.499039528544, 279.701996418489, 279.925134655518, 280.065775204607,
280.157363074379, 280.210875088178, 280.228483742292, 280.242147600516, 280.253696133409,
280.268103214047, 280.320185953974, 280.334307179838, 280.179831259660, 279.974644702474,
279.996541178206, 280.236144650250, 280.430297213138, 280.482837320704, 280.457167561948,
280.368438239921, 280.237631095078, 280.139468565491, 280.058914690017, 279.931995170108,
279.790325543831, 279.694221168621, 279.601661392615, 279.495094732655, 279.400305289408,
279.315406421361, 279.170992589248, 279.122968987120, 279.185857037526, 279.307459658628,
279.447414156257, 279.576963540092, 279.657803270340, 279.678727839839, 279.638593829489,
279.510130693798, 279.301628221226, 279.100500801839, 278.988560072117, 278.974724701028,
279.039385051036, 279.169048776781, 279.318322140061, 279.420543807447, 279.465423007055,
279.468796093395, 279.383211173889, 279.191917158746, 279.053391934990, 279.156356824790,
279.471311615411, 279.820168782296, 280.098305477953, 280.261471383277, 280.248379234602,
280.089100954212, 279.926106561752, 279.809077617043, 279.659975766627, 279.501440708651,
279.482574293529, 279.633677127367, 279.825485681103, 279.976645685896, 280.097276400764,
280.174628702763, 280.192294527831, 280.188521244807, 280.196296494675, 280.219850928100,
280.263243682879, 280.275020899592, 280.180917507803, 280.066804281795, 280.125290168672,
280.362949828249, 280.587574510106, 280.668985949904, 280.616788868068, 280.490498228663,
280.363864563528, 280.257412245478, 280.131064435118, 279.982362781387, 279.855843458162,
279.757509415710, 279.634477520736, 279.518134627486, 279.422430448960, 279.301399537407,
279.066598425575, 279.006454581005, 279.065626519341, 279.211698309147, 279.406079555854,
279.575362753355, 279.659346886123, 279.668951606549, 279.614810712245, 279.477714762361,
279.291623304116, 279.135260742427, 279.045559514167, 279.027379150504, 279.089638320405,
279.211583967237, 279.338331974281, 279.433350101348, 279.488062705201, 279.486633431328,
279.403907059567, 279.254061986738, 279.134288836193, 279.172764888850, 279.399447725084,
279.708456736394, 279.964353930589, 280.087328654609, 280.053540620255, 279.905525017983,
279.744302925125, 279.629846673388, 279.535743281599, 279.456733021908, 279.457876441006,
279.562213433724, 279.709028445943, 279.857215561080, 280.002143931787, 280.100420803284,
280.113627293870, 280.091559305273, 280.106995463100, 280.164566614698, 280.221223031018,
280.227511836058, 280.166796281940, 280.117915115488, 280.205157992687, 280.436986214863,
280.676989883592, 280.785042988379, 280.731302290760, 280.595006734245, 280.462141435025,
280.330190871084, 280.161879579817, 280.001686564148, 279.887230312410, 279.769572487197,
279.608579078159, 279.472969573104, 279.366345742189, 279.220731320023, 278.926872611765,
278.881364531654, 278.941165350494, 279.107361316429, 279.349823336219, 279.555124235315,
279.648370062780, 279.657231560791, 279.594858048980, 279.449300797769, 279.279102864990,
279.156814192429, 279.084607276373, 279.061052842948, 279.111248941363, 279.216443498405,
279.328441399081, 279.431749314611, 279.511274112896, 279.525624022579, 279.454617696576,
279.326783441388, 279.211183770552, 279.203065494955, 279.353482277333, 279.594915219935,
279.794384681630, 279.871851325538, 279.829087451263, 279.710686403636, 279.579536233063,
279.486233234644, 279.434950888086, 279.410081522698, 279.424259919517, 279.498524989950,
279.624358261716, 279.778090959479, 279.931023263874, 280.032330195982, 280.046737276620,
280.015807790012, 280.018609166803, 280.078867353282, 280.150102363105, 280.176515344275,
280.155247749047, 280.155933800506, 280.263815392429, 280.485638697495, 280.723469869937,
280.847759525920, 280.806825122202, 280.666184573113, 280.512566217259, 280.352087346816,
280.173428112710, 280.012091677942, 279.876825198616, 279.728295057749, 279.552723055209,
279.402363443785, 279.254576525332, 279.074545188308, 278.792063500078, 278.765650518908,
278.830882578465, 279.019032191087, 279.293738629448, 279.517277063162, 279.622357278294,
279.646254737448, 279.592056672189, 279.448328891536, 279.283562199474, 279.169791999195,
279.110905915633, 279.105703358736, 279.159043859671, 279.239997931829, 279.325754364200,
279.426489586758, 279.520307123772, 279.551522465155, 279.502412614884, 279.403907059567,
279.305458675206, 279.267725844962, 279.333072246429, 279.477371736632, 279.617554918081,
279.673753966761, 279.623843723122, 279.509902009978, 279.398532989806, 279.334215665527,
279.320437465393, 279.333072246429, 279.360399962878, 279.425917877209, 279.551751148975,
279.712973241832, 279.857558586810, 279.950404217590, 279.981390875154, 279.965840375417,
279.949546653266, 279.977160224490, 280.044278925559, 280.106423753550, 280.144328096658,
280.197382742819, 280.319728586334, 280.514567200681, 280.716094816753, 280.831294290905,
280.809912353767, 280.682078098579, 280.512966413944, 280.338595001456, 280.166338914300,
279.997684597304, 279.819425559882, 279.641966915829, 279.479658574828, 279.323296013139,
279.126284902505, 278.919611900491, 278.663943390116, 278.635872451253, 278.714768369034,
278.939335879936, 279.234966887797, 279.462164262625, 279.579536233063, 279.613667293147,
279.557754099241, 279.422258936095, 279.273099914724, 279.160301620679, 279.104045401044,
279.120339123194, 279.186371576120, 279.254633696287, 279.324610945102, 279.415912960099,
279.503327350163, 279.544947805340, 279.525223825895, 279.451873490740, 279.359942595239,
279.299512895895, 279.299970263534, 279.366460084099, 279.468510238620, 279.518877849899,
279.450730071642, 279.310718403058, 279.198949186201, 279.159386885400, 279.179282377710,
279.227706176523, 279.276816026794, 279.339704077199, 279.455246577080, 279.610637232536,
279.746761276187, 279.834861717709, 279.879798088271, 279.885629525673, 279.875395924743,
279.895577271828, 279.960923673294, 280.039133539617, 280.106137898776, 280.185090987512,
280.316469841904, 280.499531239539, 280.676532515953, 280.779268721933, 280.774980900315,
280.668928778949, 280.494271511687, 280.303091838455, 280.126605100635, 279.943315019181,
279.733497614647, 279.533456443403, 279.369032777070, 279.193232090709, 278.974724701028,
278.776684513206, 278.477337393277, 278.425769191944, 278.545142145805, 278.845003804328,
279.186257234210, 279.442668966999, 279.589884175903, 279.616983208532, 279.523623039157,
279.377551249352, 279.241884573341, 279.128514569747, 279.069113947591, 279.093354432475,
279.156013799060, 279.215357250261, 279.294424680907, 279.396417664474, 279.488805927615,
279.561470211310, 279.584338593276, 279.506586094593, 279.365716861685, 279.260465133688,
279.228049202252, 279.263152168569, 279.346850446563, 279.384926302536, 279.287735679182,
279.118681165502, 279.009884838300, 278.999765579281, 279.055793115096, 279.139091196406,
279.206552923204, 279.259093030770, 279.356112141259, 279.517105550297, 279.681186190900,
279.784379764520, 279.807991368899, 279.779234378578, 279.764598614120, 279.813822806301,
279.907468830450, 279.993796972370, 280.053540620255, 280.119458731271, 280.251409295212,
280.463342025078, 280.675217583990, 280.789616664772, 280.782813321138, 280.675389096854,
280.489526322429, 280.273134258080, 280.072292693467, 279.874195334690, 279.652486371533,
279.437866606786, 279.233594784879, 279.015659104747, 278.793149748221, 278.609916837722,
278.278039444447, 278.221211515262, 278.401014168466, 278.772568204452, 279.153212422270,
279.444384095647, 279.618984191954, 279.628074373785, 279.498410648040, 279.344049069773,
279.206610094159, 279.080376625709, 279.029322962971, 279.074373675443, 279.126685099190,
279.162645629830, 279.242742137665, 279.351767148686, 279.452445200289, 279.569245461179,
279.648770259464, 279.570846247916, 279.375721778795, 279.219645071880, 279.156013799060,
279.166704767629, 279.232965904375, 279.254862380107, 279.131601801312, 278.940307786170,
278.834598690534, 278.852035831783, 278.945624684977, 279.059509227166, 279.135375084336,
279.175966462325, 279.264581442442, 279.446042053339, 279.658031954160, 279.793812972081,
279.790782911470, 279.698680503104, 279.650028020472, 279.710629232681, 279.826171732562,
279.931480631514, 280.008375565873, 280.071149274369, 280.185319671332, 280.405427847751,
280.652120518204, 280.782241611589, 280.760745332541, 280.639542908123, 280.451907834096,
280.226482758870, 280.002544128472, 279.780835165315, 279.552780226163, 279.330785408232,
279.096041467356, 278.847748010164, 278.625009969819, 278.440576469267, 278.096350149730,
278.070394536199, 278.305481502805, 278.723172499407, 279.140120273594, 279.458219466736,
279.619441559593, 279.587482995796, 279.450272704003, 279.311976164066, 279.151897490307,
278.991590132728, 278.964262416279, 279.057565414699, 279.110848744678, 279.115708275846,
279.175451923731, 279.273671624273, 279.378923352270, 279.532427366214, 279.652257687714,
279.582966490358, 279.372234350545, 279.184370592698, 279.073115914435, 279.055564431277,
279.140348957414, 279.183455857419, 279.030009014430, 278.774740700739, 278.632785219688,
278.674634358685, 278.827795346899, 278.977697590684, 279.039842418675, 279.051848319207,
279.138576657812, 279.348279720436, 279.602690469803, 279.771058932025, 279.762711972608,
279.633848640231, 279.556153312503, 279.607664342881, 279.721663226979, 279.841322035614,
279.946287908836, 280.009804839746, 280.088243389888, 280.289885347869, 280.563848563817,
280.727185982006, 280.709577327893, 280.579627747373, 280.394736879182, 280.175657779951,
279.933024247296, 279.673182257212, 279.415970131054, 279.180025600124, 278.938421144658,
278.683210001922, 278.455841114229, 278.261631380386, 277.941131007138, 277.966000372526,
278.239391878925, 278.690642226061, 279.154870379962, 279.488577243795, 279.591484962640,
279.499382554274, 279.378065787946, 279.270984589392, 279.083235173455, 278.890283200620,
278.882622292662, 279.001137682198, 279.046359907535, 279.033553613635, 279.073458940165,
279.153498277044, 279.279102864990, 279.478858181460, 279.608007368610, 279.522536791014,
279.321638055446, 279.132745220410, 278.967120964025, 278.916810523700, 279.055735944141,
279.162588458876, 278.986158892011, 278.647764009875, 278.455212233725, 278.525875533999,
278.751586463999, 278.936991870785, 278.962775971451, 278.923213670651, 279.010285034985,
279.265381835811, 279.562499288499, 279.744017070351, 279.719890927377, 279.567816187306,
279.484632447906, 279.544033070062, 279.658603663709, 279.771058932025, 279.864419101400,
279.899522067717, 279.941314035759, 280.136266992016, 280.447905867252, 280.660295964757,
280.667213650302, 280.534005325352, 280.343283019759, 280.121574056603, 279.869335803522,
279.580336626432, 279.282304438465, 279.009084444932, 278.747527326200, 278.486313233198,
278.257286387813, 278.072967229170, 277.832734876621, 277.928782080877, 278.259516055054,
278.741524375934, 279.215242908351, 279.510416548572, 279.531626972845, 279.398304305986,
279.305801700935, 279.217586917503, 279.013715292280, 278.826308902072, 278.825336995838,
278.901088511099, 278.911836650623, 278.914523685504, 278.944767120653, 278.984443763364,
279.143607701844, 279.421115516997, 279.532198682394, 279.369490144709, 279.175623436596,
279.045273659392, 278.877476906720, 278.808128538409, 278.992847893736, 279.154127157548,
278.970494050365, 278.596996201912, 278.388550900295, 278.466303398978, 278.711623966514,
278.898973185767, 278.883880053670, 278.801782562413, 278.914009146910, 279.254004815783,
279.617497747126, 279.797872109880, 279.722920987987, 279.523508697248, 279.433064246574,
279.512074506265, 279.634420349781, 279.724636116635, 279.773059915447, 279.762197434013,
279.783636542106, 279.992196185632, 280.333335273604, 280.578827354005, 280.616388671383,
280.501589393916, 280.301891248401, 280.061601724898, 279.796328494097, 279.497438741807,
279.181626386862, 278.861812065073, 278.555661601509, 278.284156736622, 278.068336381822,
277.909000930477
};
#define ILCHAM 3128
#define NSTRON 10
#define NSMAX 31
#define NMSMAX 31
int main (int argc, char * argv[])
{
grib_handle * h;
size_t len;
GRIB_CHECK (((h = grib_handle_new_from_samples (NULL, "reduced_gg_ml_grib2")) == NULL), 0);
len = strlen ("lambert_lam");
GRIB_CHECK (grib_set_string (h, "gridType", "lambert_lam", &len), 0);
GRIB_CHECK (grib_set_long (h, "centre", 85), 0);
len = strlen ("lambert_lam");
GRIB_CHECK (grib_set_string (h, "gridType", "lambert_lam", &len), 0);
GRIB_CHECK (grib_set_long (h, "Nx", 64), 0);
GRIB_CHECK (grib_set_long (h, "Ny", 64), 0);
GRIB_CHECK (grib_set_double (h, "DxInMetres", 2500.00000000000), 0);
GRIB_CHECK (grib_set_double (h, "DyInMetres", 2500.00000000000), 0);
GRIB_CHECK (grib_set_long (h, "iScansNegatively", 0), 0);
GRIB_CHECK (grib_set_long (h, "jScansPositively", 1), 0);
GRIB_CHECK (grib_set_long (h, "jPointsAreConsecutive", 0), 0);
GRIB_CHECK (grib_set_long (h, "uvRelativeToGrid", 1), 0);
GRIB_CHECK (grib_set_long (h, "Nux", 53), 0);
GRIB_CHECK (grib_set_long (h, "Nuy", 53), 0);
GRIB_CHECK (grib_set_long (h, "Ncx", 8), 0);
GRIB_CHECK (grib_set_long (h, "Ncy", 8), 0);
GRIB_CHECK (grib_set_double (h, "latitudeOfFirstGridPointInDegrees", 66.7684949529709), 0);
GRIB_CHECK (grib_set_double (h, "longitudeOfFirstGridPointInDegrees", 25.1580207144963), 0);
GRIB_CHECK (grib_set_double (h, "latitudeOfSouthernPoleInDegrees", 0.000000000000000E+000), 0);
GRIB_CHECK (grib_set_double (h, "longitudeOfSouthernPoleInDegrees", 0.000000000000000E+000), 0);
GRIB_CHECK (grib_set_double (h, "LaDInDegrees", 67.3600000000000), 0);
GRIB_CHECK (grib_set_double (h, "LoVInDegrees", 26.6400000000000), 0);
GRIB_CHECK (grib_set_double (h, "Latin1InDegrees", 67.3600000000000), 0);
GRIB_CHECK (grib_set_double (h, "Latin2InDegrees", 67.3600000000000), 0);
GRIB_CHECK (grib_set_long (h, "projectionCentreFlag", 0), 0);
GRIB_CHECK (grib_set_long (h, "NV", 0), 0);
GRIB_CHECK (grib_set_long (h, "year", 2009), 0);
GRIB_CHECK (grib_set_long (h, "month", 5), 0);
GRIB_CHECK (grib_set_long (h, "day", 28), 0);
GRIB_CHECK (grib_set_long (h, "hour", 0), 0);
GRIB_CHECK (grib_set_long (h, "minute", 0), 0);
GRIB_CHECK (grib_set_long (h, "second", 0), 0);
len = strlen ("s");
GRIB_CHECK (grib_set_string (h, "indicatorOfUnitOfTimeRange", "s", &len), 0);
len = strlen ("s");
GRIB_CHECK (grib_set_string (h, "stepUnits", "s", &len), 0);
GRIB_CHECK (grib_set_long (h, "endStep", 3600), 0);
GRIB_CHECK (grib_set_long (h, "bitsPerValue", 16), 0);
len = strlen ("grid_simple");
GRIB_CHECK (grib_set_string (h, "packingType", "grid_simple", &len), 0);
GRIB_CHECK (grib_set_long (h, "numberOfDataPoints", 4096), 0);
GRIB_CHECK (grib_set_double_array (h, "values", values, len), 0);
GRIB_CHECK (grib_handle_delete (h), 0);
return 0;
}

13
tests/lam_gp.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/sh
# Copyright 2005-2015 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#
. ./include.sh
exec $test_dir/lam_gp