Browse Source

Small improvement in calcD1D3

Konstantin Ladutenko 10 years ago
parent
commit
5fc7508239
5 changed files with 864 additions and 21 deletions
  1. 8 7
      go.sh
  2. 11 9
      nmie-wrapper.cc
  3. 5 5
      nmie-wrapper.h
  4. 311 0
      tests/shell/analysis.txt
  5. 529 0
      tests/shell/graph.svg

+ 8 - 7
go.sh

@@ -3,7 +3,7 @@ echo Compile with gcc -O2
 rm -f *.bin
 rm -f ../scattnlay
 g++ -Ofast -std=c++11 compare.cc nmie.cc nmie-wrapper.cc -lm -lrt -o scattnlay.bin -static
-# g++ -Ofast -std=c++11 compare.cc nmie.cc nmie-wrapper.cc -lm -lrt -o scattnlay-pg.bin -static -pg
+g++ -Ofast -std=c++11 compare.cc nmie.cc nmie-wrapper.cc -lm -lrt -o scattnlay-pg.bin -static -pg
 #clang++ -g -O1 -fsanitize=address  -fno-optimize-sibling-calls -fno-omit-frame-pointer -std=c++11 compare.cc nmie.cc nmie-wrapper.cc -lm -lrt -o scattnlay.bin
 
 cp scattnlay.bin ../scattnlay
@@ -17,19 +17,20 @@ cd tests/shell
 # done
  PROGRAM='../../../scattnlay'
 # time ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.4 
-time $PROGRAM -l 5 0.4642 1.8000 1.7000 0.7114 0.8000 0.7000 0.7393 1.2000 0.0900 0.9168 2.8000 0.2000 1.0000 1.5000 0.4000  -t 0.0 90.0 5 -c test01
+# time $PROGRAM -l 5 0.4642 1.8000 1.7000 0.7114 0.8000 0.7000 0.7393 1.2000 0.0900 0.9168 2.8000 0.2000 1.0000 1.5000 0.4000  -t 0.0 90.0 5 -c test01
 
 # echo valgring
 # valgrind --tool=callgrind $PROGRAM -l 5 0.4642 1.8000 1.7000 0.7114 0.8000 0.7000 0.7393 1.2000 0.0900 0.9168 2.8000 0.2000 1.0000 1.5000 0.4000  -t 0.0 90.0 5 -c test01
+# rm out.dot
 # ./gprof2dot.py --output=out.dot --format=callgrind callgrind.out.*
 # mv callgrind.out.* callgrind
 # dot -Tsvg out.dot -o graph.svg
 
-# rm gmon.out
-# rm analysis.txt
-# PROGRAM='../../../scattnlay-pg'
-# time $PROGRAM -l 5 0.4642 1.8000 1.7000 0.7114 0.8000 0.7000 0.7393 1.2000 0.0900 0.9168 2.8000 0.2000 1.0000 1.5000 0.4000  -t 0.0 90.0 5 -c test01
-# gprof $PROGRAM gmon.out > analysis.txt
+rm gmon.out
+rm analysis.txt
+PROGRAM='../../../scattnlay-pg'
+time $PROGRAM -l 5 0.4642 1.8000 1.7000 0.7114 0.8000 0.7000 0.7393 1.2000 0.0900 0.9168 2.8000 0.2000 1.0000 1.5000 0.4000  -t 0.0 90.0 5 -c test01
+gprof $PROGRAM gmon.out > analysis.txt
 
 # repeats=30
 # echo Run test for $repeats times

+ 11 - 9
nmie-wrapper.cc

@@ -46,8 +46,8 @@ namespace nmie {
   // ********************************************************************** //
   // ********************************************************************** //
   //emulate C call.
-  int nMie_wrapper(int L, std::vector<double> x, std::vector<std::complex<double> > m,
-         int nTheta, std::vector<double> Theta,
+  int nMie_wrapper(int L, const std::vector<double>& x, const std::vector<std::complex<double> >& m,
+         int nTheta, const std::vector<double>& Theta,
          double *Qext, double *Qsca, double *Qabs, double *Qbk, double *Qpr, double *g, double *Albedo,
 		   std::vector<std::complex<double> >& S1, std::vector<std::complex<double> >& S2) {
     
@@ -151,15 +151,16 @@ namespace nmie {
   // ********************************************************************** //
   // ********************************************************************** //
   // ********************************************************************** //
-  void MultiLayerMie::SetAngles(std::vector<double> angles) {
+  void MultiLayerMie::SetAngles(const std::vector<double>& angles) {
     isMieCalculated_ = false;
-    theta_.clear();
-    for (auto value : angles) theta_.push_back(value);
+    theta_ = angles;
+    // theta_.clear();
+    // for (auto value : angles) theta_.push_back(value);
   }  // end of SetAngles()
   // ********************************************************************** //
   // ********************************************************************** //
   // ********************************************************************** //
-  void MultiLayerMie::SetWidthSP(std::vector<double> size_parameter) {
+  void MultiLayerMie::SetWidthSP(const std::vector<double>& size_parameter) {
     isMieCalculated_ = false;
     size_parameter_.clear();
     double prev_size_parameter = 0.0;
@@ -177,10 +178,11 @@ namespace nmie {
   // ********************************************************************** //
   // ********************************************************************** //
   // ********************************************************************** //
-  void MultiLayerMie::SetIndexSP(std::vector< std::complex<double> > index) {
+  void MultiLayerMie::SetIndexSP(const std::vector< std::complex<double> >& index) {
     isMieCalculated_ = false;
-    index_.clear();
-    for (auto value : index) index_.push_back(value);
+    //index_.clear();
+    index_ = index;
+    // for (auto value : index) index_.push_back(value);
   }  // end of void MultiLayerMie::SetIndexSP(...);  
   // ********************************************************************** //
   // ********************************************************************** //

+ 5 - 5
nmie-wrapper.h

@@ -52,8 +52,8 @@
 #endif
 
 namespace nmie {
-  int nMie_wrapper(int L, std::vector<double> x, std::vector<std::complex<double> > m,
-         int nTheta, std::vector<double> Theta,
+  int nMie_wrapper(int L, const std::vector<double>& x, const std::vector<std::complex<double> >& m,
+         int nTheta, const std::vector<double>& Theta,
          double *Qext, double *Qsca, double *Qabs, double *Qbk, double *Qpr, double *g, double *Albedo,
 	   std::vector<std::complex<double> >& S1, std::vector<std::complex<double> >& S2);
 
@@ -76,13 +76,13 @@ namespace nmie {
     void SetFieldPoints(std::vector< std::array<double,3> > coords);
 
     //Set parameters in size parameter units
-    void SetWidthSP(std::vector<double> width);
-    void SetIndexSP(std::vector< std::complex<double> > index);
+    void SetWidthSP(const std::vector<double>& width);
+    void SetIndexSP(const std::vector< std::complex<double> >& index);
     void SetFieldPointsSP(std::vector< std::array<double,3> > coords);
 
     // Set common parameters
     void SetAnglesForPattern(double from_angle, double to_angle, int samples);
-    void SetAngles(std::vector<double> angles);
+    void SetAngles(const std::vector<double>& angles);
     std::vector<double> GetAngles();
     void SetPEC(int layer_position = 0);  // By default set PEC layer to be the first one
     void SetMaxTermsNumber(int nmax);

+ 311 - 0
tests/shell/analysis.txt

@@ -0,0 +1,311 @@
+Flat profile:
+
+Each sample counts as 0.01 seconds.
+  %   cumulative   self              self     total           
+ time   seconds   seconds    calls  us/call  us/call  name    
+ 38.03     12.73    12.73 15000000     0.85     0.85  nmie::MultiLayerMie::calcD1D3(std::complex<double>, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&)
+ 27.31     21.87     9.14  1500000     6.09    14.87  nmie::MultiLayerMie::ScattCoeffs(std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&)
+  5.98     23.87     2.00                             _int_malloc
+  4.03     25.22     1.35  1500000     0.90    16.73  nmie::MultiLayerMie::RunMieCalculations()
+  3.76     26.48     1.26                             _int_free
+  3.59     27.68     1.20 93000000     0.01     0.01  std::vector<std::complex<double>, std::allocator<std::complex<double> > >::_M_default_append(unsigned long)
+  2.72     28.59     0.91                             malloc_consolidate
+  2.33     29.37     0.78                             malloc
+  2.06     30.06     0.69                             __cos_avx
+  1.79     30.66     0.60                             __dubsin
+  1.70     31.23     0.57                             __sin_avx
+  1.67     31.79     0.56  1500000     0.37     0.37  nmie::MultiLayerMie::calcPiTau(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&)
+  1.43     32.27     0.48                             __ieee754_exp_avx
+  0.57     32.46     0.19                             cfree
+  0.45     32.61     0.15                             memset
+  0.30     32.71     0.10                             operator new(unsigned long)
+  0.27     32.80     0.09                             brk
+  0.24     32.88     0.08  1500000     0.05     0.05  nmie::MultiLayerMie::Nmax(int)
+  0.21     32.95     0.07                             __malloc_check_init
+  0.21     33.02     0.07  1500000     0.05     0.05  nmie::MultiLayerMie::SetWidthSP(std::vector<double, std::allocator<double> > const&)
+  0.21     33.09     0.07                             nmie::nMie_wrapper(int, std::vector<double, std::allocator<double> > const&, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, int, std::vector<double, std::allocator<double> > const&, double*, double*, double*, double*, double*, double*, double*, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&)
+  0.16     33.15     0.06                             sincos
+  0.15     33.20     0.05                             __profile_frequency
+  0.15     33.25     0.05                             _mid_memalign
+  0.15     33.30     0.05                             free_check
+  0.12     33.34     0.04  3000000     0.01     0.01  std::vector<std::complex<double>, std::allocator<std::complex<double> > >::operator=(std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&)
+  0.10     33.37     0.04                             csloww
+  0.09     33.40     0.03                             int_mallinfo
+  0.06     33.42     0.02  1500000     0.01     0.03  nmie::MultiLayerMie::InitMieCalculations()
+  0.06     33.44     0.02                             void std::vector<std::array<double, 5ul>, std::allocator<std::array<double, 5ul> > >::_M_emplace_back_aux<std::array<double, 5ul> >(std::array<double, 5ul>&&)
+  0.04     33.46     0.02                             __sin_sse2
+  0.03     33.47     0.01                             bsloww2
+  0.01     33.47     0.01                             bsloww
+  0.00     33.47     0.00  1500000     0.00     0.00  std::vector<double, std::allocator<double> >::operator=(std::vector<double, std::allocator<double> > const&)
+  0.00     33.47     0.00        1     0.00     0.00  _GLOBAL__sub_I__ZN4nmie12nMie_wrapperEiRKSt6vectorIdSaIdEERKS0_ISt7complexIdESaIS6_EEiS4_PdSB_SB_SB_SB_SB_SB_RS8_SC_
+  0.00     33.47     0.00        1     0.00     0.00  _GLOBAL__sub_I_main
+  0.00     33.47     0.00        1     0.00     0.00  main
+
+ %         the percentage of the total running time of the
+time       program used by this function.
+
+cumulative a running sum of the number of seconds accounted
+ seconds   for by this function and those listed above it.
+
+ self      the number of seconds accounted for by this
+seconds    function alone.  This is the major sort for this
+           listing.
+
+calls      the number of times this function was invoked, if
+           this function is profiled, else blank.
+ 
+ self      the average number of milliseconds spent in this
+ms/call    function per call, if this function is profiled,
+	   else blank.
+
+ total     the average number of milliseconds spent in this
+ms/call    function and its descendents per call, if this 
+	   function is profiled, else blank.
+
+name       the name of the function.  This is the minor sort
+           for this listing. The index shows the location of
+	   the function in the gprof listing. If the index is
+	   in parenthesis it shows where it would appear in
+	   the gprof listing if it were to be printed.
+
+Copyright (C) 2012-2014 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+		     Call graph (explanation follows)
+
+
+granularity: each sample hit covers 2 byte(s) for 0.03% of 33.47 seconds
+
+index % time    self  children    called     name
+                                                 <spontaneous>
+[1]     75.5    0.07   25.19                 nmie::nMie_wrapper(int, std::vector<double, std::allocator<double> > const&, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, int, std::vector<double, std::allocator<double> > const&, double*, double*, double*, double*, double*, double*, double*, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [1]
+                1.35   23.75 1500000/1500000     nmie::MultiLayerMie::RunMieCalculations() [2]
+                0.07    0.00 1500000/1500000     nmie::MultiLayerMie::SetWidthSP(std::vector<double, std::allocator<double> > const&) [21]
+                0.02    0.00 1500000/3000000     std::vector<std::complex<double>, std::allocator<std::complex<double> > >::operator=(std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&) [26]
+                0.00    0.00 1500000/1500000     std::vector<double, std::allocator<double> >::operator=(std::vector<double, std::allocator<double> > const&) [449]
+-----------------------------------------------
+                1.35   23.75 1500000/1500000     nmie::nMie_wrapper(int, std::vector<double, std::allocator<double> > const&, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, int, std::vector<double, std::allocator<double> > const&, double*, double*, double*, double*, double*, double*, double*, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [1]
+[2]     75.0    1.35   23.75 1500000         nmie::MultiLayerMie::RunMieCalculations() [2]
+                9.14   13.16 1500000/1500000     nmie::MultiLayerMie::ScattCoeffs(std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [3]
+                0.85    0.00 66000000/93000000     std::vector<std::complex<double>, std::allocator<std::complex<double> > >::_M_default_append(unsigned long) [7]
+                0.56    0.00 1500000/1500000     nmie::MultiLayerMie::calcPiTau(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&) [13]
+                0.02    0.02 1500000/1500000     nmie::MultiLayerMie::InitMieCalculations() [27]
+-----------------------------------------------
+                9.14   13.16 1500000/1500000     nmie::MultiLayerMie::RunMieCalculations() [2]
+[3]     66.6    9.14   13.16 1500000         nmie::MultiLayerMie::ScattCoeffs(std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [3]
+               12.73    0.00 15000000/15000000     nmie::MultiLayerMie::calcD1D3(std::complex<double>, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [4]
+                0.35    0.00 27000000/93000000     std::vector<std::complex<double>, std::allocator<std::complex<double> > >::_M_default_append(unsigned long) [7]
+                0.08    0.00 1500000/1500000     nmie::MultiLayerMie::Nmax(int) [19]
+-----------------------------------------------
+               12.73    0.00 15000000/15000000     nmie::MultiLayerMie::ScattCoeffs(std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [3]
+[4]     38.0   12.73    0.00 15000000         nmie::MultiLayerMie::calcD1D3(std::complex<double>, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [4]
+-----------------------------------------------
+                                                 <spontaneous>
+[5]      6.0    2.00    0.00                 _int_malloc [5]
+-----------------------------------------------
+                                                 <spontaneous>
+[6]      3.8    1.26    0.00                 _int_free [6]
+-----------------------------------------------
+                0.35    0.00 27000000/93000000     nmie::MultiLayerMie::ScattCoeffs(std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [3]
+                0.85    0.00 66000000/93000000     nmie::MultiLayerMie::RunMieCalculations() [2]
+[7]      3.6    1.20    0.00 93000000         std::vector<std::complex<double>, std::allocator<std::complex<double> > >::_M_default_append(unsigned long) [7]
+-----------------------------------------------
+                                                 <spontaneous>
+[8]      2.7    0.91    0.00                 malloc_consolidate [8]
+-----------------------------------------------
+                                                 <spontaneous>
+[9]      2.3    0.78    0.00                 malloc [9]
+-----------------------------------------------
+                                                 <spontaneous>
+[10]     2.1    0.69    0.00                 __cos_avx [10]
+-----------------------------------------------
+                                                 <spontaneous>
+[11]     1.8    0.60    0.00                 __dubsin [11]
+-----------------------------------------------
+                                                 <spontaneous>
+[12]     1.7    0.57    0.00                 __sin_avx [12]
+-----------------------------------------------
+                0.56    0.00 1500000/1500000     nmie::MultiLayerMie::RunMieCalculations() [2]
+[13]     1.7    0.56    0.00 1500000         nmie::MultiLayerMie::calcPiTau(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&) [13]
+-----------------------------------------------
+                                                 <spontaneous>
+[14]     1.4    0.48    0.00                 __ieee754_exp_avx [14]
+-----------------------------------------------
+                                                 <spontaneous>
+[15]     0.6    0.19    0.00                 cfree [15]
+-----------------------------------------------
+                                                 <spontaneous>
+[16]     0.4    0.15    0.00                 memset [16]
+-----------------------------------------------
+                                                 <spontaneous>
+[17]     0.3    0.10    0.00                 operator new(unsigned long) [17]
+-----------------------------------------------
+                                                 <spontaneous>
+[18]     0.3    0.09    0.00                 brk [18]
+-----------------------------------------------
+                0.08    0.00 1500000/1500000     nmie::MultiLayerMie::ScattCoeffs(std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [3]
+[19]     0.2    0.08    0.00 1500000         nmie::MultiLayerMie::Nmax(int) [19]
+-----------------------------------------------
+                                                 <spontaneous>
+[20]     0.2    0.07    0.00                 __malloc_check_init [20]
+-----------------------------------------------
+                0.07    0.00 1500000/1500000     nmie::nMie_wrapper(int, std::vector<double, std::allocator<double> > const&, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, int, std::vector<double, std::allocator<double> > const&, double*, double*, double*, double*, double*, double*, double*, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [1]
+[21]     0.2    0.07    0.00 1500000         nmie::MultiLayerMie::SetWidthSP(std::vector<double, std::allocator<double> > const&) [21]
+-----------------------------------------------
+                                                 <spontaneous>
+[22]     0.2    0.06    0.00                 sincos [22]
+-----------------------------------------------
+                                                 <spontaneous>
+[23]     0.1    0.05    0.00                 free_check [23]
+-----------------------------------------------
+                                                 <spontaneous>
+[24]     0.1    0.05    0.00                 __profile_frequency [24]
+-----------------------------------------------
+                                                 <spontaneous>
+[25]     0.1    0.05    0.00                 _mid_memalign [25]
+-----------------------------------------------
+                0.02    0.00 1500000/3000000     nmie::MultiLayerMie::InitMieCalculations() [27]
+                0.02    0.00 1500000/3000000     nmie::nMie_wrapper(int, std::vector<double, std::allocator<double> > const&, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, int, std::vector<double, std::allocator<double> > const&, double*, double*, double*, double*, double*, double*, double*, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [1]
+[26]     0.1    0.04    0.00 3000000         std::vector<std::complex<double>, std::allocator<std::complex<double> > >::operator=(std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&) [26]
+-----------------------------------------------
+                0.02    0.02 1500000/1500000     nmie::MultiLayerMie::RunMieCalculations() [2]
+[27]     0.1    0.02    0.02 1500000         nmie::MultiLayerMie::InitMieCalculations() [27]
+                0.02    0.00 1500000/3000000     std::vector<std::complex<double>, std::allocator<std::complex<double> > >::operator=(std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&) [26]
+-----------------------------------------------
+                                                 <spontaneous>
+[28]     0.1    0.04    0.00                 csloww [28]
+-----------------------------------------------
+                                                 <spontaneous>
+[29]     0.1    0.03    0.00                 int_mallinfo [29]
+-----------------------------------------------
+                                                 <spontaneous>
+[30]     0.1    0.02    0.00                 void std::vector<std::array<double, 5ul>, std::allocator<std::array<double, 5ul> > >::_M_emplace_back_aux<std::array<double, 5ul> >(std::array<double, 5ul>&&) [30]
+-----------------------------------------------
+                                                 <spontaneous>
+[31]     0.0    0.02    0.00                 __sin_sse2 [31]
+-----------------------------------------------
+                                                 <spontaneous>
+[32]     0.0    0.01    0.00                 bsloww2 [32]
+-----------------------------------------------
+                                                 <spontaneous>
+[33]     0.0    0.01    0.00                 bsloww [33]
+-----------------------------------------------
+                0.00    0.00       1/1           __libc_start_main [2940]
+[34]     0.0    0.00    0.00       1         main [34]
+-----------------------------------------------
+                0.00    0.00 1500000/1500000     nmie::nMie_wrapper(int, std::vector<double, std::allocator<double> > const&, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, int, std::vector<double, std::allocator<double> > const&, double*, double*, double*, double*, double*, double*, double*, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [1]
+[449]    0.0    0.00    0.00 1500000         std::vector<double, std::allocator<double> >::operator=(std::vector<double, std::allocator<double> > const&) [449]
+-----------------------------------------------
+                0.00    0.00       1/1           __libc_csu_init [2925]
+[450]    0.0    0.00    0.00       1         _GLOBAL__sub_I__ZN4nmie12nMie_wrapperEiRKSt6vectorIdSaIdEERKS0_ISt7complexIdESaIS6_EEiS4_PdSB_SB_SB_SB_SB_SB_RS8_SC_ [450]
+-----------------------------------------------
+                0.00    0.00       1/1           __libc_csu_init [2925]
+[451]    0.0    0.00    0.00       1         _GLOBAL__sub_I_main [451]
+-----------------------------------------------
+
+ This table describes the call tree of the program, and was sorted by
+ the total amount of time spent in each function and its children.
+
+ Each entry in this table consists of several lines.  The line with the
+ index number at the left hand margin lists the current function.
+ The lines above it list the functions that called this function,
+ and the lines below it list the functions this one called.
+ This line lists:
+     index	A unique number given to each element of the table.
+		Index numbers are sorted numerically.
+		The index number is printed next to every function name so
+		it is easier to look up where the function is in the table.
+
+     % time	This is the percentage of the `total' time that was spent
+		in this function and its children.  Note that due to
+		different viewpoints, functions excluded by options, etc,
+		these numbers will NOT add up to 100%.
+
+     self	This is the total amount of time spent in this function.
+
+     children	This is the total amount of time propagated into this
+		function by its children.
+
+     called	This is the number of times the function was called.
+		If the function called itself recursively, the number
+		only includes non-recursive calls, and is followed by
+		a `+' and the number of recursive calls.
+
+     name	The name of the current function.  The index number is
+		printed after it.  If the function is a member of a
+		cycle, the cycle number is printed between the
+		function's name and the index number.
+
+
+ For the function's parents, the fields have the following meanings:
+
+     self	This is the amount of time that was propagated directly
+		from the function into this parent.
+
+     children	This is the amount of time that was propagated from
+		the function's children into this parent.
+
+     called	This is the number of times this parent called the
+		function `/' the total number of times the function
+		was called.  Recursive calls to the function are not
+		included in the number after the `/'.
+
+     name	This is the name of the parent.  The parent's index
+		number is printed after it.  If the parent is a
+		member of a cycle, the cycle number is printed between
+		the name and the index number.
+
+ If the parents of the function cannot be determined, the word
+ `<spontaneous>' is printed in the `name' field, and all the other
+ fields are blank.
+
+ For the function's children, the fields have the following meanings:
+
+     self	This is the amount of time that was propagated directly
+		from the child into the function.
+
+     children	This is the amount of time that was propagated from the
+		child's children to the function.
+
+     called	This is the number of times the function called
+		this child `/' the total number of times the child
+		was called.  Recursive calls by the child are not
+		listed in the number after the `/'.
+
+     name	This is the name of the child.  The child's index
+		number is printed after it.  If the child is a
+		member of a cycle, the cycle number is printed
+		between the name and the index number.
+
+ If there are any cycles (circles) in the call graph, there is an
+ entry for the cycle-as-a-whole.  This entry shows who called the
+ cycle (as parents) and the members of the cycle (as children.)
+ The `+' recursive calls entry shows the number of function calls that
+ were internal to the cycle, and the calls entry for each member shows,
+ for that member, how many times it was called from other members of
+ the cycle.
+
+Copyright (C) 2012-2014 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+Index by function name
+
+ [450] _GLOBAL__sub_I__ZN4nmie12nMie_wrapperEiRKSt6vectorIdSaIdEERKS0_ISt7complexIdESaIS6_EEiS4_PdSB_SB_SB_SB_SB_SB_RS8_SC_ [449] std::vector<double, std::allocator<double> >::operator=(std::vector<double, std::allocator<double> > const&) [33] bsloww
+ [451] _GLOBAL__sub_I_main    [17] operator new(unsigned long) [32] bsloww2
+   [1] nmie::nMie_wrapper(int, std::vector<double, std::allocator<double> > const&, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, int, std::vector<double, std::allocator<double> > const&, double*, double*, double*, double*, double*, double*, double*, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [10] __cos_avx [15] cfree
+  [21] nmie::MultiLayerMie::SetWidthSP(std::vector<double, std::allocator<double> > const&) [11] __dubsin [28] csloww
+   [3] nmie::MultiLayerMie::ScattCoeffs(std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [14] __ieee754_exp_avx [23] free_check
+   [2] nmie::MultiLayerMie::RunMieCalculations() [20] __malloc_check_init [29] int_mallinfo
+  [27] nmie::MultiLayerMie::InitMieCalculations() [24] __profile_frequency [34] main
+  [19] nmie::MultiLayerMie::Nmax(int) [12] __sin_avx       [9] malloc
+   [4] nmie::MultiLayerMie::calcD1D3(std::complex<double>, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&, std::vector<std::complex<double>, std::allocator<std::complex<double> > >&) [31] __sin_sse2 [8] malloc_consolidate
+  [13] nmie::MultiLayerMie::calcPiTau(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&) [6] _int_free [16] memset
+  [30] void std::vector<std::array<double, 5ul>, std::allocator<std::array<double, 5ul> > >::_M_emplace_back_aux<std::array<double, 5ul> >(std::array<double, 5ul>&&) [5] _int_malloc [22] sincos
+   [7] std::vector<std::complex<double>, std::allocator<std::complex<double> > >::_M_default_append(unsigned long) [25] _mid_memalign
+  [26] std::vector<std::complex<double>, std::allocator<std::complex<double> > >::operator=(std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&) [18] brk

+ 529 - 0
tests/shell/graph.svg

@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.38.0 (20140413.2041)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg width="3502pt" height="1142pt"
+ viewBox="0.00 0.00 3501.50 1142.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1138)">
+<title>%3</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-1138 3497.5,-1138 3497.5,4 -4,4"/>
+<!-- (below main) -->
+<g id="node1" class="node"><title>(below main)</title>
+<polygon fill="#ff0000" stroke="#ff0000" points="2567,-1031 2496,-1031 2496,-968 2567,-968 2567,-1031"/>
+<text text-anchor="middle" x="2531.5" y="-1019" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2531.5" y="-1008" font-family="Arial" font-size="10.00" fill="#ffffff">(below main)</text>
+<text text-anchor="middle" x="2531.5" y="-997" font-family="Arial" font-size="10.00" fill="#ffffff">100.00%</text>
+<text text-anchor="middle" x="2531.5" y="-986" font-family="Arial" font-size="10.00" fill="#ffffff">(0.00%)</text>
+<text text-anchor="middle" x="2531.5" y="-975" font-family="Arial" font-size="10.00" fill="#ffffff">1×</text>
+</g>
+<!-- main -->
+<g id="node2" class="node"><title>main</title>
+<polygon fill="#ff0000" stroke="#ff0000" points="2559.5,-928 2503.5,-928 2503.5,-865 2559.5,-865 2559.5,-928"/>
+<text text-anchor="middle" x="2531.5" y="-916" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2531.5" y="-905" font-family="Arial" font-size="10.00" fill="#ffffff">main</text>
+<text text-anchor="middle" x="2531.5" y="-894" font-family="Arial" font-size="10.00" fill="#ffffff">100.00%</text>
+<text text-anchor="middle" x="2531.5" y="-883" font-family="Arial" font-size="10.00" fill="#ffffff">(0.02%)</text>
+<text text-anchor="middle" x="2531.5" y="-872" font-family="Arial" font-size="10.00" fill="#ffffff">1×</text>
+</g>
+<!-- (below main)&#45;&gt;main -->
+<g id="edge1" class="edge"><title>(below main)&#45;&gt;main</title>
+<path fill="none" stroke="#ff0000" stroke-width="4" d="M2531.5,-967.923C2531.5,-958.615 2531.5,-948.232 2531.5,-938.359"/>
+<polygon fill="#ff0000" stroke="#ff0000" stroke-width="4" points="2535,-938.322 2531.5,-928.322 2528,-938.322 2535,-938.322"/>
+<text text-anchor="middle" x="2551" y="-951" font-family="Arial" font-size="10.00" fill="#ff0000">100.00%</text>
+<text text-anchor="middle" x="2551" y="-940" font-family="Arial" font-size="10.00" fill="#ff0000">1×</text>
+</g>
+<!-- nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;) -->
+<g id="node13" class="node"><title>nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</title>
+<polygon fill="#ff0000" stroke="#ff0000" points="3493.5,-825 1569.5,-825 1569.5,-762 3493.5,-762 3493.5,-825"/>
+<text text-anchor="middle" x="2531.5" y="-813" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2531.5" y="-802" font-family="Arial" font-size="10.00" fill="#ffffff">nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</text>
+<text text-anchor="middle" x="2531.5" y="-791" font-family="Arial" font-size="10.00" fill="#ffffff">99.98%</text>
+<text text-anchor="middle" x="2531.5" y="-780" font-family="Arial" font-size="10.00" fill="#ffffff">(0.31%)</text>
+<text text-anchor="middle" x="2531.5" y="-769" font-family="Arial" font-size="10.00" fill="#ffffff">150000×</text>
+</g>
+<!-- main&#45;&gt;nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;) -->
+<g id="edge7" class="edge"><title>main&#45;&gt;nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</title>
+<path fill="none" stroke="#ff0000" stroke-width="4" d="M2531.5,-864.923C2531.5,-855.615 2531.5,-845.232 2531.5,-835.359"/>
+<polygon fill="#ff0000" stroke="#ff0000" stroke-width="4" points="2535,-835.322 2531.5,-825.322 2528,-835.322 2535,-835.322"/>
+<text text-anchor="middle" x="2550.5" y="-848" font-family="Arial" font-size="10.00" fill="#ff0000">99.98%</text>
+<text text-anchor="middle" x="2550.5" y="-837" font-family="Arial" font-size="10.00" fill="#ff0000">150000×</text>
+</g>
+<!-- 0x0000000000402b73 -->
+<g id="node3" class="node"><title>0x0000000000402b73</title>
+<polygon fill="#ff0000" stroke="#ff0000" points="2587,-1134 2476,-1134 2476,-1071 2587,-1071 2587,-1134"/>
+<text text-anchor="middle" x="2531.5" y="-1122" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2531.5" y="-1111" font-family="Arial" font-size="10.00" fill="#ffffff">0x0000000000402b73</text>
+<text text-anchor="middle" x="2531.5" y="-1100" font-family="Arial" font-size="10.00" fill="#ffffff">100.00%</text>
+<text text-anchor="middle" x="2531.5" y="-1089" font-family="Arial" font-size="10.00" fill="#ffffff">(0.00%)</text>
+<text text-anchor="middle" x="2531.5" y="-1078" font-family="Arial" font-size="10.00" fill="#ffffff">0×</text>
+</g>
+<!-- 0x0000000000402b73&#45;&gt;(below main) -->
+<g id="edge2" class="edge"><title>0x0000000000402b73&#45;&gt;(below main)</title>
+<path fill="none" stroke="#ff0000" stroke-width="4" d="M2531.5,-1070.92C2531.5,-1061.61 2531.5,-1051.23 2531.5,-1041.36"/>
+<polygon fill="#ff0000" stroke="#ff0000" stroke-width="4" points="2535,-1041.32 2531.5,-1031.32 2528,-1041.32 2535,-1041.32"/>
+<text text-anchor="middle" x="2551" y="-1054" font-family="Arial" font-size="10.00" fill="#ff0000">100.00%</text>
+<text text-anchor="middle" x="2551" y="-1043" font-family="Arial" font-size="10.00" fill="#ff0000">1×</text>
+</g>
+<!-- __cos_avx -->
+<g id="node4" class="node"><title>__cos_avx</title>
+<polygon fill="#0d1c77" stroke="#0d1c77" points="2159.5,-269 2097.5,-269 2097.5,-206 2159.5,-206 2159.5,-269"/>
+<text text-anchor="middle" x="2128.5" y="-257" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2128.5" y="-246" font-family="Arial" font-size="10.00" fill="#ffffff">__cos_avx</text>
+<text text-anchor="middle" x="2128.5" y="-235" font-family="Arial" font-size="10.00" fill="#ffffff">3.58%</text>
+<text text-anchor="middle" x="2128.5" y="-224" font-family="Arial" font-size="10.00" fill="#ffffff">(2.43%)</text>
+<text text-anchor="middle" x="2128.5" y="-213" font-family="Arial" font-size="10.00" fill="#ffffff">3600000×</text>
+</g>
+<!-- csloww -->
+<g id="node5" class="node"><title>csloww</title>
+<polygon fill="#0d1274" stroke="#0d1274" points="2156.5,-166 2100.5,-166 2100.5,-103 2156.5,-103 2156.5,-166"/>
+<text text-anchor="middle" x="2128.5" y="-154" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2128.5" y="-143" font-family="Arial" font-size="10.00" fill="#ffffff">csloww</text>
+<text text-anchor="middle" x="2128.5" y="-132" font-family="Arial" font-size="10.00" fill="#ffffff">1.15%</text>
+<text text-anchor="middle" x="2128.5" y="-121" font-family="Arial" font-size="10.00" fill="#ffffff">(0.15%)</text>
+<text text-anchor="middle" x="2128.5" y="-110" font-family="Arial" font-size="10.00" fill="#ffffff">150000×</text>
+</g>
+<!-- __cos_avx&#45;&gt;csloww -->
+<g id="edge3" class="edge"><title>__cos_avx&#45;&gt;csloww</title>
+<path fill="none" stroke="#0d1274" stroke-width="0.5" d="M2128.5,-205.923C2128.5,-194.557 2128.5,-181.589 2128.5,-169.904"/>
+<polygon fill="#0d1274" stroke="#0d1274" stroke-width="0.5" points="2129.73,-169.822 2128.5,-166.322 2127.28,-169.822 2129.73,-169.822"/>
+<text text-anchor="middle" x="2147.5" y="-189" font-family="Arial" font-size="10.00" fill="#0d1274">1.15%</text>
+<text text-anchor="middle" x="2147.5" y="-178" font-family="Arial" font-size="10.00" fill="#0d1274">150000×</text>
+</g>
+<!-- __dubsin -->
+<g id="node6" class="node"><title>__dubsin</title>
+<polygon fill="#0d1174" stroke="#0d1174" points="2156.5,-63 2100.5,-63 2100.5,-0 2156.5,-0 2156.5,-63"/>
+<text text-anchor="middle" x="2128.5" y="-51" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2128.5" y="-40" font-family="Arial" font-size="10.00" fill="#ffffff">__dubsin</text>
+<text text-anchor="middle" x="2128.5" y="-29" font-family="Arial" font-size="10.00" fill="#ffffff">1.00%</text>
+<text text-anchor="middle" x="2128.5" y="-18" font-family="Arial" font-size="10.00" fill="#ffffff">(1.00%)</text>
+<text text-anchor="middle" x="2128.5" y="-7" font-family="Arial" font-size="10.00" fill="#ffffff">300000×</text>
+</g>
+<!-- csloww&#45;&gt;__dubsin -->
+<g id="edge5" class="edge"><title>csloww&#45;&gt;__dubsin</title>
+<path fill="none" stroke="#0d1174" stroke-width="0.5" d="M2128.5,-102.923C2128.5,-91.5573 2128.5,-78.5886 2128.5,-66.9039"/>
+<polygon fill="#0d1174" stroke="#0d1174" stroke-width="0.5" points="2129.73,-66.822 2128.5,-63.3221 2127.28,-66.8221 2129.73,-66.822"/>
+<text text-anchor="middle" x="2147.5" y="-86" font-family="Arial" font-size="10.00" fill="#0d1174">1.00%</text>
+<text text-anchor="middle" x="2147.5" y="-75" font-family="Arial" font-size="10.00" fill="#0d1174">300000×</text>
+</g>
+<!-- __ieee754_exp_avx -->
+<g id="node7" class="node"><title>__ieee754_exp_avx</title>
+<polygon fill="#0d1575" stroke="#0d1575" points="3198,-372 3097,-372 3097,-309 3198,-309 3198,-372"/>
+<text text-anchor="middle" x="3147.5" y="-360" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="3147.5" y="-349" font-family="Arial" font-size="10.00" fill="#ffffff">__ieee754_exp_avx</text>
+<text text-anchor="middle" x="3147.5" y="-338" font-family="Arial" font-size="10.00" fill="#ffffff">1.95%</text>
+<text text-anchor="middle" x="3147.5" y="-327" font-family="Arial" font-size="10.00" fill="#ffffff">(1.95%)</text>
+<text text-anchor="middle" x="3147.5" y="-316" font-family="Arial" font-size="10.00" fill="#ffffff">3300000×</text>
+</g>
+<!-- __sin_avx -->
+<g id="node8" class="node"><title>__sin_avx</title>
+<polygon fill="#0d1675" stroke="#0d1675" points="2231,-269 2172,-269 2172,-206 2231,-206 2231,-269"/>
+<text text-anchor="middle" x="2201.5" y="-257" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2201.5" y="-246" font-family="Arial" font-size="10.00" fill="#ffffff">__sin_avx</text>
+<text text-anchor="middle" x="2201.5" y="-235" font-family="Arial" font-size="10.00" fill="#ffffff">2.12%</text>
+<text text-anchor="middle" x="2201.5" y="-224" font-family="Arial" font-size="10.00" fill="#ffffff">(2.12%)</text>
+<text text-anchor="middle" x="2201.5" y="-213" font-family="Arial" font-size="10.00" fill="#ffffff">2850000×</text>
+</g>
+<!-- _int_free -->
+<g id="node9" class="node"><title>_int_free</title>
+<polygon fill="#0d367e" stroke="#0d367e" points="3407,-269 3342,-269 3342,-206 3407,-206 3407,-269"/>
+<text text-anchor="middle" x="3374.5" y="-257" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="3374.5" y="-246" font-family="Arial" font-size="10.00" fill="#ffffff">_int_free</text>
+<text text-anchor="middle" x="3374.5" y="-235" font-family="Arial" font-size="10.00" fill="#ffffff">9.00%</text>
+<text text-anchor="middle" x="3374.5" y="-224" font-family="Arial" font-size="10.00" fill="#ffffff">(6.91%)</text>
+<text text-anchor="middle" x="3374.5" y="-213" font-family="Arial" font-size="10.00" fill="#ffffff">12900042×</text>
+</g>
+<!-- malloc_consolidate -->
+<g id="node10" class="node"><title>malloc_consolidate</title>
+<polygon fill="#0d1675" stroke="#0d1675" points="3424.5,-166 3324.5,-166 3324.5,-103 3424.5,-103 3424.5,-166"/>
+<text text-anchor="middle" x="3374.5" y="-154" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="3374.5" y="-143" font-family="Arial" font-size="10.00" fill="#ffffff">malloc_consolidate</text>
+<text text-anchor="middle" x="3374.5" y="-132" font-family="Arial" font-size="10.00" fill="#ffffff">2.09%</text>
+<text text-anchor="middle" x="3374.5" y="-121" font-family="Arial" font-size="10.00" fill="#ffffff">(2.09%)</text>
+<text text-anchor="middle" x="3374.5" y="-110" font-family="Arial" font-size="10.00" fill="#ffffff">300001×</text>
+</g>
+<!-- _int_free&#45;&gt;malloc_consolidate -->
+<g id="edge4" class="edge"><title>_int_free&#45;&gt;malloc_consolidate</title>
+<path fill="none" stroke="#0d1675" stroke-width="0.5" d="M3374.5,-205.923C3374.5,-194.557 3374.5,-181.589 3374.5,-169.904"/>
+<polygon fill="#0d1675" stroke="#0d1675" stroke-width="0.5" points="3375.73,-169.822 3374.5,-166.322 3373.28,-169.822 3375.73,-169.822"/>
+<text text-anchor="middle" x="3393.5" y="-189" font-family="Arial" font-size="10.00" fill="#0d1675">2.09%</text>
+<text text-anchor="middle" x="3393.5" y="-178" font-family="Arial" font-size="10.00" fill="#0d1675">300000×</text>
+</g>
+<!-- _int_malloc -->
+<g id="node11" class="node"><title>_int_malloc</title>
+<polygon fill="#0d4281" stroke="#0d4281" points="1089.5,-166 1023.5,-166 1023.5,-103 1089.5,-103 1089.5,-166"/>
+<text text-anchor="middle" x="1056.5" y="-154" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="1056.5" y="-143" font-family="Arial" font-size="10.00" fill="#ffffff">_int_malloc</text>
+<text text-anchor="middle" x="1056.5" y="-132" font-family="Arial" font-size="10.00" fill="#ffffff">11.34%</text>
+<text text-anchor="middle" x="1056.5" y="-121" font-family="Arial" font-size="10.00" fill="#ffffff">(11.34%)</text>
+<text text-anchor="middle" x="1056.5" y="-110" font-family="Arial" font-size="10.00" fill="#ffffff">12900048×</text>
+</g>
+<!-- free -->
+<g id="node12" class="node"><title>free</title>
+<polygon fill="#0d3b80" stroke="#0d3b80" points="3407,-372 3342,-372 3342,-309 3407,-309 3407,-372"/>
+<text text-anchor="middle" x="3374.5" y="-360" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="3374.5" y="-349" font-family="Arial" font-size="10.00" fill="#ffffff">free</text>
+<text text-anchor="middle" x="3374.5" y="-338" font-family="Arial" font-size="10.00" fill="#ffffff">10.11%</text>
+<text text-anchor="middle" x="3374.5" y="-327" font-family="Arial" font-size="10.00" fill="#ffffff">(1.11%)</text>
+<text text-anchor="middle" x="3374.5" y="-316" font-family="Arial" font-size="10.00" fill="#ffffff">12900042×</text>
+</g>
+<!-- free&#45;&gt;_int_free -->
+<g id="edge6" class="edge"><title>free&#45;&gt;_int_free</title>
+<path fill="none" stroke="#0d367e" stroke-width="0.5" d="M3374.5,-308.923C3374.5,-297.557 3374.5,-284.589 3374.5,-272.904"/>
+<polygon fill="#0d367e" stroke="#0d367e" stroke-width="0.5" points="3375.73,-272.822 3374.5,-269.322 3373.28,-272.822 3375.73,-272.822"/>
+<text text-anchor="middle" x="3399" y="-292" font-family="Arial" font-size="10.00" fill="#0d367e">9.00%</text>
+<text text-anchor="middle" x="3399" y="-281" font-family="Arial" font-size="10.00" fill="#0d367e">12900042×</text>
+</g>
+<!-- operator new(unsigned long) -->
+<g id="node17" class="node"><title>operator new(unsigned long)</title>
+<polygon fill="#0c5887" stroke="#0c5887" points="1125.5,-372 987.5,-372 987.5,-309 1125.5,-309 1125.5,-372"/>
+<text text-anchor="middle" x="1056.5" y="-360" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="1056.5" y="-349" font-family="Arial" font-size="10.00" fill="#ffffff">operator new(unsigned long)</text>
+<text text-anchor="middle" x="1056.5" y="-338" font-family="Arial" font-size="10.00" fill="#ffffff">15.39%</text>
+<text text-anchor="middle" x="1056.5" y="-327" font-family="Arial" font-size="10.00" fill="#ffffff">(0.87%)</text>
+<text text-anchor="middle" x="1056.5" y="-316" font-family="Arial" font-size="10.00" fill="#ffffff">12900041×</text>
+</g>
+<!-- nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator new(unsigned long) -->
+<g id="edge31" class="edge"><title>nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d0e73" stroke-width="0.5" d="M2268.66,-761.931C2196.96,-741.131 2125.6,-706.713 2076.5,-650 2028.21,-594.223 2031.31,-542.321 2076.5,-484 2084.25,-474.001 2096.1,-485.261 2103.5,-475 2119.87,-452.285 2122.62,-432.453 2103.5,-412 2086.83,-394.172 1364.1,-356.775 1129.32,-345.077"/>
+<polygon fill="#0d0e73" stroke="#0d0e73" stroke-width="0.5" points="1129.12,-343.84 1125.56,-344.889 1129,-346.287 1129.12,-343.84"/>
+<text text-anchor="middle" x="2074.5" y="-590.5" font-family="Arial" font-size="10.00" fill="#0d0e73">0.38%</text>
+<text text-anchor="middle" x="2074.5" y="-579.5" font-family="Arial" font-size="10.00" fill="#0d0e73">300000×</text>
+</g>
+<!-- nmie::MultiLayerMie::RunMieCalculations() -->
+<g id="node18" class="node"><title>nmie::MultiLayerMie::RunMieCalculations()</title>
+<polygon fill="#f83101" stroke="#f83101" points="1592,-722 1389,-722 1389,-659 1592,-659 1592,-722"/>
+<text text-anchor="middle" x="1490.5" y="-710" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="1490.5" y="-699" font-family="Arial" font-size="10.00" fill="#ffffff">nmie::MultiLayerMie::RunMieCalculations()</text>
+<text text-anchor="middle" x="1490.5" y="-688" font-family="Arial" font-size="10.00" fill="#ffffff">95.20%</text>
+<text text-anchor="middle" x="1490.5" y="-677" font-family="Arial" font-size="10.00" fill="#ffffff">(6.68%)</text>
+<text text-anchor="middle" x="1490.5" y="-666" font-family="Arial" font-size="10.00" fill="#ffffff">150000×</text>
+</g>
+<!-- nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;nmie::MultiLayerMie::RunMieCalculations() -->
+<g id="edge28" class="edge"><title>nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;nmie::MultiLayerMie::RunMieCalculations()</title>
+<path fill="none" stroke="#f83101" stroke-width="3.81" d="M2120.92,-761.979C2087.61,-759.094 2054.48,-756.088 2022.5,-753 1877.11,-738.96 1709.83,-718.993 1602.26,-705.659"/>
+<polygon fill="#f83101" stroke="#f83101" stroke-width="3.81" points="1602.52,-702.234 1592.37,-704.43 1601.67,-709.042 1602.52,-702.234"/>
+<text text-anchor="middle" x="2041.5" y="-745" font-family="Arial" font-size="10.00" fill="#f83101">95.20%</text>
+<text text-anchor="middle" x="2041.5" y="-734" font-family="Arial" font-size="10.00" fill="#f83101">150000×</text>
+</g>
+<!-- operator delete(void*) -->
+<g id="node21" class="node"><title>operator delete(void*)</title>
+<polygon fill="#0d3c80" stroke="#0d3c80" points="3428,-475 3321,-475 3321,-412 3428,-412 3428,-475"/>
+<text text-anchor="middle" x="3374.5" y="-463" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="3374.5" y="-452" font-family="Arial" font-size="10.00" fill="#ffffff">operator delete(void*)</text>
+<text text-anchor="middle" x="3374.5" y="-441" font-family="Arial" font-size="10.00" fill="#ffffff">10.19%</text>
+<text text-anchor="middle" x="3374.5" y="-430" font-family="Arial" font-size="10.00" fill="#ffffff">(0.08%)</text>
+<text text-anchor="middle" x="3374.5" y="-419" font-family="Arial" font-size="10.00" fill="#ffffff">12900041×</text>
+</g>
+<!-- nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator delete(void*) -->
+<g id="edge30" class="edge"><title>nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator delete(void*)</title>
+<path fill="none" stroke="#0d1776" stroke-width="0.5" d="M2970.13,-761.997C3169.17,-737.861 3373.34,-694.953 3432.5,-619 3465.13,-577.11 3430.88,-515.993 3402.88,-478.315"/>
+<polygon fill="#0d1776" stroke="#0d1776" stroke-width="0.5" points="3403.61,-477.256 3400.53,-475.194 3401.65,-478.728 3403.61,-477.256"/>
+<text text-anchor="middle" x="3445" y="-642" font-family="Arial" font-size="10.00" fill="#0d1776">2.54%</text>
+<text text-anchor="middle" x="3445" y="-631" font-family="Arial" font-size="10.00" fill="#0d1776">1200000×</text>
+</g>
+<!-- nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;) -->
+<g id="node27" class="node"><title>nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;)</title>
+<polygon fill="#0d1274" stroke="#0d1274" points="3428,-619 3033,-619 3033,-556 3428,-556 3428,-619"/>
+<text text-anchor="middle" x="3230.5" y="-607" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="3230.5" y="-596" font-family="Arial" font-size="10.00" fill="#ffffff">nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;)</text>
+<text text-anchor="middle" x="3230.5" y="-585" font-family="Arial" font-size="10.00" fill="#ffffff">1.18%</text>
+<text text-anchor="middle" x="3230.5" y="-574" font-family="Arial" font-size="10.00" fill="#ffffff">(0.31%)</text>
+<text text-anchor="middle" x="3230.5" y="-563" font-family="Arial" font-size="10.00" fill="#ffffff">150000×</text>
+</g>
+<!-- nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;) -->
+<g id="edge29" class="edge"><title>nmie::nMie_wrapper(int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt; const&amp;, int, std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;, double*, double*, double*, double*, double*, double*, double*, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;)</title>
+<path fill="none" stroke="#0d1274" stroke-width="0.5" d="M2636.15,-761.959C2766.95,-723.784 2989.72,-658.771 3122.21,-620.105"/>
+<polygon fill="#0d1274" stroke="#0d1274" stroke-width="0.5" points="3122.69,-621.239 3125.71,-619.083 3122.01,-618.887 3122.69,-621.239"/>
+<text text-anchor="middle" x="3003.5" y="-693.5" font-family="Arial" font-size="10.00" fill="#0d1274">1.18%</text>
+<text text-anchor="middle" x="3003.5" y="-682.5" font-family="Arial" font-size="10.00" fill="#0d1274">150000×</text>
+</g>
+<!-- malloc -->
+<g id="node14" class="node"><title>malloc</title>
+<polygon fill="#0c5386" stroke="#0c5386" points="1089,-269 1024,-269 1024,-206 1089,-206 1089,-269"/>
+<text text-anchor="middle" x="1056.5" y="-257" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="1056.5" y="-246" font-family="Arial" font-size="10.00" fill="#ffffff">malloc</text>
+<text text-anchor="middle" x="1056.5" y="-235" font-family="Arial" font-size="10.00" fill="#ffffff">14.52%</text>
+<text text-anchor="middle" x="1056.5" y="-224" font-family="Arial" font-size="10.00" fill="#ffffff">(3.18%)</text>
+<text text-anchor="middle" x="1056.5" y="-213" font-family="Arial" font-size="10.00" fill="#ffffff">12900048×</text>
+</g>
+<!-- malloc&#45;&gt;_int_malloc -->
+<g id="edge8" class="edge"><title>malloc&#45;&gt;_int_malloc</title>
+<path fill="none" stroke="#0d4281" stroke-width="0.5" d="M1056.5,-205.923C1056.5,-194.557 1056.5,-181.589 1056.5,-169.904"/>
+<polygon fill="#0d4281" stroke="#0d4281" stroke-width="0.5" points="1057.73,-169.822 1056.5,-166.322 1055.28,-169.822 1057.73,-169.822"/>
+<text text-anchor="middle" x="1081" y="-189" font-family="Arial" font-size="10.00" fill="#0d4281">11.34%</text>
+<text text-anchor="middle" x="1081" y="-178" font-family="Arial" font-size="10.00" fill="#0d4281">12900047×</text>
+</g>
+<!-- memset -->
+<g id="node15" class="node"><title>memset</title>
+<polygon fill="#0d0f74" stroke="#0d0f74" points="248,-475 189,-475 189,-412 248,-412 248,-475"/>
+<text text-anchor="middle" x="218.5" y="-463" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="218.5" y="-452" font-family="Arial" font-size="10.00" fill="#ffffff">memset</text>
+<text text-anchor="middle" x="218.5" y="-441" font-family="Arial" font-size="10.00" fill="#ffffff">0.64%</text>
+<text text-anchor="middle" x="218.5" y="-430" font-family="Arial" font-size="10.00" fill="#ffffff">(0.64%)</text>
+<text text-anchor="middle" x="218.5" y="-419" font-family="Arial" font-size="10.00" fill="#ffffff">6450004×</text>
+</g>
+<!-- nmie::MultiLayerMie::InitMieCalculations() -->
+<g id="node16" class="node"><title>nmie::MultiLayerMie::InitMieCalculations()</title>
+<polygon fill="#0d0f73" stroke="#0d0f73" points="1349.5,-547 1151.5,-547 1151.5,-484 1349.5,-484 1349.5,-547"/>
+<text text-anchor="middle" x="1250.5" y="-535" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="1250.5" y="-524" font-family="Arial" font-size="10.00" fill="#ffffff">nmie::MultiLayerMie::InitMieCalculations()</text>
+<text text-anchor="middle" x="1250.5" y="-513" font-family="Arial" font-size="10.00" fill="#ffffff">0.52%</text>
+<text text-anchor="middle" x="1250.5" y="-502" font-family="Arial" font-size="10.00" fill="#ffffff">(0.07%)</text>
+<text text-anchor="middle" x="1250.5" y="-491" font-family="Arial" font-size="10.00" fill="#ffffff">150000×</text>
+</g>
+<!-- nmie::MultiLayerMie::InitMieCalculations()&#45;&gt;operator new(unsigned long) -->
+<g id="edge9" class="edge"><title>nmie::MultiLayerMie::InitMieCalculations()&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d0d73" stroke-width="0.5" d="M1151.42,-490.041C1138.4,-487.581 1125.18,-485.458 1112.5,-484 1101.67,-482.754 335.166,-482.754 327.5,-475 307.815,-455.088 308.678,-432.73 327.5,-412 371.086,-363.996 808.007,-347.732 983.805,-343.104"/>
+<polygon fill="#0d0d73" stroke="#0d0d73" stroke-width="0.5" points="983.931,-344.326 987.398,-343.01 983.867,-341.877 983.931,-344.326"/>
+<text text-anchor="middle" x="346.5" y="-446.5" font-family="Arial" font-size="10.00" fill="#0d0d73">0.17%</text>
+<text text-anchor="middle" x="346.5" y="-435.5" font-family="Arial" font-size="10.00" fill="#0d0d73">150000×</text>
+</g>
+<!-- operator new(unsigned long)&#45;&gt;malloc -->
+<g id="edge33" class="edge"><title>operator new(unsigned long)&#45;&gt;malloc</title>
+<path fill="none" stroke="#0c5386" stroke-width="0.58" d="M1056.5,-308.923C1056.5,-297.655 1056.5,-284.812 1056.5,-273.206"/>
+<polygon fill="#0c5386" stroke="#0c5386" stroke-width="0.58" points="1057.83,-273.122 1056.5,-269.322 1055.17,-273.122 1057.83,-273.122"/>
+<text text-anchor="middle" x="1081" y="-292" font-family="Arial" font-size="10.00" fill="#0c5386">14.52%</text>
+<text text-anchor="middle" x="1081" y="-281" font-family="Arial" font-size="10.00" fill="#0c5386">12900041×</text>
+</g>
+<!-- nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;nmie::MultiLayerMie::InitMieCalculations() -->
+<g id="edge10" class="edge"><title>nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;nmie::MultiLayerMie::InitMieCalculations()</title>
+<path fill="none" stroke="#0d0f73" stroke-width="0.5" d="M1448.15,-658.969C1405.35,-628.121 1339.47,-580.63 1295.69,-549.071"/>
+<polygon fill="#0d0f73" stroke="#0d0f73" stroke-width="0.5" points="1296.39,-548.069 1292.83,-547.016 1294.96,-550.056 1296.39,-548.069"/>
+<text text-anchor="middle" x="1453.5" y="-642" font-family="Arial" font-size="10.00" fill="#0d0f73">0.52%</text>
+<text text-anchor="middle" x="1453.5" y="-631" font-family="Arial" font-size="10.00" fill="#0d0f73">150000×</text>
+</g>
+<!-- nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;) -->
+<g id="node19" class="node"><title>nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</title>
+<polygon fill="#95cf07" stroke="#95cf07" points="2962.5,-619 2114.5,-619 2114.5,-556 2962.5,-556 2962.5,-619"/>
+<text text-anchor="middle" x="2538.5" y="-607" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2538.5" y="-596" font-family="Arial" font-size="10.00" fill="#ffffff">nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</text>
+<text text-anchor="middle" x="2538.5" y="-585" font-family="Arial" font-size="10.00" fill="#ffffff">67.79%</text>
+<text text-anchor="middle" x="2538.5" y="-574" font-family="Arial" font-size="10.00" fill="#ffffff">(32.37%)</text>
+<text text-anchor="middle" x="2538.5" y="-563" font-family="Arial" font-size="10.00" fill="#ffffff">150000×</text>
+</g>
+<!-- nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;) -->
+<g id="edge11" class="edge"><title>nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</title>
+<path fill="none" stroke="#95cf07" stroke-width="2.71" d="M1592.42,-679.678C1734.93,-665.943 2000.24,-640.374 2213.73,-619.8"/>
+<polygon fill="#95cf07" stroke="#95cf07" stroke-width="2.71" points="2214.05,-622.652 2221.93,-619.009 2213.5,-616.939 2214.05,-622.652"/>
+<text text-anchor="middle" x="2127.5" y="-642" font-family="Arial" font-size="10.00" fill="#95cf07">67.79%</text>
+<text text-anchor="middle" x="2127.5" y="-631" font-family="Arial" font-size="10.00" fill="#95cf07">150000×</text>
+</g>
+<!-- nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;) -->
+<g id="node20" class="node"><title>nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;)</title>
+<polygon fill="#0d2279" stroke="#0d2279" points="2099.5,-475 881.5,-475 881.5,-412 2099.5,-412 2099.5,-475"/>
+<text text-anchor="middle" x="1490.5" y="-463" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="1490.5" y="-452" font-family="Arial" font-size="10.00" fill="#ffffff">nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;)</text>
+<text text-anchor="middle" x="1490.5" y="-441" font-family="Arial" font-size="10.00" fill="#ffffff">4.89%</text>
+<text text-anchor="middle" x="1490.5" y="-430" font-family="Arial" font-size="10.00" fill="#ffffff">(3.12%)</text>
+<text text-anchor="middle" x="1490.5" y="-419" font-family="Arial" font-size="10.00" fill="#ffffff">150000×</text>
+</g>
+<!-- nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;) -->
+<g id="edge12" class="edge"><title>nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;)</title>
+<path fill="none" stroke="#0d2279" stroke-width="0.5" d="M1490.5,-658.966C1490.5,-613.085 1490.5,-526.641 1490.5,-478.7"/>
+<polygon fill="#0d2279" stroke="#0d2279" stroke-width="0.5" points="1491.73,-478.533 1490.5,-475.033 1489.28,-478.533 1491.73,-478.533"/>
+<text text-anchor="middle" x="1509.5" y="-590.5" font-family="Arial" font-size="10.00" fill="#0d2279">4.89%</text>
+<text text-anchor="middle" x="1509.5" y="-579.5" font-family="Arial" font-size="10.00" fill="#0d2279">150000×</text>
+</g>
+<!-- nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;operator delete(void*) -->
+<g id="edge13" class="edge"><title>nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;operator delete(void*)</title>
+<path fill="none" stroke="#0d1e78" stroke-width="0.5" d="M1592.28,-687.84C1917.33,-682.121 2912.41,-661.227 2966.5,-619 2989.55,-601.004 2964.35,-576.196 2985.5,-556 3080.31,-465.484 3143.92,-514.055 3271.5,-484 3289.66,-479.722 3294.89,-481.162 3312.5,-475 3314.11,-474.435 3315.74,-473.839 3317.37,-473.216"/>
+<polygon fill="#0d1e78" stroke="#0d1e78" stroke-width="0.5" points="3317.91,-474.319 3320.73,-471.903 3317.02,-472.038 3317.91,-474.319"/>
+<text text-anchor="middle" x="3007" y="-590.5" font-family="Arial" font-size="10.00" fill="#0d1e78">3.93%</text>
+<text text-anchor="middle" x="3007" y="-579.5" font-family="Arial" font-size="10.00" fill="#0d1e78">6900000×</text>
+</g>
+<!-- std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138] -->
+<g id="node22" class="node"><title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138]</title>
+<polygon fill="#0d3c80" stroke="#0d3c80" points="437,-619 2.84217e-14,-619 2.84217e-14,-556 437,-556 437,-619"/>
+<text text-anchor="middle" x="218.5" y="-607" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="218.5" y="-596" font-family="Arial" font-size="10.00" fill="#ffffff">std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138]</text>
+<text text-anchor="middle" x="218.5" y="-585" font-family="Arial" font-size="10.00" fill="#ffffff">10.34%</text>
+<text text-anchor="middle" x="218.5" y="-574" font-family="Arial" font-size="10.00" fill="#ffffff">(2.33%)</text>
+<text text-anchor="middle" x="218.5" y="-563" font-family="Arial" font-size="10.00" fill="#ffffff">6300000×</text>
+</g>
+<!-- nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138] -->
+<g id="edge14" class="edge"><title>nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138]</title>
+<path fill="none" stroke="#0d3c80" stroke-width="0.5" d="M1388.86,-682.066C1283.09,-674.28 1112.66,-661.594 965.5,-650 789.005,-636.095 589.12,-619.599 440.558,-607.194"/>
+<polygon fill="#0d3c80" stroke="#0d3c80" stroke-width="0.5" points="440.648,-605.972 437.058,-606.902 440.444,-608.414 440.648,-605.972"/>
+<text text-anchor="middle" x="987" y="-642" font-family="Arial" font-size="10.00" fill="#0d3c80">10.34%</text>
+<text text-anchor="middle" x="987" y="-631" font-family="Arial" font-size="10.00" fill="#0d3c80">6300000×</text>
+</g>
+<!-- std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_default_append(unsigned long) [clone .part.146] -->
+<g id="node23" class="node"><title>std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_default_append(unsigned long) [clone .part.146]</title>
+<polygon fill="#0d1174" stroke="#0d1174" points="1108.5,-547 342.5,-547 342.5,-484 1108.5,-484 1108.5,-547"/>
+<text text-anchor="middle" x="725.5" y="-535" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="725.5" y="-524" font-family="Arial" font-size="10.00" fill="#ffffff">std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_default_append(unsigned long) [clone .part.146]</text>
+<text text-anchor="middle" x="725.5" y="-513" font-family="Arial" font-size="10.00" fill="#ffffff">1.04%</text>
+<text text-anchor="middle" x="725.5" y="-502" font-family="Arial" font-size="10.00" fill="#ffffff">(0.44%)</text>
+<text text-anchor="middle" x="725.5" y="-491" font-family="Arial" font-size="10.00" fill="#ffffff">300000×</text>
+</g>
+<!-- nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_default_append(unsigned long) [clone .part.146] -->
+<g id="edge15" class="edge"><title>nmie::MultiLayerMie::RunMieCalculations()&#45;&gt;std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_default_append(unsigned long) [clone .part.146]</title>
+<path fill="none" stroke="#0d1174" stroke-width="0.5" d="M1388.91,-666.527C1254.02,-636.022 1015.25,-582.026 863.955,-547.811"/>
+<polygon fill="#0d1174" stroke="#0d1174" stroke-width="0.5" points="864.082,-546.584 860.398,-547.006 863.541,-548.973 864.082,-546.584"/>
+<text text-anchor="middle" x="1330.5" y="-642" font-family="Arial" font-size="10.00" fill="#0d1174">1.04%</text>
+<text text-anchor="middle" x="1330.5" y="-631" font-family="Arial" font-size="10.00" fill="#0d1174">300000×</text>
+</g>
+<!-- nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;__ieee754_exp_avx -->
+<g id="edge16" class="edge"><title>nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;__ieee754_exp_avx</title>
+<path fill="none" stroke="#0d1174" stroke-width="0.5" d="M2724.73,-555.979C2734.53,-553.225 2744.18,-550.238 2753.5,-547 2810.03,-527.365 2814.6,-499.108 2872.5,-484 2893.04,-478.641 3239.67,-490.186 3254.5,-475 3274.06,-454.969 3267.78,-436.651 3254.5,-412 3242.98,-390.621 3221.83,-374.655 3201.36,-363.374"/>
+<polygon fill="#0d1174" stroke="#0d1174" stroke-width="0.5" points="3201.74,-362.189 3198.08,-361.604 3200.58,-364.345 3201.74,-362.189"/>
+<text text-anchor="middle" x="3289" y="-446.5" font-family="Arial" font-size="10.00" fill="#0d1174">1.10%</text>
+<text text-anchor="middle" x="3289" y="-435.5" font-family="Arial" font-size="10.00" fill="#0d1174">1800000×</text>
+</g>
+<!-- nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator new(unsigned long) -->
+<g id="edge19" class="edge"><title>nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d1776" stroke-width="0.5" d="M2240.46,-555.964C2230.49,-553.215 2222.02,-550.233 2215.5,-547 2175.52,-527.163 2168.27,-513.388 2145.5,-475 2123.2,-437.395 2151.39,-407.353 2116.5,-381 2107.57,-374.251 1724.69,-372.385 1713.5,-372 1501.05,-364.698 1250.15,-351.887 1129.07,-345.441"/>
+<polygon fill="#0d1776" stroke="#0d1776" stroke-width="0.5" points="1129.09,-344.215 1125.53,-345.252 1128.96,-346.661 1129.09,-344.215"/>
+<text text-anchor="middle" x="2167" y="-446.5" font-family="Arial" font-size="10.00" fill="#0d1776">2.41%</text>
+<text text-anchor="middle" x="2167" y="-435.5" font-family="Arial" font-size="10.00" fill="#0d1776">1950000×</text>
+</g>
+<!-- nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator delete(void*) -->
+<g id="edge18" class="edge"><title>nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;operator delete(void*)</title>
+<path fill="none" stroke="#0d1b77" stroke-width="0.5" d="M2844.52,-555.986C2854.48,-553.234 2862.95,-550.245 2869.5,-547 2904.42,-529.692 2894.79,-499.625 2930.5,-484 2969.5,-466.934 3272.19,-485.266 3313.5,-475 3314.71,-474.7 3315.92,-474.374 3317.13,-474.023"/>
+<polygon fill="#0d1b77" stroke="#0d1b77" stroke-width="0.5" points="3317.78,-475.104 3320.76,-472.902 3317.06,-472.763 3317.78,-475.104"/>
+<text text-anchor="middle" x="2952" y="-518.5" font-family="Arial" font-size="10.00" fill="#0d1b77">3.40%</text>
+<text text-anchor="middle" x="2952" y="-507.5" font-family="Arial" font-size="10.00" fill="#0d1b77">4200000×</text>
+</g>
+<!-- nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;) -->
+<g id="node24" class="node"><title>nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</title>
+<polygon fill="#0c6e8c" stroke="#0c6e8c" points="3250.5,-475 2308.5,-475 2308.5,-412 3250.5,-412 3250.5,-475"/>
+<text text-anchor="middle" x="2779.5" y="-463" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2779.5" y="-452" font-family="Arial" font-size="10.00" fill="#ffffff">nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</text>
+<text text-anchor="middle" x="2779.5" y="-441" font-family="Arial" font-size="10.00" fill="#ffffff">19.21%</text>
+<text text-anchor="middle" x="2779.5" y="-430" font-family="Arial" font-size="10.00" fill="#ffffff">(15.97%)</text>
+<text text-anchor="middle" x="2779.5" y="-419" font-family="Arial" font-size="10.00" fill="#ffffff">1500000×</text>
+</g>
+<!-- nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;) -->
+<g id="edge17" class="edge"><title>nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)</title>
+<path fill="none" stroke="#0c6e8c" stroke-width="0.77" d="M2590.5,-555.863C2629.77,-532.721 2683.59,-501.012 2723.75,-477.347"/>
+<polygon fill="#0c6e8c" stroke="#0c6e8c" stroke-width="0.77" points="2724.59,-478.643 2727.6,-475.082 2723.02,-475.989 2724.59,-478.643"/>
+<text text-anchor="middle" x="2730" y="-518.5" font-family="Arial" font-size="10.00" fill="#0c6e8c">19.21%</text>
+<text text-anchor="middle" x="2730" y="-507.5" font-family="Arial" font-size="10.00" fill="#0c6e8c">1500000×</text>
+</g>
+<!-- sincos -->
+<g id="node25" class="node"><title>sincos</title>
+<polygon fill="#0d2179" stroke="#0d2179" points="2231,-372 2172,-372 2172,-309 2231,-309 2231,-372"/>
+<text text-anchor="middle" x="2201.5" y="-360" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="2201.5" y="-349" font-family="Arial" font-size="10.00" fill="#ffffff">sincos</text>
+<text text-anchor="middle" x="2201.5" y="-338" font-family="Arial" font-size="10.00" fill="#ffffff">4.63%</text>
+<text text-anchor="middle" x="2201.5" y="-327" font-family="Arial" font-size="10.00" fill="#ffffff">(0.44%)</text>
+<text text-anchor="middle" x="2201.5" y="-316" font-family="Arial" font-size="10.00" fill="#ffffff">2850000×</text>
+</g>
+<!-- nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;sincos -->
+<g id="edge20" class="edge"><title>nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;sincos</title>
+<path fill="none" stroke="#0d1676" stroke-width="0.5" d="M2326.07,-555.967C2280.22,-539.333 2236.77,-513.874 2207.5,-475 2186.24,-446.771 2188.16,-404.877 2193.19,-375.57"/>
+<polygon fill="#0d1676" stroke="#0d1676" stroke-width="0.5" points="2194.41,-375.721 2193.82,-372.06 2192,-375.289 2194.41,-375.721"/>
+<text text-anchor="middle" x="2229" y="-446.5" font-family="Arial" font-size="10.00" fill="#0d1676">2.24%</text>
+<text text-anchor="middle" x="2229" y="-435.5" font-family="Arial" font-size="10.00" fill="#0d1676">1350000×</text>
+</g>
+<!-- std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;::_M_default_append(unsigned long) -->
+<g id="node26" class="node"><title>std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;::_M_default_append(unsigned long)</title>
+<polygon fill="#0d2b7b" stroke="#0d2b7b" points="873,-475 370,-475 370,-412 873,-412 873,-475"/>
+<text text-anchor="middle" x="621.5" y="-463" font-family="Arial" font-size="10.00" fill="#ffffff">scattnlay</text>
+<text text-anchor="middle" x="621.5" y="-452" font-family="Arial" font-size="10.00" fill="#ffffff">std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;::_M_default_append(unsigned long)</text>
+<text text-anchor="middle" x="621.5" y="-441" font-family="Arial" font-size="10.00" fill="#ffffff">6.81%</text>
+<text text-anchor="middle" x="621.5" y="-430" font-family="Arial" font-size="10.00" fill="#ffffff">(3.56%)</text>
+<text text-anchor="middle" x="621.5" y="-419" font-family="Arial" font-size="10.00" fill="#ffffff">2700000×</text>
+</g>
+<!-- nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;::_M_default_append(unsigned long) -->
+<g id="edge21" class="edge"><title>nmie::MultiLayerMie::ScattCoeffs(std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;::_M_default_append(unsigned long)</title>
+<path fill="none" stroke="#0d2b7b" stroke-width="0.5" d="M2188.92,-555.978C1846.99,-526.168 1374.46,-485.103 1353.5,-484 1143,-472.923 1088.67,-489.414 876.917,-475.023"/>
+<polygon fill="#0d2b7b" stroke="#0d2b7b" stroke-width="0.5" points="876.732,-473.783 873.156,-474.765 876.564,-476.227 876.732,-473.783"/>
+<text text-anchor="middle" x="2085" y="-518.5" font-family="Arial" font-size="10.00" fill="#0d2b7b">6.81%</text>
+<text text-anchor="middle" x="2085" y="-507.5" font-family="Arial" font-size="10.00" fill="#0d2b7b">2700000×</text>
+</g>
+<!-- nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;)&#45;&gt;__cos_avx -->
+<g id="edge26" class="edge"><title>nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;)&#45;&gt;__cos_avx</title>
+<path fill="none" stroke="#0d1375" stroke-width="0.5" d="M1586.02,-411.959C1730.68,-365.704 1998.56,-280.048 2093.79,-249.598"/>
+<polygon fill="#0d1375" stroke="#0d1375" stroke-width="0.5" points="2094.42,-250.684 2097.38,-248.451 2093.67,-248.35 2094.42,-250.684"/>
+<text text-anchor="middle" x="1923.5" y="-343.5" font-family="Arial" font-size="10.00" fill="#0d1375">1.51%</text>
+<text text-anchor="middle" x="1923.5" y="-332.5" font-family="Arial" font-size="10.00" fill="#0d1375">750000×</text>
+</g>
+<!-- nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;)&#45;&gt;operator new(unsigned long) -->
+<g id="edge27" class="edge"><title>nmie::MultiLayerMie::calcPiTau(std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;, std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;&amp;)&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d0d73" stroke-width="0.5" d="M1359.4,-411.991C1283.92,-394.426 1191.91,-373.013 1129.24,-358.428"/>
+<polygon fill="#0d0d73" stroke="#0d0d73" stroke-width="0.5" points="1129.22,-357.165 1125.53,-357.565 1128.66,-359.551 1129.22,-357.165"/>
+<text text-anchor="middle" x="1331.5" y="-395" font-family="Arial" font-size="10.00" fill="#0d0d73">0.17%</text>
+<text text-anchor="middle" x="1331.5" y="-384" font-family="Arial" font-size="10.00" fill="#0d0d73">150000×</text>
+</g>
+<!-- operator delete(void*)&#45;&gt;free -->
+<g id="edge32" class="edge"><title>operator delete(void*)&#45;&gt;free</title>
+<path fill="none" stroke="#0d3b80" stroke-width="0.5" d="M3374.5,-411.923C3374.5,-400.557 3374.5,-387.589 3374.5,-375.904"/>
+<polygon fill="#0d3b80" stroke="#0d3b80" stroke-width="0.5" points="3375.73,-375.822 3374.5,-372.322 3373.28,-375.822 3375.73,-375.822"/>
+<text text-anchor="middle" x="3399" y="-395" font-family="Arial" font-size="10.00" fill="#0d3b80">10.11%</text>
+<text text-anchor="middle" x="3399" y="-384" font-family="Arial" font-size="10.00" fill="#0d3b80">12900041×</text>
+</g>
+<!-- std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138]&#45;&gt;memset -->
+<g id="edge36" class="edge"><title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138]&#45;&gt;memset</title>
+<path fill="none" stroke="#0d0f74" stroke-width="0.5" d="M218.5,-555.688C218.5,-533.079 218.5,-502.364 218.5,-478.945"/>
+<polygon fill="#0d0f74" stroke="#0d0f74" stroke-width="0.5" points="219.725,-478.752 218.5,-475.252 217.275,-478.752 219.725,-478.752"/>
+<text text-anchor="middle" x="240" y="-518.5" font-family="Arial" font-size="10.00" fill="#0d0f74">0.62%</text>
+<text text-anchor="middle" x="240" y="-507.5" font-family="Arial" font-size="10.00" fill="#0d0f74">6300000×</text>
+</g>
+<!-- std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138]&#45;&gt;operator new(unsigned long) -->
+<g id="edge37" class="edge"><title>std::vector&lt;double, std::allocator&lt;double&gt; &gt;::_M_default_append(unsigned long) [clone .part.138]&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d2e7c" stroke-width="0.5" d="M186.677,-555.868C152.115,-518.867 106.258,-456.108 141.5,-412 193.716,-346.648 776.047,-341.075 983.581,-341.181"/>
+<polygon fill="#0d2e7c" stroke="#0d2e7c" stroke-width="0.5" points="983.711,-342.406 987.212,-341.183 983.713,-339.956 983.711,-342.406"/>
+<text text-anchor="middle" x="163" y="-446.5" font-family="Arial" font-size="10.00" fill="#0d2e7c">7.39%</text>
+<text text-anchor="middle" x="163" y="-435.5" font-family="Arial" font-size="10.00" fill="#0d2e7c">6300000×</text>
+</g>
+<!-- std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_default_append(unsigned long) [clone .part.146]&#45;&gt;operator new(unsigned long) -->
+<g id="edge39" class="edge"><title>std::vector&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt;, std::allocator&lt;std::vector&lt;double, std::allocator&lt;double&gt; &gt; &gt; &gt;::_M_default_append(unsigned long) [clone .part.146]&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d0f74" stroke-width="0.5" d="M342.088,-494.662C306.541,-489.536 280.918,-483.094 273.5,-475 254.582,-454.357 258.354,-435.55 273.5,-412 291.466,-384.064 309.249,-388.942 341.5,-381 461.571,-351.431 826.791,-343.965 983.652,-342.105"/>
+<polygon fill="#0d0f74" stroke="#0d0f74" stroke-width="0.5" points="983.833,-343.328 987.318,-342.062 983.804,-340.879 983.833,-343.328"/>
+<text text-anchor="middle" x="292.5" y="-446.5" font-family="Arial" font-size="10.00" fill="#0d0f74">0.61%</text>
+<text text-anchor="middle" x="292.5" y="-435.5" font-family="Arial" font-size="10.00" fill="#0d0f74">300000×</text>
+</g>
+<!-- nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;__ieee754_exp_avx -->
+<g id="edge24" class="edge"><title>nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;__ieee754_exp_avx</title>
+<path fill="none" stroke="#0d1074" stroke-width="0.5" d="M2890.91,-411.923C2957.98,-393.515 3040.37,-370.902 3093.39,-356.35"/>
+<polygon fill="#0d1074" stroke="#0d1074" stroke-width="0.5" points="3093.79,-357.511 3096.84,-355.403 3093.14,-355.148 3093.79,-357.511"/>
+<text text-anchor="middle" x="3018" y="-395" font-family="Arial" font-size="10.00" fill="#0d1074">0.85%</text>
+<text text-anchor="middle" x="3018" y="-384" font-family="Arial" font-size="10.00" fill="#0d1074">1500000×</text>
+</g>
+<!-- nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;sincos -->
+<g id="edge25" class="edge"><title>nmie::MultiLayerMie::calcD1D3(std::complex&lt;double&gt;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;, std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;&amp;)&#45;&gt;sincos</title>
+<path fill="none" stroke="#0d1776" stroke-width="0.5" d="M2604.9,-411.991C2473.82,-389.085 2305.28,-359.635 2234.8,-347.319"/>
+<polygon fill="#0d1776" stroke="#0d1776" stroke-width="0.5" points="2234.77,-346.071 2231.11,-346.675 2234.35,-348.484 2234.77,-346.071"/>
+<text text-anchor="middle" x="2564" y="-395" font-family="Arial" font-size="10.00" fill="#0d1776">2.40%</text>
+<text text-anchor="middle" x="2564" y="-384" font-family="Arial" font-size="10.00" fill="#0d1776">1500000×</text>
+</g>
+<!-- sincos&#45;&gt;__cos_avx -->
+<g id="edge34" class="edge"><title>sincos&#45;&gt;__cos_avx</title>
+<path fill="none" stroke="#0d1575" stroke-width="0.5" d="M2171.85,-315.126C2165.12,-309.224 2159.17,-303.589 2156.5,-300 2150.33,-291.696 2145.09,-281.816 2140.87,-272.432"/>
+<polygon fill="#0d1575" stroke="#0d1575" stroke-width="0.5" points="2141.89,-271.712 2139.36,-269.001 2139.65,-272.698 2141.89,-271.712"/>
+<text text-anchor="middle" x="2178" y="-292" font-family="Arial" font-size="10.00" fill="#0d1575">2.07%</text>
+<text text-anchor="middle" x="2178" y="-281" font-family="Arial" font-size="10.00" fill="#0d1575">2850000×</text>
+</g>
+<!-- sincos&#45;&gt;__sin_avx -->
+<g id="edge35" class="edge"><title>sincos&#45;&gt;__sin_avx</title>
+<path fill="none" stroke="#0d1675" stroke-width="0.5" d="M2201.5,-308.923C2201.5,-297.557 2201.5,-284.589 2201.5,-272.904"/>
+<polygon fill="#0d1675" stroke="#0d1675" stroke-width="0.5" points="2202.73,-272.822 2201.5,-269.322 2200.28,-272.822 2202.73,-272.822"/>
+<text text-anchor="middle" x="2223" y="-292" font-family="Arial" font-size="10.00" fill="#0d1675">2.12%</text>
+<text text-anchor="middle" x="2223" y="-281" font-family="Arial" font-size="10.00" fill="#0d1675">2850000×</text>
+</g>
+<!-- std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;::_M_default_append(unsigned long)&#45;&gt;operator new(unsigned long) -->
+<g id="edge38" class="edge"><title>std::vector&lt;std::complex&lt;double&gt;, std::allocator&lt;std::complex&lt;double&gt; &gt; &gt;::_M_default_append(unsigned long)&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d1b77" stroke-width="0.5" d="M752.899,-411.991C828.552,-394.426 920.778,-373.013 983.591,-358.428"/>
+<polygon fill="#0d1b77" stroke="#0d1b77" stroke-width="0.5" points="984.177,-359.55 987.309,-357.565 983.623,-357.163 984.177,-359.55"/>
+<text text-anchor="middle" x="900" y="-395" font-family="Arial" font-size="10.00" fill="#0d1b77">3.25%</text>
+<text text-anchor="middle" x="900" y="-384" font-family="Arial" font-size="10.00" fill="#0d1b77">2700000×</text>
+</g>
+<!-- nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;)&#45;&gt;operator new(unsigned long) -->
+<g id="edge23" class="edge"><title>nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;)&#45;&gt;operator new(unsigned long)</title>
+<path fill="none" stroke="#0d0f74" stroke-width="0.5" d="M3160.56,-555.948C3099.97,-531.183 3009.26,-498.156 2926.5,-484 2908.4,-480.904 2280,-486.265 2265.5,-475 2242.6,-457.209 2269.03,-432.482 2248.5,-412 2210.72,-374.311 2185.33,-388.516 2132.5,-381 2040.3,-367.883 1806.58,-375.16 1713.5,-372 1501.05,-364.788 1250.15,-351.936 1129.07,-345.461"/>
+<polygon fill="#0d0f74" stroke="#0d0f74" stroke-width="0.5" points="1129.09,-344.235 1125.53,-345.271 1128.96,-346.682 1129.09,-344.235"/>
+<text text-anchor="middle" x="2284.5" y="-446.5" font-family="Arial" font-size="10.00" fill="#0d0f74">0.63%</text>
+<text text-anchor="middle" x="2284.5" y="-435.5" font-family="Arial" font-size="10.00" fill="#0d0f74">600000×</text>
+</g>
+<!-- nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;)&#45;&gt;operator delete(void*) -->
+<g id="edge22" class="edge"><title>nmie::MultiLayerMie::SetWidthSP(std::vector&lt;double, std::allocator&lt;double&gt; &gt; const&amp;)&#45;&gt;operator delete(void*)</title>
+<path fill="none" stroke="#0d0e73" stroke-width="0.5" d="M3261.75,-555.688C3285.05,-532.707 3316.85,-501.351 3340.74,-477.795"/>
+<polygon fill="#0d0e73" stroke="#0d0e73" stroke-width="0.5" points="3341.68,-478.582 3343.32,-475.252 3339.96,-476.837 3341.68,-478.582"/>
+<text text-anchor="middle" x="3351.5" y="-518.5" font-family="Arial" font-size="10.00" fill="#0d0e73">0.24%</text>
+<text text-anchor="middle" x="3351.5" y="-507.5" font-family="Arial" font-size="10.00" fill="#0d0e73">450000×</text>
+</g>
+</g>
+</svg>