star-schiff

Library for estimating radiative properties
git clone git://git.meso-star.com/star-schiff.git
Log | Files | Refs | README | LICENSE

test_sschiff_estimator_cylinder.c (39106B)


      1 /* Copyright (C) 2015, 2016, 2026 Centre National de la Recherche Scientifique
      2  * Copyright (C) 2026 Clermont Auvergne INP
      3  * Copyright (C) 2026 Institut Mines Télécom Albi-Carmaux
      4  * Copyright (C) 2020, 2021, 2023, 2026 |Méso|Star> (contact@meso-star.com)
      5  * Copyright (C) 2026 Université de Lorraine
      6  * Copyright (C) 2026 Université de Toulouse
      7  *
      8  * This program is free software: you can redistribute it and/or modify
      9  * it under the terms of the GNU General Public License as published by
     10  * the Free Software Foundation, either version 3 of the License, or
     11  * (at your option) any later version.
     12  *
     13  * This program is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     16  * GNU General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU General Public License
     19  * along with this program. If not, see <http://www.gnu.org/licenses/>. */
     20 
     21 #include "sschiff.h"
     22 #include "test_sschiff_utils.h"
     23 
     24 #include <rsys/clock_time.h>
     25 #include <rsys/float3.h>
     26 #include <rsys/stretchy_array.h>
     27 
     28 #include <star/s3d.h>
     29 #include <star/ssp.h>
     30 
     31 struct result {
     32   double absorption_E;
     33   double absorption_SE;
     34   double scattering_E;
     35   double scattering_SE;
     36   double extinction_E;
     37   double extinction_SE;
     38   double avg_proj_area_E;
     39   double avg_proj_area_SE;
     40 };
     41 
     42 struct sampler_context {
     43   struct s3d_shape* shape;
     44   double cylinder_volume;
     45   double mean_radius;
     46   double sigma;
     47 };
     48 
     49 static void
     50 get_material_property
     51   (void* mtl,
     52    const double wavelength,
     53    struct sschiff_material_properties* props)
     54 {
     55   (void)mtl;
     56   CHK(eq_eps(wavelength, 0.6, 1.e-6) == 1);
     57   props->medium_refractive_index = 4.0/3.0;
     58   props->relative_imaginary_refractive_index = 4.e-3;
     59   props->relative_real_refractive_index = 1.01;
     60 }
     61 
     62 static res_T
     63 sample_cylinder
     64   (struct ssp_rng* rng,
     65    void** shape_data,
     66    struct s3d_shape* shape,
     67    void* sampler_context)
     68 {
     69   struct sampler_context* sampler_ctx = sampler_context;
     70   ASSERT(sampler_context && shape_data);
     71   (void)rng;
     72   *shape_data = (void*)((intptr_t)0xDECAFBAD);
     73   return s3d_mesh_copy(sampler_ctx->shape, shape);
     74 }
     75 
     76 static res_T
     77 sample_volume_scaling
     78   (struct ssp_rng* rng,
     79    void* shape,
     80    double* volume_scaling,
     81    void* sampler_context)
     82 {
     83   struct sampler_context* sampler_ctx = sampler_context;
     84   double sample;
     85   double sphere_volume;
     86   ASSERT(sampler_context);
     87  
     88   CHK(shape == (void*)((intptr_t)0xDECAFBAD));
     89 
     90   sample = ssp_ran_lognormal(rng, log(sampler_ctx->mean_radius), log(sampler_ctx->sigma));
     91   sphere_volume = 4.0*PI*sample*sample*sample / 3.0;
     92   *volume_scaling = sphere_volume / sampler_ctx->cylinder_volume;
     93   return RES_OK;
     94 }
     95 
     96 static INLINE void
     97 compute_intersection
     98   (double intersection[2], double E0, double SE0, double E1, double SE1)
     99 {
    100   double interval0[2], interval1[2];
    101   interval0[0] = E0 - 4*SE0;
    102   interval0[1] = E0 + 4*SE0;
    103   interval1[0] = E1 - 4*SE1;
    104   interval1[1] = E1 + 4*SE1;
    105   intersection[0] = MMAX(interval0[0], interval1[0]);
    106   intersection[1] = MMIN(interval0[1], interval1[1]);
    107 }
    108 
    109 int
    110 main(int argc, char** argv)
    111 {
    112   char buf[64];
    113   struct mem_allocator allocator;
    114   struct sampler_context sampler_ctx;
    115   struct sschiff_device* dev;
    116   struct sschiff_geometry_distribution distrib = SSCHIFF_NULL_GEOMETRY_DISTRIBUTION;
    117   struct sschiff_estimator* estimator;
    118   struct ssp_rng* rng;
    119   struct time t0, t1;
    120   const struct result results[] = {
    121     { 5.29715E-19, 4.28609E-22, 1.71856E-25, 2.19472E-28, 5.29715E-19, 4.28609E-22, 3.81205E-12, 4.22555E-16 },
    122     { 1.13812E-04, 9.18322E-08, 2.21384E-06, 2.82025E-09, 1.16026E-04, 9.45526E-08, 1.37239E-02, 1.52125E-06 },
    123     { 9.05619E-04, 7.28692E-07, 3.52032E-05, 4.47348E-08, 9.40822E-04, 7.71882E-07, 5.48945E-02, 6.08489E-06 },
    124     { 3.04018E-03, 2.43947E-06, 1.77116E-04, 2.24508E-07, 3.21730E-03, 2.65641E-06, 1.23512E-01, 1.36909E-05 },
    125     { 7.16810E-03, 5.73592E-06, 5.56304E-04, 7.03373E-07, 7.72440E-03, 6.41615E-06, 2.19576E-01, 2.43394E-05 },
    126     { 1.39261E-02, 1.11131E-05, 1.34971E-03, 1.70216E-06, 1.52758E-02, 1.27606E-05, 3.43087E-01, 3.80302E-05 },
    127     { 2.39373E-02, 1.90499E-05, 2.78123E-03, 3.49844E-06, 2.67186E-02, 2.24385E-05, 4.94045E-01, 5.47634E-05 },
    128     { 3.78116E-02, 3.00096E-05, 5.12017E-03, 6.42370E-06, 4.29318E-02, 3.62361E-05, 6.72450E-01, 7.45390E-05 },
    129     { 5.61457E-02, 4.44398E-05, 8.67959E-03, 1.08606E-05, 6.48252E-02, 5.49743E-05, 8.78301E-01, 9.73571E-05 },
    130     { 7.95235E-02, 6.27738E-05, 1.38147E-02, 1.72400E-05, 9.33382E-02, 7.95073E-05, 1.11160E+00, 1.23217E-04 },
    131     { 1.08517E-01, 8.54299E-05, 2.09215E-02, 2.60386E-05, 1.29438E-01, 1.10720E-04, 1.37234E+00, 1.52120E-04 },
    132     { 1.43684E-01, 1.12813E-04, 3.04347E-02, 3.77758E-05, 1.74119E-01, 1.49525E-04, 1.66054E+00, 1.84065E-04 },
    133     { 1.85573E-01, 1.45313E-04, 4.28269E-02, 5.30113E-05, 2.28400E-01, 1.96862E-04, 1.97617E+00, 2.19053E-04 },
    134     { 2.34719E-01, 1.83309E-04, 5.86064E-02, 7.23425E-05, 2.93325E-01, 2.53696E-04, 2.31926E+00, 2.57083E-04 },
    135     { 2.91645E-01, 2.27165E-04, 7.83160E-02, 9.64016E-05, 3.69961E-01, 3.21011E-04, 2.68979E+00, 2.98155E-04 },
    136     { 3.56865E-01, 2.77233E-04, 1.02531E-01, 1.25854E-04, 4.59396E-01, 3.99816E-04, 3.08777E+00, 3.42270E-04 },
    137     { 4.30879E-01, 3.33853E-04, 1.31860E-01, 1.61393E-04, 5.62739E-01, 4.91132E-04, 3.51320E+00, 3.89427E-04 },
    138     { 5.14178E-01, 3.97355E-04, 1.66938E-01, 2.03742E-04, 6.81116E-01, 5.96001E-04, 3.96607E+00, 4.39627E-04 },
    139     { 6.07243E-01, 4.68053E-04, 2.08431E-01, 2.53648E-04, 8.15674E-01, 7.15476E-04, 4.44639E+00, 4.92869E-04 },
    140     { 7.10542E-01, 5.46255E-04, 2.57033E-01, 3.11882E-04, 9.67574E-01, 8.50622E-04, 4.95415E+00, 5.49153E-04 },
    141     { 8.24534E-01, 6.32256E-04, 3.13460E-01, 3.79232E-04, 1.13799E+00, 1.00252E-03, 5.48937E+00, 6.08480E-04 },
    142     { 9.49670E-01, 7.26339E-04, 3.78455E-01, 4.56509E-04, 1.32813E+00, 1.17224E-03, 6.05203E+00, 6.70849E-04 },
    143     { 1.08639E+00, 8.28779E-04, 4.52783E-01, 5.44535E-04, 1.53917E+00, 1.36088E-03, 6.64213E+00, 7.36261E-04 },
    144     { 1.23512E+00, 9.39839E-04, 5.37230E-01, 6.44150E-04, 1.77235E+00, 1.56954E-03, 7.25969E+00, 8.04715E-04 },
    145     { 1.39628E+00, 1.05978E-03, 6.32603E-01, 7.56203E-04, 2.02888E+00, 1.79931E-03, 7.90469E+00, 8.76211E-04 },
    146     { 1.57029E+00, 1.18883E-03, 7.39725E-01, 8.81552E-04, 2.31001E+00, 2.05129E-03, 8.57713E+00, 9.50750E-04 },
    147     { 1.75754E+00, 1.32725E-03, 8.59440E-01, 1.02107E-03, 2.61698E+00, 2.32657E-03, 9.27703E+00, 1.02833E-03 },
    148     { 1.95844E+00, 1.47525E-03, 9.92605E-01, 1.17562E-03, 2.95104E+00, 2.62624E-03, 1.00044E+01, 1.10895E-03 },
    149     { 2.17335E+00, 1.63305E-03, 1.14009E+00, 1.34608E-03, 3.31344E+00, 2.95141E-03, 1.07592E+01, 1.19262E-03 },
    150     { 2.40267E+00, 1.80087E-03, 1.30279E+00, 1.53333E-03, 3.70546E+00, 3.30314E-03, 1.15414E+01, 1.27933E-03 },
    151     { 2.64676E+00, 1.97891E-03, 1.48159E+00, 1.73825E-03, 4.12835E+00, 3.68251E-03, 1.23511E+01, 1.36908E-03 },
    152     { 2.90597E+00, 2.16735E-03, 1.67741E+00, 1.96171E-03, 4.58338E+00, 4.09060E-03, 1.31882E+01, 1.46187E-03 },
    153     { 3.18066E+00, 2.36640E-03, 1.89117E+00, 2.20460E-03, 5.07183E+00, 4.52845E-03, 1.40528E+01, 1.55771E-03 },
    154     { 3.47118E+00, 2.57622E-03, 2.12379E+00, 2.46776E-03, 5.59497E+00, 4.99711E-03, 1.49448E+01, 1.65659E-03 },
    155     { 3.77786E+00, 2.79699E-03, 2.37621E+00, 2.75208E-03, 6.15407E+00, 5.49762E-03, 1.58643E+01, 1.75851E-03 },
    156     { 4.10102E+00, 3.02889E-03, 2.64937E+00, 3.05839E-03, 6.75039E+00, 6.03099E-03, 1.68112E+01, 1.86347E-03 },
    157     { 4.44100E+00, 3.27205E-03, 2.94421E+00, 3.38755E-03, 7.38521E+00, 6.59822E-03, 1.77855E+01, 1.97147E-03 },
    158     { 4.79810E+00, 3.52665E-03, 3.26169E+00, 3.74039E-03, 8.05979E+00, 7.20030E-03, 1.87873E+01, 2.08252E-03 },
    159     { 5.17263E+00, 3.79282E-03, 3.60277E+00, 4.11772E-03, 8.77539E+00, 7.83819E-03, 1.98166E+01, 2.19661E-03 },
    160     { 5.56489E+00, 4.07070E-03, 3.96838E+00, 4.52037E-03, 9.53327E+00, 8.51284E-03, 2.08733E+01, 2.31374E-03 },
    161     { 5.97518E+00, 4.36043E-03, 4.35950E+00, 4.94911E-03, 1.03347E+01, 9.22518E-03, 2.19575E+01, 2.43392E-03 },
    162     { 6.40378E+00, 4.66214E-03, 4.77708E+00, 5.40474E-03, 1.11809E+01, 9.97612E-03, 2.30690E+01, 2.55714E-03 },
    163     { 6.85097E+00, 4.97595E-03, 5.22207E+00, 5.88800E-03, 1.20730E+01, 1.07665E-02, 2.42081E+01, 2.68339E-03 },
    164     { 7.31703E+00, 5.30197E-03, 5.69542E+00, 6.39965E-03, 1.30125E+01, 1.15973E-02, 2.53746E+01, 2.81270E-03 },
    165     { 7.80222E+00, 5.64032E-03, 6.19810E+00, 6.94041E-03, 1.40003E+01, 1.24693E-02, 2.65685E+01, 2.94504E-03 },
    166     { 8.30681E+00, 5.99110E-03, 6.73103E+00, 7.51098E-03, 1.50378E+01, 1.33832E-02, 2.77899E+01, 3.08043E-03 },
    167     { 8.83105E+00, 6.35442E-03, 7.29517E+00, 8.11205E-03, 1.61262E+01, 1.43399E-02, 2.90387E+01, 3.21886E-03 },
    168     { 9.37519E+00, 6.73037E-03, 7.89146E+00, 8.74428E-03, 1.72666E+01, 1.53402E-02, 3.03150E+01, 3.36033E-03 },
    169     { 9.93948E+00, 7.11905E-03, 8.52081E+00, 9.40831E-03, 1.84603E+01, 1.63848E-02, 3.16187E+01, 3.50484E-03 },
    170     { 1.05241E+01, 7.52055E-03, 9.18416E+00, 1.01048E-02, 1.97083E+01, 1.74744E-02, 3.29499E+01, 3.65240E-03 },
    171     { 1.11294E+01, 7.93493E-03, 9.88241E+00, 1.08342E-02, 2.10118E+01, 1.86096E-02, 3.43085E+01, 3.80300E-03 },
    172     { 1.17556E+01, 8.36230E-03, 1.06165E+01, 1.15973E-02, 2.23720E+01, 1.97912E-02, 3.56946E+01, 3.95664E-03 },
    173     { 1.24028E+01, 8.80272E-03, 1.13873E+01, 1.23945E-02, 2.37900E+01, 2.10198E-02, 3.71081E+01, 4.11332E-03 },
    174     { 1.30712E+01, 9.25625E-03, 1.21956E+01, 1.32263E-02, 2.52669E+01, 2.22959E-02, 3.85490E+01, 4.27305E-03 },
    175     { 1.37612E+01, 9.72298E-03, 1.30425E+01, 1.40933E-02, 2.68037E+01, 2.36201E-02, 4.00174E+01, 4.43582E-03 },
    176     { 1.44729E+01, 1.02030E-02, 1.39287E+01, 1.49959E-02, 2.84016E+01, 2.49931E-02, 4.15133E+01, 4.60163E-03 },
    177     { 1.52065E+01, 1.06963E-02, 1.48550E+01, 1.59346E-02, 3.00616E+01, 2.64152E-02, 4.30366E+01, 4.77048E-03 },
    178     { 1.59622E+01, 1.12029E-02, 1.58225E+01, 1.69097E-02, 3.17846E+01, 2.78869E-02, 4.45873E+01, 4.94237E-03 },
    179     { 1.67402E+01, 1.17230E-02, 1.68317E+01, 1.79217E-02, 3.35719E+01, 2.94088E-02, 4.61655E+01, 5.11731E-03 },
    180     { 1.75407E+01, 1.22566E-02, 1.78836E+01, 1.89710E-02, 3.54243E+01, 3.09811E-02, 4.77712E+01, 5.29529E-03 },
    181     { 1.83638E+01, 1.28036E-02, 1.89790E+01, 2.00578E-02, 3.73428E+01, 3.26045E-02, 4.94043E+01, 5.47631E-03 },
    182     { 1.92098E+01, 1.33643E-02, 2.01186E+01, 2.11824E-02, 3.93284E+01, 3.42790E-02, 5.10648E+01, 5.66038E-03 },
    183     { 2.00788E+01, 1.39385E-02, 2.13033E+01, 2.23453E-02, 4.13821E+01, 3.60052E-02, 5.27528E+01, 5.84749E-03 },
    184     { 2.09710E+01, 1.45264E-02, 2.25337E+01, 2.35465E-02, 4.35047E+01, 3.77833E-02, 5.44682E+01, 6.03764E-03 },
    185     { 2.18866E+01, 1.51280E-02, 2.38106E+01, 2.47864E-02, 4.56972E+01, 3.96136E-02, 5.62111E+01, 6.23083E-03 },
    186     { 2.28257E+01, 1.57432E-02, 2.51347E+01, 2.60651E-02, 4.79604E+01, 4.14962E-02, 5.79814E+01, 6.42706E-03 },
    187     { 2.37885E+01, 1.63722E-02, 2.65067E+01, 2.73829E-02, 5.02952E+01, 4.34315E-02, 5.97791E+01, 6.62634E-03 },
    188     { 2.47751E+01, 1.70150E-02, 2.79274E+01, 2.87397E-02, 5.27025E+01, 4.54196E-02, 6.16044E+01, 6.82866E-03 },
    189     { 2.57857E+01, 1.76715E-02, 2.93973E+01, 3.01359E-02, 5.51830E+01, 4.74606E-02, 6.34570E+01, 7.03402E-03 },
    190     { 2.68205E+01, 1.83419E-02, 3.09171E+01, 3.15714E-02, 5.77375E+01, 4.95546E-02, 6.53371E+01, 7.24243E-03 },
    191     { 2.78795E+01, 1.90261E-02, 3.24874E+01, 3.30463E-02, 6.03669E+01, 5.17018E-02, 6.72447E+01, 7.45387E-03 },
    192     { 2.89630E+01, 1.97242E-02, 3.41089E+01, 3.45606E-02, 6.30719E+01, 5.39023E-02, 6.91797E+01, 7.66836E-03 },
    193     { 3.00710E+01, 2.04361E-02, 3.57822E+01, 3.61145E-02, 6.58531E+01, 5.61559E-02, 7.11421E+01, 7.88589E-03 },
    194     { 3.12037E+01, 2.11619E-02, 3.75077E+01, 3.77077E-02, 6.87114E+01, 5.84628E-02, 7.31320E+01, 8.10647E-03 },
    195     { 3.23612E+01, 2.19015E-02, 3.92861E+01, 3.93404E-02, 7.16474E+01, 6.08230E-02, 7.51494E+01, 8.33008E-03 },
    196     { 3.35437E+01, 2.26551E-02, 4.11179E+01, 4.10124E-02, 7.46617E+01, 6.32362E-02, 7.71941E+01, 8.55674E-03 },
    197     { 3.47513E+01, 2.34226E-02, 4.30036E+01, 4.27236E-02, 7.77550E+01, 6.57026E-02, 7.92664E+01, 8.78644E-03 },
    198     { 3.59841E+01, 2.42040E-02, 4.49438E+01, 4.44740E-02, 8.09278E+01, 6.82220E-02, 8.13661E+01, 9.01918E-03 },
    199     { 3.72422E+01, 2.49994E-02, 4.69387E+01, 4.62633E-02, 8.41809E+01, 7.07942E-02, 8.34932E+01, 9.25497E-03 },
    200     { 3.85257E+01, 2.58086E-02, 4.89890E+01, 4.80915E-02, 8.75147E+01, 7.34190E-02, 8.56478E+01, 9.49380E-03 },
    201     { 3.98347E+01, 2.66318E-02, 5.10951E+01, 4.99583E-02, 9.09298E+01, 7.60964E-02, 8.78298E+01, 9.73567E-03 },
    202     { 4.11695E+01, 2.74689E-02, 5.32573E+01, 5.18635E-02, 9.44268E+01, 7.88261E-02, 9.00392E+01, 9.98058E-03 },
    203     { 4.25299E+01, 2.83199E-02, 5.54761E+01, 5.38068E-02, 9.80060E+01, 8.16078E-02, 9.22762E+01, 1.02285E-02 },
    204     { 4.39163E+01, 2.91849E-02, 5.77517E+01, 5.57881E-02, 1.01668E+02, 8.44413E-02, 9.45405E+01, 1.04795E-02 },
    205     { 4.53286E+01, 3.00637E-02, 6.00847E+01, 5.78070E-02, 1.05413E+02, 8.73264E-02, 9.68323E+01, 1.07336E-02 },
    206     { 4.67669E+01, 3.09565E-02, 6.24752E+01, 5.98633E-02, 1.09242E+02, 9.02627E-02, 9.91516E+01, 1.09907E-02 },
    207     { 4.82314E+01, 3.18632E-02, 6.49236E+01, 6.19566E-02, 1.13155E+02, 9.32498E-02, 1.01498E+02, 1.12508E-02 },
    208     { 4.97222E+01, 3.27838E-02, 6.74302E+01, 6.40865E-02, 1.17152E+02, 9.62875E-02, 1.03872E+02, 1.15139E-02 },
    209     { 5.12393E+01, 3.37182E-02, 6.99952E+01, 6.62528E-02, 1.21235E+02, 9.93754E-02, 1.06274E+02, 1.17802E-02 },
    210     { 5.27829E+01, 3.46665E-02, 7.26189E+01, 6.84550E-02, 1.25402E+02, 1.02513E-01, 1.08703E+02, 1.20494E-02 },
    211     { 5.43529E+01, 3.56287E-02, 7.53015E+01, 7.06928E-02, 1.29654E+02, 1.05700E-01, 1.11160E+02, 1.23217E-02 },
    212     { 5.59496E+01, 3.66048E-02, 7.80432E+01, 7.29657E-02, 1.33993E+02, 1.08936E-01, 1.13643E+02, 1.25970E-02 },
    213     { 5.75729E+01, 3.75947E-02, 8.08442E+01, 7.52733E-02, 1.38417E+02, 1.12220E-01, 1.16155E+02, 1.28754E-02 },
    214     { 5.92230E+01, 3.85984E-02, 8.37046E+01, 7.76152E-02, 1.42928E+02, 1.15553E-01, 1.18694E+02, 1.31568E-02 },
    215     { 6.09000E+01, 3.96159E-02, 8.66246E+01, 7.99908E-02, 1.47525E+02, 1.18933E-01, 1.21260E+02, 1.34413E-02 },
    216     { 6.26039E+01, 4.06472E-02, 8.96044E+01, 8.23998E-02, 1.52208E+02, 1.22360E-01, 1.23854E+02, 1.37288E-02 },
    217     { 6.43347E+01, 4.16923E-02, 9.26439E+01, 8.48416E-02, 1.56979E+02, 1.25834E-01, 1.26475E+02, 1.40194E-02 },
    218     { 6.60926E+01, 4.27512E-02, 9.57432E+01, 8.73157E-02, 1.61836E+02, 1.29353E-01, 1.29123E+02, 1.43130E-02 },
    219     { 6.78777E+01, 4.38238E-02, 9.89026E+01, 8.98216E-02, 1.66780E+02, 1.32919E-01, 1.31800E+02, 1.46096E-02 },
    220     { 6.96899E+01, 4.49101E-02, 1.02122E+02, 9.23587E-02, 1.71812E+02, 1.36529E-01, 1.34503E+02, 1.49093E-02 },
    221     { 7.15294E+01, 4.60101E-02, 1.05401E+02, 9.49266E-02, 1.76931E+02, 1.40183E-01, 1.37234E+02, 1.52120E-02 },
    222     { 7.33962E+01, 4.71238E-02, 1.08740E+02, 9.75247E-02, 1.82137E+02, 1.43881E-01, 1.39992E+02, 1.55177E-02 },
    223     { 7.52904E+01, 4.82512E-02, 1.12140E+02, 1.00152E-01, 1.87430E+02, 1.47622E-01, 1.42778E+02, 1.58265E-02 },
    224     { 7.72121E+01, 4.93922E-02, 1.15599E+02, 1.02809E-01, 1.92811E+02, 1.51406E-01, 1.45592E+02, 1.61384E-02 },
    225     { 7.91612E+01, 5.05468E-02, 1.19118E+02, 1.05494E-01, 1.98279E+02, 1.55232E-01, 1.48432E+02, 1.64533E-02 },
    226     { 8.11380E+01, 5.17150E-02, 1.22697E+02, 1.08207E-01, 2.03835E+02, 1.59099E-01, 1.51300E+02, 1.67712E-02 },
    227     { 8.31423E+01, 5.28967E-02, 1.26335E+02, 1.10947E-01, 2.09478E+02, 1.63007E-01, 1.54196E+02, 1.70922E-02 },
    228     { 8.51743E+01, 5.40921E-02, 1.30033E+02, 1.13714E-01, 2.15208E+02, 1.66954E-01, 1.57119E+02, 1.74162E-02 },
    229     { 8.72341E+01, 5.53009E-02, 1.33791E+02, 1.16507E-01, 2.21025E+02, 1.70941E-01, 1.60070E+02, 1.77433E-02 },
    230     { 8.93216E+01, 5.65232E-02, 1.37608E+02, 1.19325E-01, 2.26930E+02, 1.74967E-01, 1.63048E+02, 1.80734E-02 },
    231     { 9.14369E+01, 5.77590E-02, 1.41484E+02, 1.22168E-01, 2.32921E+02, 1.79031E-01, 1.66053E+02, 1.84065E-02 },
    232     { 9.35801E+01, 5.90083E-02, 1.45419E+02, 1.25036E-01, 2.38999E+02, 1.83132E-01, 1.69086E+02, 1.87427E-02 },
    233     { 9.57512E+01, 6.02710E-02, 1.49413E+02, 1.27926E-01, 2.45164E+02, 1.87269E-01, 1.72146E+02, 1.90819E-02 },
    234     { 9.79503E+01, 6.15471E-02, 1.53465E+02, 1.30840E-01, 2.51416E+02, 1.91443E-01, 1.75234E+02, 1.94242E-02 },
    235     { 1.00177E+02, 6.28365E-02, 1.57576E+02, 1.33776E-01, 2.57754E+02, 1.95652E-01, 1.78349E+02, 1.97695E-02 },
    236     { 1.02432E+02, 6.41393E-02, 1.61745E+02, 1.36733E-01, 2.64178E+02, 1.99896E-01, 1.81492E+02, 2.01178E-02 },
    237     { 1.04716E+02, 6.54554E-02, 1.65972E+02, 1.39711E-01, 2.70687E+02, 2.04173E-01, 1.84662E+02, 2.04692E-02 },
    238     { 1.07027E+02, 6.67848E-02, 1.70256E+02, 1.42710E-01, 2.77283E+02, 2.08484E-01, 1.87860E+02, 2.08237E-02 },
    239     { 1.09366E+02, 6.81274E-02, 1.74597E+02, 1.45728E-01, 2.83964E+02, 2.12827E-01, 1.91085E+02, 2.11812E-02 },
    240     { 1.11734E+02, 6.94833E-02, 1.78996E+02, 1.48765E-01, 2.90730E+02, 2.17202E-01, 1.94337E+02, 2.15417E-02 },
    241     { 1.14130E+02, 7.08524E-02, 1.83451E+02, 1.51821E-01, 2.97581E+02, 2.21608E-01, 1.97617E+02, 2.19053E-02 },
    242     { 1.16554E+02, 7.22346E-02, 1.87962E+02, 1.54894E-01, 3.04516E+02, 2.26044E-01, 2.00924E+02, 2.22719E-02 },
    243     { 1.19007E+02, 7.36300E-02, 1.92529E+02, 1.57984E-01, 3.11536E+02, 2.30510E-01, 2.04259E+02, 2.26415E-02 },
    244     { 1.21488E+02, 7.50386E-02, 1.97152E+02, 1.61091E-01, 3.18640E+02, 2.35005E-01, 2.07621E+02, 2.30142E-02 },
    245     { 1.23997E+02, 7.64602E-02, 2.01830E+02, 1.64213E-01, 3.25827E+02, 2.39528E-01, 2.11011E+02, 2.33899E-02 },
    246     { 1.26534E+02, 7.78949E-02, 2.06563E+02, 1.67351E-01, 3.33098E+02, 2.44079E-01, 2.14428E+02, 2.37687E-02 },
    247     { 1.29100E+02, 7.93426E-02, 2.11351E+02, 1.70503E-01, 3.40451E+02, 2.48656E-01, 2.17873E+02, 2.41505E-02 },
    248     { 1.31695E+02, 8.08033E-02, 2.16192E+02, 1.73669E-01, 3.47887E+02, 2.53260E-01, 2.21345E+02, 2.45354E-02 },
    249     { 1.34318E+02, 8.22770E-02, 2.21087E+02, 1.76848E-01, 3.55405E+02, 2.57889E-01, 2.24844E+02, 2.49233E-02 },
    250     { 1.36969E+02, 8.37636E-02, 2.26035E+02, 1.80039E-01, 3.63004E+02, 2.62543E-01, 2.28371E+02, 2.53143E-02 },
    251     { 1.39649E+02, 8.52632E-02, 2.31036E+02, 1.83243E-01, 3.70685E+02, 2.67221E-01, 2.31925E+02, 2.57082E-02 },
    252     { 1.42358E+02, 8.67757E-02, 2.36089E+02, 1.86458E-01, 3.78447E+02, 2.71922E-01, 2.35507E+02, 2.61053E-02 },
    253     { 1.45095E+02, 8.83010E-02, 2.41195E+02, 1.89684E-01, 3.86289E+02, 2.76646E-01, 2.39117E+02, 2.65054E-02 },
    254     { 1.47860E+02, 8.98391E-02, 2.46351E+02, 1.92920E-01, 3.94211E+02, 2.81392E-01, 2.42753E+02, 2.69085E-02 },
    255     { 1.50655E+02, 9.13901E-02, 2.51558E+02, 1.96165E-01, 4.02213E+02, 2.86159E-01, 2.46417E+02, 2.73146E-02 },
    256     { 1.53478E+02, 9.29538E-02, 2.56816E+02, 1.99419E-01, 4.10293E+02, 2.90947E-01, 2.50109E+02, 2.77238E-02 },
    257     { 1.56329E+02, 9.45302E-02, 2.62123E+02, 2.02682E-01, 4.18453E+02, 2.95755E-01, 2.53828E+02, 2.81361E-02 },
    258     { 1.59209E+02, 9.61194E-02, 2.67480E+02, 2.05953E-01, 4.26690E+02, 3.00583E-01, 2.57574E+02, 2.85514E-02 },
    259     { 1.62118E+02, 9.77213E-02, 2.72886E+02, 2.09231E-01, 4.35005E+02, 3.05429E-01, 2.61348E+02, 2.89697E-02 },
    260     { 1.65056E+02, 9.93358E-02, 2.78340E+02, 2.12515E-01, 4.43397E+02, 3.10294E-01, 2.65150E+02, 2.93911E-02 },
    261     { 1.68023E+02, 1.00963E-01, 2.83842E+02, 2.15806E-01, 4.51865E+02, 3.15175E-01, 2.68979E+02, 2.98155E-02 },
    262     { 1.71018E+02, 1.02603E-01, 2.89392E+02, 2.19103E-01, 4.60409E+02, 3.20074E-01, 2.72835E+02, 3.02429E-02 },
    263     { 1.74042E+02, 1.04255E-01, 2.94988E+02, 2.22404E-01, 4.69029E+02, 3.24989E-01, 2.76719E+02, 3.06734E-02 },
    264     { 1.77094E+02, 1.05920E-01, 3.00630E+02, 2.25710E-01, 4.77724E+02, 3.29920E-01, 2.80630E+02, 3.11070E-02 },
    265     { 1.80176E+02, 1.07597E-01, 3.06318E+02, 2.29020E-01, 4.86494E+02, 3.34866E-01, 2.84568E+02, 3.15436E-02 },
    266     { 1.83286E+02, 1.09287E-01, 3.12051E+02, 2.32334E-01, 4.95337E+02, 3.39826E-01, 2.88534E+02, 3.19832E-02 },
    267     { 1.86425E+02, 1.10989E-01, 3.17828E+02, 2.35651E-01, 5.04254E+02, 3.44800E-01, 2.92528E+02, 3.24259E-02 },
    268     { 1.89593E+02, 1.12704E-01, 3.23650E+02, 2.38971E-01, 5.13243E+02, 3.49788E-01, 2.96549E+02, 3.28716E-02 },
    269     { 1.92790E+02, 1.14431E-01, 3.29515E+02, 2.42292E-01, 5.22305E+02, 3.54788E-01, 3.00597E+02, 3.33203E-02 },
    270     { 1.96016E+02, 1.16171E-01, 3.35423E+02, 2.45616E-01, 5.31438E+02, 3.59801E-01, 3.04673E+02, 3.37721E-02 },
    271     { 1.99270E+02, 1.17922E-01, 3.41373E+02, 2.48940E-01, 5.40643E+02, 3.64825E-01, 3.08776E+02, 3.42270E-02 },
    272     { 2.02554E+02, 1.19687E-01, 3.47364E+02, 2.52266E-01, 5.49918E+02, 3.69861E-01, 3.12907E+02, 3.46848E-02 },
    273     { 2.05866E+02, 1.21463E-01, 3.53397E+02, 2.55592E-01, 5.59263E+02, 3.74907E-01, 3.17065E+02, 3.51458E-02 },
    274     { 2.09207E+02, 1.23252E-01, 3.59470E+02, 2.58918E-01, 5.68678E+02, 3.79963E-01, 3.21251E+02, 3.56097E-02 },
    275     { 2.12577E+02, 1.25053E-01, 3.65584E+02, 2.62244E-01, 5.78161E+02, 3.85030E-01, 3.25464E+02, 3.60767E-02 },
    276     { 2.15976E+02, 1.26866E-01, 3.71736E+02, 2.65568E-01, 5.87712E+02, 3.90105E-01, 3.29705E+02, 3.65468E-02 },
    277     { 2.19404E+02, 1.28691E-01, 3.77928E+02, 2.68892E-01, 5.97332E+02, 3.95189E-01, 3.33973E+02, 3.70199E-02 },
    278     { 2.22861E+02, 1.30528E-01, 3.84157E+02, 2.72215E-01, 6.07018E+02, 4.00282E-01, 3.38268E+02, 3.74960E-02 },
    279     { 2.26346E+02, 1.32378E-01, 3.90424E+02, 2.75535E-01, 6.16771E+02, 4.05382E-01, 3.42591E+02, 3.79752E-02 },
    280     { 2.29861E+02, 1.34240E-01, 3.96728E+02, 2.78853E-01, 6.26589E+02, 4.10490E-01, 3.46941E+02, 3.84574E-02 },
    281     { 2.33405E+02, 1.36113E-01, 4.03069E+02, 2.82169E-01, 6.36473E+02, 4.15605E-01, 3.51319E+02, 3.89427E-02 },
    282     { 2.36977E+02, 1.37999E-01, 4.09445E+02, 2.85482E-01, 6.46422E+02, 4.20727E-01, 3.55724E+02, 3.94310E-02 },
    283     { 2.40578E+02, 1.39897E-01, 4.15856E+02, 2.88792E-01, 6.56435E+02, 4.25855E-01, 3.60157E+02, 3.99223E-02 },
    284     { 2.44209E+02, 1.41807E-01, 4.22302E+02, 2.92099E-01, 6.66511E+02, 4.30988E-01, 3.64617E+02, 4.04167E-02 },
    285     { 2.47868E+02, 1.43728E-01, 4.28783E+02, 2.95402E-01, 6.76651E+02, 4.36127E-01, 3.69105E+02, 4.09141E-02 },
    286     { 2.51557E+02, 1.45662E-01, 4.35296E+02, 2.98701E-01, 6.86853E+02, 4.41272E-01, 3.73620E+02, 4.14146E-02 },
    287     { 2.55274E+02, 1.47608E-01, 4.41842E+02, 3.01996E-01, 6.97116E+02, 4.46421E-01, 3.78162E+02, 4.19181E-02 },
    288     { 2.59020E+02, 1.49565E-01, 4.48421E+02, 3.05287E-01, 7.07441E+02, 4.51574E-01, 3.82732E+02, 4.24247E-02 },
    289     { 2.62795E+02, 1.51534E-01, 4.55031E+02, 3.08573E-01, 7.17827E+02, 4.56732E-01, 3.87329E+02, 4.29343E-02 },
    290     { 2.66599E+02, 1.53516E-01, 4.61673E+02, 3.11854E-01, 7.28272E+02, 4.61893E-01, 3.91954E+02, 4.34469E-02 },
    291     { 2.70432E+02, 1.55509E-01, 4.68345E+02, 3.15131E-01, 7.38777E+02, 4.67058E-01, 3.96606E+02, 4.39626E-02 },
    292     { 2.74294E+02, 1.57513E-01, 4.75047E+02, 3.18402E-01, 7.49341E+02, 4.72227E-01, 4.01286E+02, 4.44814E-02 },
    293     { 2.78185E+02, 1.59530E-01, 4.81778E+02, 3.21668E-01, 7.59963E+02, 4.77398E-01, 4.05993E+02, 4.50031E-02 },
    294     { 2.82105E+02, 1.61558E-01, 4.88538E+02, 3.24928E-01, 7.70643E+02, 4.82572E-01, 4.10728E+02, 4.55279E-02 },
    295     { 2.86054E+02, 1.63598E-01, 4.95326E+02, 3.28183E-01, 7.81381E+02, 4.87749E-01, 4.15490E+02, 4.60558E-02 },
    296     { 2.90032E+02, 1.65650E-01, 5.02142E+02, 3.31432E-01, 7.92175E+02, 4.92927E-01, 4.20279E+02, 4.65867E-02 },
    297     { 2.94039E+02, 1.67713E-01, 5.08986E+02, 3.34676E-01, 8.03025E+02, 4.98108E-01, 4.25096E+02, 4.71206E-02 },
    298     { 2.98075E+02, 1.69788E-01, 5.15855E+02, 3.37913E-01, 8.13930E+02, 5.03291E-01, 4.29940E+02, 4.76576E-02 },
    299     { 3.02140E+02, 1.71874E-01, 5.22751E+02, 3.41144E-01, 8.24891E+02, 5.08475E-01, 4.34812E+02, 4.81976E-02 },
    300     { 3.06234E+02, 1.73973E-01, 5.29672E+02, 3.44369E-01, 8.35906E+02, 5.13661E-01, 4.39711E+02, 4.87407E-02 },
    301     { 3.10356E+02, 1.76082E-01, 5.36619E+02, 3.47588E-01, 8.46975E+02, 5.18848E-01, 4.44638E+02, 4.92868E-02 },
    302     { 3.14508E+02, 1.78204E-01, 5.43589E+02, 3.50801E-01, 8.58097E+02, 5.24036E-01, 4.49592E+02, 4.98360E-02 },
    303     { 3.18689E+02, 1.80336E-01, 5.50584E+02, 3.54008E-01, 8.69273E+02, 5.29225E-01, 4.54574E+02, 5.03882E-02 },
    304     { 3.22898E+02, 1.82481E-01, 5.57602E+02, 3.57208E-01, 8.80500E+02, 5.34415E-01, 4.59583E+02, 5.09434E-02 },
    305     { 3.27137E+02, 1.84637E-01, 5.64643E+02, 3.60401E-01, 8.91779E+02, 5.39605E-01, 4.64619E+02, 5.15017E-02 },
    306     { 3.31404E+02, 1.86804E-01, 5.71706E+02, 3.63589E-01, 9.03110E+02, 5.44797E-01, 4.69683E+02, 5.20630E-02 },
    307     { 3.35701E+02, 1.88983E-01, 5.78791E+02, 3.66770E-01, 9.14491E+02, 5.49988E-01, 4.74775E+02, 5.26274E-02 },
    308     { 3.40026E+02, 1.91173E-01, 5.85897E+02, 3.69944E-01, 9.25923E+02, 5.55180E-01, 4.79894E+02, 5.31948E-02 },
    309     { 3.44381E+02, 1.93374E-01, 5.93024E+02, 3.73113E-01, 9.37405E+02, 5.60373E-01, 4.85040E+02, 5.37652E-02 },
    310     { 3.48764E+02, 1.95587E-01, 6.00172E+02, 3.76275E-01, 9.48935E+02, 5.65566E-01, 4.90214E+02, 5.43387E-02 },
    311     { 3.53176E+02, 1.97811E-01, 6.07339E+02, 3.79430E-01, 9.60515E+02, 5.70759E-01, 4.95415E+02, 5.49152E-02 },
    312     { 3.57617E+02, 2.00047E-01, 6.14526E+02, 3.82580E-01, 9.72143E+02, 5.75952E-01, 5.00643E+02, 5.54948E-02 },
    313     { 3.62087E+02, 2.02294E-01, 6.21732E+02, 3.85723E-01, 9.83819E+02, 5.81145E-01, 5.05899E+02, 5.60774E-02 },
    314     { 3.66586E+02, 2.04552E-01, 6.28956E+02, 3.88861E-01, 9.95542E+02, 5.86339E-01, 5.11183E+02, 5.66631E-02 },
    315     { 3.71114E+02, 2.06821E-01, 6.36198E+02, 3.91992E-01, 1.00731E+03, 5.91532E-01, 5.16494E+02, 5.72518E-02 },
    316     { 3.75671E+02, 2.09102E-01, 6.43458E+02, 3.95117E-01, 1.01913E+03, 5.96726E-01, 5.21832E+02, 5.78436E-02 },
    317     { 3.80257E+02, 2.11394E-01, 6.50736E+02, 3.98237E-01, 1.03099E+03, 6.01920E-01, 5.27198E+02, 5.84383E-02 },
    318     { 3.84871E+02, 2.13697E-01, 6.58029E+02, 4.01351E-01, 1.04290E+03, 6.07113E-01, 5.32591E+02, 5.90362E-02 },
    319     { 3.89515E+02, 2.16011E-01, 6.65340E+02, 4.04459E-01, 1.05485E+03, 6.12307E-01, 5.38012E+02, 5.96370E-02 },
    320     { 3.94187E+02, 2.18337E-01, 6.72666E+02, 4.07562E-01, 1.06685E+03, 6.17502E-01, 5.43460E+02, 6.02410E-02 },
    321     { 3.98888E+02, 2.20673E-01, 6.80007E+02, 4.10659E-01, 1.07890E+03, 6.22696E-01, 5.48936E+02, 6.08479E-02 },
    322     { 4.03618E+02, 2.23021E-01, 6.87364E+02, 4.13751E-01, 1.09098E+03, 6.27891E-01, 5.54439E+02, 6.14579E-02 },
    323     { 4.08377E+02, 2.25380E-01, 6.94736E+02, 4.16839E-01, 1.10311E+03, 6.33086E-01, 5.59970E+02, 6.20710E-02 },
    324     { 4.13165E+02, 2.27750E-01, 7.02121E+02, 4.19921E-01, 1.11529E+03, 6.38282E-01, 5.65528E+02, 6.26870E-02 },
    325     { 4.17982E+02, 2.30131E-01, 7.09521E+02, 4.22999E-01, 1.12750E+03, 6.43478E-01, 5.71113E+02, 6.33062E-02 },
    326     { 4.22828E+02, 2.32523E-01, 7.16935E+02, 4.26072E-01, 1.13976E+03, 6.48675E-01, 5.76726E+02, 6.39283E-02 },
    327     { 4.27702E+02, 2.34926E-01, 7.24361E+02, 4.29141E-01, 1.15206E+03, 6.53873E-01, 5.82366E+02, 6.45536E-02 },
    328     { 4.32606E+02, 2.37341E-01, 7.31801E+02, 4.32205E-01, 1.16441E+03, 6.59071E-01, 5.88034E+02, 6.51818E-02 },
    329     { 4.37538E+02, 2.39766E-01, 7.39253E+02, 4.35266E-01, 1.17679E+03, 6.64270E-01, 5.93729E+02, 6.58131E-02 },
    330     { 4.42499E+02, 2.42202E-01, 7.46717E+02, 4.38323E-01, 1.18922E+03, 6.69471E-01, 5.99452E+02, 6.64474E-02 },
    331     { 4.47488E+02, 2.44649E-01, 7.54193E+02, 4.41376E-01, 1.20168E+03, 6.74672E-01, 6.05202E+02, 6.70848E-02 },
    332     { 4.52507E+02, 2.47107E-01, 7.61681E+02, 4.44426E-01, 1.21419E+03, 6.79876E-01, 6.10979E+02, 6.77253E-02 },
    333     { 4.57555E+02, 2.49577E-01, 7.69180E+02, 4.47473E-01, 1.22673E+03, 6.85080E-01, 6.16784E+02, 6.83687E-02 },
    334     { 4.62631E+02, 2.52057E-01, 7.76690E+02, 4.50516E-01, 1.23932E+03, 6.90286E-01, 6.22617E+02, 6.90152E-02 },
    335     { 4.67736E+02, 2.54547E-01, 7.84211E+02, 4.53557E-01, 1.25195E+03, 6.95495E-01, 6.28477E+02, 6.96648E-02 },
    336     { 4.72870E+02, 2.57049E-01, 7.91743E+02, 4.56596E-01, 1.26461E+03, 7.00705E-01, 6.34364E+02, 7.03174E-02 },
    337     { 4.78032E+02, 2.59562E-01, 7.99284E+02, 4.59632E-01, 1.27732E+03, 7.05917E-01, 6.40279E+02, 7.09730E-02 },
    338     { 4.83224E+02, 2.62086E-01, 8.06835E+02, 4.62667E-01, 1.29006E+03, 7.11132E-01, 6.46221E+02, 7.16317E-02 },
    339     { 4.88444E+02, 2.64620E-01, 8.14396E+02, 4.65699E-01, 1.30284E+03, 7.16349E-01, 6.52191E+02, 7.22934E-02 },
    340     { 4.93693E+02, 2.67165E-01, 8.21967E+02, 4.68730E-01, 1.31566E+03, 7.21569E-01, 6.58188E+02, 7.29582E-02 },
    341     { 4.98971E+02, 2.69721E-01, 8.29546E+02, 4.71760E-01, 1.32852E+03, 7.26792E-01, 6.64212E+02, 7.36260E-02 },
    342     { 5.04277E+02, 2.72288E-01, 8.37135E+02, 4.74789E-01, 1.34141E+03, 7.32019E-01, 6.70265E+02, 7.42968E-02 },
    343     { 5.09612E+02, 2.74866E-01, 8.44732E+02, 4.77817E-01, 1.35434E+03, 7.37248E-01, 6.76344E+02, 7.49707E-02 },
    344     { 5.14976E+02, 2.77454E-01, 8.52338E+02, 4.80845E-01, 1.36731E+03, 7.42481E-01, 6.82451E+02, 7.56477E-02 },
    345     { 5.20369E+02, 2.80053E-01, 8.59952E+02, 4.83872E-01, 1.38032E+03, 7.47719E-01, 6.88585E+02, 7.63276E-02 },
    346     { 5.25790E+02, 2.82663E-01, 8.67574E+02, 4.86899E-01, 1.39336E+03, 7.52960E-01, 6.94747E+02, 7.70106E-02 },
    347     { 5.31240E+02, 2.85284E-01, 8.75204E+02, 4.89927E-01, 1.40644E+03, 7.58205E-01, 7.00936E+02, 7.76967E-02 },
    348     { 5.36719E+02, 2.87915E-01, 8.82842E+02, 4.92955E-01, 1.41956E+03, 7.63456E-01, 7.07153E+02, 7.83858E-02 },
    349     { 5.42227E+02, 2.90557E-01, 8.90488E+02, 4.95985E-01, 1.43271E+03, 7.68710E-01, 7.13397E+02, 7.90780E-02 },
    350     { 5.47763E+02, 2.93210E-01, 8.98141E+02, 4.99015E-01, 1.44590E+03, 7.73970E-01, 7.19669E+02, 7.97731E-02 },
    351     { 5.53328E+02, 2.95874E-01, 9.05801E+02, 5.02047E-01, 1.45913E+03, 7.79236E-01, 7.25968E+02, 8.04714E-02 },
    352     { 5.58921E+02, 2.98548E-01, 9.13468E+02, 5.05080E-01, 1.47239E+03, 7.84507E-01, 7.32294E+02, 8.11726E-02 },
    353     { 5.64544E+02, 3.01232E-01, 9.21143E+02, 5.08115E-01, 1.48569E+03, 7.89783E-01, 7.38648E+02, 8.18770E-02 },
    354     { 5.70195E+02, 3.03928E-01, 9.28824E+02, 5.11153E-01, 1.49902E+03, 7.95066E-01, 7.45030E+02, 8.25843E-02 },
    355     { 5.75874E+02, 3.06634E-01, 9.36512E+02, 5.14193E-01, 1.51239E+03, 8.00355E-01, 7.51438E+02, 8.32947E-02 },
    356     { 5.81582E+02, 3.09350E-01, 9.44207E+02, 5.17236E-01, 1.52579E+03, 8.05651E-01, 7.57875E+02, 8.40082E-02 },
    357     { 5.87319E+02, 3.12078E-01, 9.51908E+02, 5.20282E-01, 1.53923E+03, 8.10954E-01, 7.64338E+02, 8.47246E-02 },
    358     { 5.93085E+02, 3.14816E-01, 9.59616E+02, 5.23332E-01, 1.55270E+03, 8.16264E-01, 7.70830E+02, 8.54442E-02 },
    359     { 5.98879E+02, 3.17564E-01, 9.67330E+02, 5.26385E-01, 1.56621E+03, 8.21581E-01, 7.77348E+02, 8.61667E-02 },
    360     { 6.04701E+02, 3.20323E-01, 9.75051E+02, 5.29442E-01, 1.57975E+03, 8.26906E-01, 7.83894E+02, 8.68923E-02 },
    361     { 6.10553E+02, 3.23092E-01, 9.82777E+02, 5.32503E-01, 1.59333E+03, 8.32240E-01, 7.90468E+02, 8.76210E-02 },
    362     { 6.16433E+02, 3.25872E-01, 9.90510E+02, 5.35568E-01, 1.60694E+03, 8.37581E-01, 7.97069E+02, 8.83527E-02 },
    363     { 6.22341E+02, 3.28663E-01, 9.98250E+02, 5.38639E-01, 1.62059E+03, 8.42932E-01, 8.03697E+02, 8.90874E-02 }
    364   };
    365   const double x[] = {
    366     1.396263402e-5, 8.377720036e-1, 1.675530045e+0, 2.513288086e+0,
    367     3.351046126e+0, 4.188804167e+0, 5.026562208e+0, 5.864320249e+0,
    368     6.702078290e+0, 7.539836331e+0, 8.377594372e+0, 9.215352413e+0,
    369     1.005311045e+1, 1.089086850e+1, 1.172862654e+1, 1.256638458e+1,
    370     1.340414262e+1, 1.424190066e+1, 1.507965870e+1, 1.591741674e+1,
    371     1.675517478e+1, 1.759293282e+1, 1.843069086e+1, 1.926844890e+1,
    372     2.010620695e+1, 2.094396499e+1, 2.178172303e+1, 2.261948107e+1,
    373     2.345723911e+1, 2.429499715e+1, 2.513275519e+1, 2.597051323e+1,
    374     2.680827127e+1, 2.764602931e+1, 2.848378736e+1, 2.932154540e+1,
    375     3.015930344e+1, 3.099706148e+1, 3.183481952e+1, 3.267257756e+1,
    376     3.351033560e+1, 3.434809364e+1, 3.518585168e+1, 3.602360972e+1,
    377     3.686136776e+1, 3.769912581e+1, 3.853688385e+1, 3.937464189e+1,
    378     4.021239993e+1, 4.105015797e+1, 4.188791601e+1, 4.272567405e+1,
    379     4.356343209e+1, 4.440119013e+1, 4.523894817e+1, 4.607670622e+1,
    380     4.691446426e+1, 4.775222230e+1, 4.858998034e+1, 4.942773838e+1,
    381     5.026549642e+1, 5.110325446e+1, 5.194101250e+1, 5.277877054e+1,
    382     5.361652858e+1, 5.445428662e+1, 5.529204467e+1, 5.612980271e+1,
    383     5.696756075e+1, 5.780531879e+1, 5.864307683e+1, 5.948083487e+1,
    384     6.031859291e+1, 6.115635095e+1, 6.199410899e+1, 6.283186703e+1,
    385     6.366962508e+1, 6.450738312e+1, 6.534514116e+1, 6.618289920e+1,
    386     6.702065724e+1, 6.785841528e+1, 6.869617332e+1, 6.953393136e+1,
    387     7.037168940e+1, 7.120944744e+1, 7.204720548e+1, 7.288496353e+1,
    388     7.372272157e+1, 7.456047961e+1, 7.539823765e+1, 7.623599569e+1,
    389     7.707375373e+1, 7.791151177e+1, 7.874926981e+1, 7.958702785e+1,
    390     8.042478589e+1, 8.126254394e+1, 8.210030198e+1, 8.293806002e+1,
    391     8.377581806e+1, 8.461357610e+1, 8.545133414e+1, 8.628909218e+1,
    392     8.712685022e+1, 8.796460826e+1, 8.880236630e+1, 8.964012435e+1,
    393     9.047788239e+1, 9.131564043e+1, 9.215339847e+1, 9.299115651e+1,
    394     9.382891455e+1, 9.466667259e+1, 9.550443063e+1, 9.634218867e+1,
    395     9.717994671e+1, 9.801770475e+1, 9.885546280e+1, 9.969322084e+1,
    396     1.005309789e+2, 1.013687369e+2, 1.022064950e+2, 1.030442530e+2,
    397     1.038820110e+2, 1.047197691e+2, 1.055575271e+2, 1.063952852e+2,
    398     1.072330432e+2, 1.080708012e+2, 1.089085593e+2, 1.097463173e+2,
    399     1.105840754e+2, 1.114218334e+2, 1.122595915e+2, 1.130973495e+2,
    400     1.139351075e+2, 1.147728656e+2, 1.156106236e+2, 1.164483817e+2,
    401     1.172861397e+2, 1.181238977e+2, 1.189616558e+2, 1.197994138e+2,
    402     1.206371719e+2, 1.214749299e+2, 1.223126879e+2, 1.231504460e+2,
    403     1.239882040e+2, 1.248259621e+2, 1.256637201e+2, 1.265014781e+2,
    404     1.273392362e+2, 1.281769942e+2, 1.290147523e+2, 1.298525103e+2,
    405     1.306902684e+2, 1.315280264e+2, 1.323657844e+2, 1.332035425e+2,
    406     1.340413005e+2, 1.348790586e+2, 1.357168166e+2, 1.365545746e+2,
    407     1.373923327e+2, 1.382300907e+2, 1.390678488e+2, 1.399056068e+2,
    408     1.407433648e+2, 1.415811229e+2, 1.424188809e+2, 1.432566390e+2,
    409     1.440943970e+2, 1.449321550e+2, 1.457699131e+2, 1.466076711e+2,
    410     1.474454292e+2, 1.482831872e+2, 1.491209453e+2, 1.499587033e+2,
    411     1.507964613e+2, 1.516342194e+2, 1.524719774e+2, 1.533097355e+2,
    412     1.541474935e+2, 1.549852515e+2, 1.558230096e+2, 1.566607676e+2,
    413     1.574985257e+2, 1.583362837e+2, 1.591740417e+2, 1.600117998e+2,
    414     1.608495578e+2, 1.616873159e+2, 1.625250739e+2, 1.633628319e+2,
    415     1.642005900e+2, 1.650383480e+2, 1.658761061e+2, 1.667138641e+2,
    416     1.675516222e+2, 1.683893802e+2, 1.692271382e+2, 1.700648963e+2,
    417     1.709026543e+2, 1.717404124e+2, 1.725781704e+2, 1.734159284e+2,
    418     1.742536865e+2, 1.750914445e+2, 1.759292026e+2, 1.767669606e+2,
    419     1.776047186e+2, 1.784424767e+2, 1.792802347e+2, 1.801179928e+2,
    420     1.809557508e+2, 1.817935089e+2, 1.826312669e+2, 1.834690249e+2,
    421     1.843067830e+2, 1.851445410e+2, 1.859822991e+2, 1.868200571e+2,
    422     1.876578151e+2, 1.884955732e+2, 1.893333312e+2, 1.901710893e+2,
    423     1.910088473e+2, 1.918466053e+2, 1.926843634e+2, 1.935221214e+2,
    424     1.943598795e+2, 1.951976375e+2, 1.960353955e+2, 1.968731536e+2,
    425     1.977109116e+2, 1.985486697e+2, 1.993864277e+2, 2.002241858e+2,
    426     2.010619438e+2, 2.018997018e+2, 2.027374599e+2
    427   };
    428   struct s3d_device* s3d = NULL;
    429   struct s3d_shape* shape = NULL;
    430   struct geometry geometry;
    431   struct cylinder cylinder;
    432   const size_t nx = sizeof(x)/sizeof(double);
    433   const size_t nscatt_angles = 1000;
    434   const size_t ngeoms = 100;
    435   const size_t ndirs = 100;
    436   const double aspect_ratio = 0.837; /* diameter / height */
    437   double cylinder_volume = 0;
    438   size_t i;
    439   (void)argc, (void)argv;
    440 
    441   mem_init_proxy_allocator(&allocator, &mem_default_allocator);
    442 
    443   CHK(s3d_device_create(NULL, &allocator, 0, &s3d) == RES_OK);
    444   CHK(s3d_shape_create_mesh(s3d, &shape) == RES_OK);
    445 
    446   CHK(ssp_rng_create(&allocator, SSP_RNG_THREEFRY, &rng) == RES_OK);
    447   CHK(sschiff_device_create
    448     (NULL, &allocator, SSCHIFF_NTHREADS_DEFAULT, 1, s3d, &dev) == RES_OK);
    449 
    450   geometry_init_cylinder(&geometry, 64);
    451   cylinder.geometry = &geometry;
    452   cylinder.radius = 1.0;
    453   cylinder.height = (float)(cylinder.radius / aspect_ratio * 2.0);
    454   cylinder_setup_s3d_shape(&cylinder, shape);
    455   cylinder_volume = PI * cylinder.radius * cylinder.radius * cylinder.height;
    456 
    457   FOR_EACH(i, 0, nx) {
    458     const double wavelength = 0.6; /* In micron */
    459     struct sschiff_cross_section cross_section;
    460     double interval[2];
    461     struct sschiff_state* val;
    462     struct sschiff_state result;
    463 
    464     sampler_ctx.mean_radius = (x[i] * 0.450) / (2*PI);
    465     sampler_ctx.sigma = 1.18;
    466     sampler_ctx.shape = shape;
    467     sampler_ctx.cylinder_volume = cylinder_volume;
    468 
    469     distrib.characteristic_length = sampler_ctx.mean_radius;
    470     distrib.material.get_property = get_material_property;
    471     distrib.material.material = &sampler_ctx;
    472     distrib.sample = sample_cylinder;
    473     distrib.sample_volume_scaling = sample_volume_scaling;
    474     distrib.context = &sampler_ctx;
    475 
    476     time_current(&t0);
    477     CHK(sschiff_integrate(dev, rng, &distrib, &wavelength, 1,
    478       sschiff_uniform_scattering_angles, nscatt_angles, ngeoms, ndirs, 0,
    479       &estimator) == RES_OK);
    480     time_current(&t1);
    481     time_sub(&t0, &t1, &t0);
    482     time_dump(&t0, TIME_MIN|TIME_SEC|TIME_MSEC, NULL, buf, sizeof(buf));
    483 
    484     CHK(sschiff_estimator_get_cross_section
    485         (estimator, 0, &cross_section) == RES_OK);
    486 
    487     printf("%u - x = %g - Wavelength = %g micron - %s\n",
    488       (unsigned)i, x[i], wavelength, buf);
    489 
    490     val = &cross_section.extinction;
    491     result.E = results[i].extinction_E;
    492     result.SE = results[i].extinction_SE;
    493     compute_estimation_intersection(interval, 4, &result, val);
    494     printf("  Extinction ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
    495       results[i].extinction_E, results[i].extinction_SE,
    496       val->E, val->SE, interval[1] - interval[0]);
    497     CHK(interval[0] <= interval[1]);
    498 
    499     val = &cross_section.absorption;
    500     result.E = results[i].absorption_E;
    501     result.SE = results[i].absorption_SE;
    502     compute_estimation_intersection(interval, 4, &result, val);
    503     printf("  Absorption ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
    504       results[i].absorption_E, results[i].absorption_SE,
    505       val->E, val->SE, interval[1] - interval[0]);
    506     CHK(interval[0] <= interval[1]);
    507 
    508     val = &cross_section.scattering;
    509     result.E = results[i].scattering_E;
    510     result.SE = results[i].scattering_SE;
    511     compute_estimation_intersection(interval, 4, &result, val);
    512     printf("  Scattering ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
    513       results[i].scattering_E, results[i].scattering_SE,
    514       val->E, val->SE, interval[1] - interval[0]);
    515     CHK(interval[0] <= interval[1]);
    516 
    517     val = &cross_section.average_projected_area;
    518     result.E = results[i].avg_proj_area_E;
    519     result.SE = results[i].avg_proj_area_SE;
    520     compute_estimation_intersection(interval, 4, &result, val);
    521     printf("  Proj Area  ~ %9.3g +/- %9.3g ~ %9.3g +/- %9.3g (%9.3g)\n",
    522       results[i].avg_proj_area_E, results[i].avg_proj_area_SE,
    523       val->E, val->SE, interval[1] - interval[0]);
    524     CHK(interval[0] <= interval[1]);
    525 
    526     CHK(sschiff_estimator_ref_put(estimator) == RES_OK);
    527   }
    528 
    529   CHK(sschiff_device_ref_put(dev) == RES_OK);
    530   CHK(ssp_rng_ref_put(rng) == RES_OK);
    531 
    532   CHK(s3d_device_ref_put(s3d) == RES_OK);
    533   CHK(s3d_shape_ref_put(shape) == RES_OK);
    534 
    535   geometry_release(&geometry);
    536   check_memory_allocator(&allocator);
    537   mem_shutdown_proxy_allocator(&allocator);
    538   CHK(mem_allocated_size() == 0);
    539   return 0;
    540 }
    541